手把手AI Agent系列教程:
- 如何用 Dify + Oracle + DeepSeek 来打造一个更懂你的AI翻译助手!
一、为什么需要AI翻译助手?
传统人工翻译行业的核心痛点:
- 人工翻译效率低、成本高
- 专业文档中英文术语众多,语境依赖强
- 不同译者风格不同,专业术语更新快、难统一
AI时代下,为什么不直接使用LLM翻译?
- 虽然目前主流大模型的能力都已经做很好的通用翻译工作,但是具体到专业领域,因为会涉及很多特定专业术语,甚至是私域的一些DIY需求,这些LLM都是不知道的,需要我们来额外告知它。
- 若直接使用LLM翻译,就需要用户在每次翻译时都通过提示词来交互告知LLM。虽然看起来简单,但其实这样不仅不灵活,还存在一系列棘手的问题。比如专业术语表通常会有不定时更新,提示词也需要对应同步修改,又比如专业术语过多时,会导致提示词过长,匹配翻译的过程中也更容易出现幻觉导致翻译错误。
因此,我们需要利用 Dify 编排工作流 + Oracle 存储术语表 + DeepSeek 高性价比大模型,实现术语优先、上下文自然的智能翻译助手,轻松搞定专业文档翻译,节省人力成本!
技术组件 | 角色与优势 |
---|---|
Oracle 数据库 | 作为术语表的存储中心,支持高效查询并保障数据安全 |
Dify 工作流平台 | 多节点编排 + 灵活变量传递 + 易维护提示词系统 |
DeepSeek 模型 | 国产开源大模型,性价比高、响应速度快、支持私有部署 |
二、翻译助手的实现原理
翻译助手的实现原理拆解如下:
- 首先需要将专业术语定义到数据库中的一张表(这张术语表可开放给专业管理人员来进行维护)
- 用户输入需要翻译的原文,数据库会自动处理提取出原文中的专业术语
- 根据术语表强制替换,保持一致性
- 非术语内容由 LLM 自然翻译
- 输出流畅、准确、术语统一的专业中文结果
三、翻译助手Demo设计
测试用例:
- Oracle Exadata Database Machine is powerful.
- Oracle Database Appliance delivers exceptional cost-effectiveness for enterprise database workloads.
术语定义:
- Oracle -> 甲骨文中国
- Exadata Database Machine -> 原厂Exadata数据库一体机
- Oracle Database Appliance -> 原厂ODA数据库一体机
为什么定义这样的术语,因为LLM再强大,默认也绝不会这么翻译,如此能快速验证术语翻译效果。
另外这样定义,其实也不是完全胡编,有一定的适用场景,比如Oracle很多资料介绍,都是Global层面的,原文只会讲Oracle
如何如何,而针对国内市场的宣传,很多时候又需要强调是Oracle中国
。
而数据库一体机
在国内也是有相当多的产品,当在纯中文场景描述时,加上原厂
标识可以让用户快速理解这是Oracle公司的一体机产品。
注:这个用例是极致简化之后的,以至于有读者会觉得这么简单直接把需求给LLM处理不也行?但真实场景下,术语会有很多,且可能不断更新,且不同领域的术语也是完全不同,总不能每次都去调整提示词。
四、翻译助手Demo实现
下面我们就手把手的演示如何具体实现这个Demo:
1.创建术语表
创建一张术语表,用于存放术语。
这里在建表之后手工插入3条术语定义,用于直观演示Demo效果:
SQL
--创建术语表glossary,关键字段只有term和translation
--我这里加了domain字段,但目前测试还未用到,可以暂时忽略,默认为TEST业务域
CREATE TABLE glossary (
id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
term VARCHAR2(200) NOT NULL, -- 英文术语
translation VARCHAR2(500), -- 中文翻译
domain VARCHAR2(50) DEFAULT 'TEST', -- 业务域
CONSTRAINT glossary_uk UNIQUE (term,domain) -- 保证 同一domain内 term 唯一
);
--插入示例术语:
insert into glossary(term, translation) values ('Oracle','甲骨文中国');
insert into glossary(term, translation) values ('Exadata Database Machine','原厂Exadata数据库一体机');
insert into glossary(term, translation) values ('Oracle Database Appliance','原厂ODA数据库一体机');
commit;
2.创建匹配英文术语函数
定义一个函数,可接受原始文本,用于匹配筛选出其中的英文术语:
SQL
--创建一个匹配英文术语的函数
--后续可以添加一个区分domain的参数,目前测试期间简化,默认都是TEST域
create or replace FUNCTION match_english_terms(
p_input IN VARCHAR2
) RETURN VARCHAR2 IS
v_result CLOB := '';
-- 用于存储游标结果的变量
v_term VARCHAR2(200);
v_cn VARCHAR2(200);
-- 游标定义
CURSOR cur_full IS
SELECT term, translation FROM glossary
WHERE REGEXP_LIKE(p_input, '(^|\W)' || term || '(\W|$)', 'i');
BEGIN
-- 处理完整英文术语匹配
FOR rec IN cur_full LOOP
v_result := v_result || '英文: ' || rec.term || '; 中文: ' || rec.translation || CHR(10);
END LOOP;
-- 返回结果,如果超过4000字节则截断
IF LENGTH(v_result) > 4000 THEN
RETURN SUBSTR(v_result, 1, 4000);
ELSE
RETURN v_result;
END IF;
EXCEPTION
WHEN OTHERS THEN
RETURN '错误: ' || SQLERRM;
END match_english_terms;
注:这里测试阶段术语较少,使用的是REGEXP_LIKE + 游标遍历的方式;但实际上如果术语特别多,这种方式效率不高,可选择适合的数据库特性进一步优化方案,以后有机会分享,现Demo阶段暂不考虑。
3.为智能体编排工作流
使用Dify连接Oracle数据库的插件选择的是这个db_query:
连接信息说明如下:
Dify编排的工作流越简单越好:
- 开始
START
节点,用户可以自定义输入文本 - 数据库查询
SQL QUERY
节点,连接到Oracle数据库调用函数match_english_terms()
- 大语言模型
LLM
节点,配置好提示词,调用指定的LLM模型执行翻译任务 - 结束
END
节点,输出最终结果 - 增加一个
END2
节点,想更直观快捷的看到提取后术语情况(可选项,只是方便调试使用)
关于LLM的节点,因为Demo比较简单,提示词写的也简单,当然你也可以测试改写为适合你场景的更加专业的提示词:
-
system:
你是一个专业的技术文档翻译助手,能够识别指定术语并严格替换,同时将非术语部分自然翻译,最终组合成流畅的中文。请优先匹配最长术语,大小写敏感。
-
user:
请将以下英文内容翻译为中文:{{#1753434053258.user_input#}}
需要替换的术语如下:{{#1754555934960.text#}}
五、翻译助手Demo最终效果
最后翻译助手的测试可以得到我们所期望的结果,如下:
-
用例1:Oracle Exadata Database Machine is powerful.
-
用例2:Oracle Database Appliance delivers exceptional cost-effectiveness for enterprise database workloads.
可以看到两个测试用例,均按照我们的期望,替换了专业术语,翻译准确。
顺便提下,这里用例2后面的"说明",是LLM自己输出的,如果不想要这样的说明,也是可以在提示词那里要求下,比如只要最终翻译结果的输出,不要任何其他信息输出即可。
至此,我们使用 Dify + Oracle + DeepSeek 成功打造出一个更懂你的翻译助手。