可以在 Dify v0.6.9中发布人工智能工作流程作为可复用的工具(在Agent或Workflow中使用)。这使得它可以与新的agents和其它workflows集成,从而消除重复的工作。新增了两个工作流节点和一个改进的节点:
迭代:确保输入为数组。迭代节点将依次处理数组中的每个项目,直到所有项目都被处理。例如,如果你需要一篇长文章,只需输入几个标题。这将生成一篇包含每个标题段落的文章,免去了复杂的提示编排的需求。
参数提取器:使用大型语言模型(LLM)从自然语言中提取结构化参数,简化了在工作流中使用工具和进行HTTP请求的过程。
变量聚合器:改进的变量赋值器支持更灵活的变量选择。同时,通过改进节点连接方式,增强了用户体验。
Dify中的工作流分为Chatflow 和 Workflow 两种:Chatflow面向对话类情景,包括客户服务、语义搜索、及在构建响应时进行多步逻辑的对话式应用程序。Workflow:面向自动化和批处理情景,适合高质量翻译、数据分析、内容生成、电子邮件自动化等应用程序。
Chatflow使用入口
Workflow使用入口
一.三步翻译工作流
1.开始节点
在「开始」节点内定义输入变量支持四种类型:文本、段落、下拉选项和数字。如下所示:
在 Chatflow 中,开始节点会提供系统内置变量:sys.query 和 sys.files,sys.query 用于对话型应用中的用户问题输入,sys.files 用于对话中上传文件,如上传一张图片用于理解含义,需要配合图像理解模型或者图片输入的工具来使用。
2.LLM(识别专有名词)节点
SYSTEM为对话提供高层指导,如下所示:
<任务> 识别用户输入的技术术语。请用{XXX} -> {XXX}的格式展示翻译前后的技术术语对应关系。
<输入文本>
{{#1711067409646.input_text#}}
<示例>
Transformer -> Transformer
Token -> Token
零样本 -> Zero Shot
少样本 -> Few Shot
<专有名词>
在 LLM 节点内,可自定义模型输入提示词。如果选择聊天模型(Chat model),可自定义系统提示词(SYSTEM)/用户(USER)/助手(ASSISTANT)三部分内容。如下所示:
序号 | 解释 | 备注 | |
---|---|---|---|
1 | SYSTEM(提示词) | 为对话提供高层指导 | 提示词 |
2 | USER(用户) | 向模型提供指令、查询或任何基于文本的输入 | 用户问题 |
3 | ASSISTANT(助手) | 基于用户消息的模型回复 | 助手答案 |
3.LLM2(直接翻译)节点
SYSTEM为对话提供高层指导,如下所示:
<任务> 您是一名精通英文的专业译者,特别是在将专业的学术论文转换为通俗易懂的科普文章方面有着非凡的能力。请协助我把下面的中文段落翻译成英文,使其风格与英文的科普文章相似。
<限制>
请根据中文内容直接翻译,维持原有的格式,不省略任何信息。
<翻译前>
{{#1711067409646.input_text#}}
<直接翻译>
4.LLM3(指出直接翻译的问题)
SYSTEM为对话提供高层指导,如下所示:
<任务>
根据直接翻译的结果,指出其具体存在的问题。需要提供精确描述,避免含糊其辞,并且无需增添原文中未包含的内容或格式。具体包括但不限于:
不符合英文的表达习惯,请明确指出哪里不合适句子结构笨拙,请指出具体位置,无需提供修改建议,我们将在后续的自由翻译中进行调整表达含糊不清,难以理解,如果可能,可以试图进行解释
<直接翻译>
{{#1711067578643.text#}}
<原文>
{{#1711067409646.input_text#}}
<直接翻译的问题>
5.LLM4(意译 - 第二次翻译)
SYSTEM为对话提供高层指导,如下所示:
<任务>基于初次直接翻译的成果及随后识别的各项问题,我们将进行一次重新翻译,旨在更准确地传达原文的意义。在这一过程中,我们将致力于确保内容既忠于原意,又更加贴近英文的表达方式,更容易被理解。在此过程中,我们将保持原有格式不变。
<直接翻译>
{{#1711067578643.text#}}
<第一次翻译的问题>
{{#1711067817657.text#}}
<意译>
6.结束节点
定义输出变量名字second_translation
。
7.将Workflow发布为工具
将Workflow发布为工具,才能在Agent中使用,如下所示:
点击访问工具页,如下所示:
8.Jinja模版
在写Prompt时候,发现支持Jinja模板。具体可参考[3][4]。
二.在Workflow中使用Workflow
三.在Agent中使用Workflow
本质上把Workflow当成工具,从而扩展Agent能力,和其它工具类似,比如互联网搜索、科学计算等。
四.单独测试三步翻译工作流
输入内容如下所示:
Transformer是大语言模型的基础。
输出内容如下所示:
The Transformer serves as the cornerstone for large-scale language models.
详情页面如下所示:
追踪页面如下所示:
1.开始
(1)输入
{
"input_text": "Transformer是大语言模型的基础。",
"sys.files": [],
"sys.user_id": "7d8864c3-c456-4588-9b0a-9368c94ca377"
}
(2)输出
{
"input_text": "Transformer是大语言模型的基础。",
"sys.files": [],
"sys.user_id": "7d8864c3-c456-4588-9b0a-9368c94ca377"
}
2.LLM
(1)数据处理
{
"model_mode": "chat",
"prompts": [
{
"role": "system",
"text": "<任务> 识别用户输入的技术术语。请用{XXX} -> {XXX}的格式展示翻译前后的技术术语对应关系。\n<输入文本>\nTransformer是大语言模型的基础。\n<示例>\nTransformer -> Transformer\nToken -> Token\n零样本 -> Zero Shot \n少样本 -> Few Shot\n<专有名词>",
"files": []
}
]
}
(2)输出
{
"text": "Transformer -> Transformer",
"usage": {
"prompt_tokens": 107,
"prompt_unit_price": "0.01",
"prompt_price_unit": "0.001",
"prompt_price": "0.0010700",
"completion_tokens": 3,
"completion_unit_price": "0.03",
"completion_price_unit": "0.001",
"completion_price": "0.0000900",
"total_tokens": 110,
"total_price": "0.0011600",
"currency": "USD",
"latency": 1.0182260260044131
}
}
3.LLM 2
(1)数据处理
{
"model_mode": "chat",
"prompts": [
{
"role": "system",
"text": "<任务> 您是一名精通英文的专业译者,特别是在将专业的学术论文转换为通俗易懂的科普文章方面有着非凡的能力。请协助我把下面的中文段落翻译成英文,使其风格与英文的科普文章相似。\n<限制> \n请根据中文内容直接翻译,维持原有的格式,不省略任何信息。\n<翻译前> \nTransformer是大语言模型的基础。\n<直接翻译> ",
"files": []
}
]
}
(2)输出
{
"text": "The Transformer is the foundation of large language models.",
"usage": {
"prompt_tokens": 176,
"prompt_unit_price": "0.001",
"prompt_price_unit": "0.001",
"prompt_price": "0.0001760",
"completion_tokens": 10,
"completion_unit_price": "0.002",
"completion_price_unit": "0.001",
"completion_price": "0.0000200",
"total_tokens": 186,
"total_price": "0.0001960",
"currency": "USD",
"latency": 0.516718350991141
}
}
4.LLM 3
(1)数据处理
{
"model_mode": "chat",
"prompts": [
{
"role": "system",
"text": "<任务>\n根据直接翻译的结果,指出其具体存在的问题。需要提供精确描述,避免含糊其辞,并且无需增添原文中未包含的内容或格式。具体包括但不限于:\n不符合英文的表达习惯,请明确指出哪里不合适句子结构笨拙,请指出具体位置,无需提供修改建议,我们将在后续的自由翻译中进行调整表达含糊不清,难以理解,如果可能,可以试图进行解释\n<直接翻译>\nThe Transformer is the foundation of large language models.\n<原文>\nTransformer是大语言模型的基础。\n<直接翻译的问题>",
"files": []
}
]
}
(2)输出
{
"text": "句子结构笨拙,不符合英文表达习惯。",
"usage": {
"prompt_tokens": 217,
"prompt_unit_price": "0.001",
"prompt_price_unit": "0.001",
"prompt_price": "0.0002170",
"completion_tokens": 22,
"completion_unit_price": "0.002",
"completion_price_unit": "0.001",
"completion_price": "0.0000440",
"total_tokens": 239,
"total_price": "0.0002610",
"currency": "USD",
"latency": 0.8566757979860995
}
}
5.LLM 4
(1)数据处理
{
"model_mode": "chat",
"prompts": [
{
"role": "system",
"text": "<任务>基于初次直接翻译的成果及随后识别的各项问题,我们将进行一次重新翻译,旨在更准确地传达原文的意义。在这一过程中,我们将致力于确保内容既忠于原意,又更加贴近英文的表达方式,更容易被理解。在此过程中,我们将保持原有格式不变。\n<直接翻译> \nThe Transformer is the foundation of large language models.\n<第一次翻译的问题>\n句子结构笨拙,不符合英文表达习惯。\n<意译> ",
"files": []
}
]
}
(2)输出
{
"text": "The Transformer serves as the cornerstone for large-scale language models.",
"usage": {
"prompt_tokens": 187,
"prompt_unit_price": "0.01",
"prompt_price_unit": "0.001",
"prompt_price": "0.0018700",
"completion_tokens": 12,
"completion_unit_price": "0.03",
"completion_price_unit": "0.001",
"completion_price": "0.0003600",
"total_tokens": 199,
"total_price": "0.0022300",
"currency": "USD",
"latency": 1.3619857440062333
}
}
6.结束
(1)输入
{
"second_translation": "The Transformer serves as the cornerstone for large-scale language models."
}
(2)输出
{
"second_translation": "The Transformer serves as the cornerstone for large-scale language models."
}
五.在Agent中测试三步翻译工作流
当启动工具的时候:
当关闭工具的时候:
六.相关问题
1.Agent中的Workflow何时被触发
和工具一样,通过工具描述触发。具体实现只有看源码才能清楚。
参考文献
[1] 工作流:https://docs.dify.ai/v/zh-hans/guides/workflow
[2] 手摸手教你把 Dify 接入微信生态:https://docs.dify.ai/v/zh-hans/learn-more/use-cases/dify-on-wechat
[3] Jinja官方文档:https://jinja.palletsprojects.com/en/3.0.x/
[4] Jinja模板:https://jinja.palletsprojects.com/en/3.1.x/templates/