前段时间,陆续和大家分享了Dify 搭建智能体
的实战系列文章:
本次分享,带大家熟悉 Dify
中另外两个重要概念 – 智能体
+工作流
,进而打造一个图像生成专家
。
1. 聊天助手 VS 智能体
Dify 中,有几个概念不太容易区分,很多小伙伴问:
下图中聊天助手
和智能体
到底有什么区别?
工作流
又是啥?
笔者一开始进来也懵,进去体验一番,也只能有个感性认识。
为了回答上述问题,特地去查了下官方文档,下面用大白话分享给大家:
聊天助手
:主要面向对话式应用,咱们前几篇教程都是基于聊天助手
搭建。它有两种搭建方式:其中基础编排
一个大模型就可以搞定,而工作流编排
则适用于多步逻辑/多个模型的对话式应用。
-
文本生成应用
:这个就更简单了,只支持单次对话,适用于文章生成、翻译等任务。 -
Agent
:完全自主化的智能体,对复杂任务进行规划、拆解、工具调用、迭代。适用于要调用外部工具
的场景。Dify 为Agent
提供了 Function calling(函数调用)和 ReAct 两种推理模式。- Function calling:适用于支持 Function call 的模型
- ReAct:适用于不支持 Function call 的模型。
-
工作流
:面向自动化和批处理情景,适合数据分析、电子邮件自动化等场景。
值得注意的是:工作流
支持发布为工具,然后在Agent
中调用。
下面,我们就来实操这个过程:用工作流
的方式创建一个图片生成工具
,然后在图片生成Agent
中调用。
2. 创建工作流
2.1 图像生成API获取
AI 图像生成技术已经非常成熟,从 SD 到 Flux 再到最近的小熊猫,高质量、高分辨率且逼真的图像,已不再难求。
然而,这些模型通常比较大,本地部署成本非常高,为此,推荐大家前往硅基官网注册一个账号,体验它的免费模型!
注册成功后,新建一个 api_key,下面会用到。关于如何获取 api_key,猴哥之前多次分享,这里不再赘述!
2.2 新建工作流
在创建空白应用这里,选择工作流
:
进来后,页面只有一个开始
组件,给它添加上两个字段,用于后续请求图像生成API:
你怎么知道添加哪些字段呢?
参考硅基的API文档:https://docs.siliconflow.cn/api-reference/images/images-generations
Body 内需要的字段,就是我们要准备的:
2.3 添加HTTP请求节点
然后,在开始
节点后面新建一个节点:HTTP
请求,填写如下:
这里有几点需要注意:
- BODY:需选择
Json
格式,字段务必加上双引号。 - 鉴权:右上角鉴权位置,填写你在硅基申请的 api_key。否则无法成功调用。
2.4 添加代码执行节点
HTTP请求
节点输出的标准的 response,为了提取其中 Body 中的内容,我们需要一个代码执行
节点,把生成图片的 url 拿到。
代码执行
节点,编辑如下:
这里有几点需要注意:
- arg1:传入 http 请求得到的 body 字段。
- 代码:输入是字符串格式,用 json 转成 dict。
- import json 需放入 main 函数里;
- 函数返回值必须为 dict 格式。
2.5 添加结束节点
直接将代码执行
节点的 url 字段输出:
2.6 发布为工具
最后,点击右上角发布
,记得最下方完成配置,才能发布为工具:
如下图所示,给工具起一个英文名字,工具描述这里,尽可能详细,明确具体用途,方便大模型按需调用!
工具入参,也要加上描述,以便大模型能够生成对应的参数值,提高调用成功率!
至此,一个图像生成工具
就制作完成了。
下面,我们创建一个 Agent 来调用它。
3. 创建 Agent
3.1 实操步骤
创建应用,选这个:
Step 1: 在下方把刚做好的图像生成工具
加上:
Step 2: 编写角色提示词:
Step 3: Agent 设置:
图中的大模型只支持 ReAct 方式实现函数调用,如果你的模型支持 Function call,可进行选择。
Step 4: 调试和预览:
如果希望实时显示图像呢?
来,修改一下提示词:
根据用户输入,生成给图像流工具{{generate_image}}的参数:提示词和图像尺寸,
获得最终的生成图像的url,并显示最终的图像
如果我指定了尺寸,智能体会自动选择一个最匹配的尺寸参数,如下图所示:
生成效果不咋样?
对,提示词最好改为英文,以确保生成效果。
当然这一步也可以交给智能体,只需修改提示词如下:
根据用户输入,生成给图像流工具{{generate_image}}的参数:提示词和图像尺寸,获得最终的生成图像的url,并显示最终的图像
要求:
- 提示词:请从对话记录中找到和图片生成相关的词汇,生成给stable diffusion等图片生成模型的英文提示词;
- 图像尺寸:请从对话记录中找到和图像尺寸相关的词汇,并找到图像尺寸选项中最接近的一个,如果没有相关词汇,则默认选择768x1024
3.2 效果展示
3.3 API调用
智能体发布后,就可以在后端调用它的 API。
不过,Dify 中 Agent 的 API 调用有点特殊:只支持流式输出!
不知道为啥 Dify 这样设置,懂的小伙伴帮忙评论区解释一下。
python 端的调用代码示例如下:
url = 'http://localhost:3006/v1/chat-messages'
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json',
}
data = {
"inputs": {},
"query": "生成一张猫的图片,尺寸2:1",
"response_mode": "streaming",
"conversation_id": "",
"user": "xiaoai",
}
response = requests.post(url, headers=headers, json=data)
events = []
for chunk in response.iter_lines():
if chunk:
chunk_data = chunk.decode('utf-8').replace('data: ', '')
events.append(json.loads(chunk_data))
with open('data.json', 'w') as f:
json.dump(events, f, indent=4, ensure_ascii=False)
写在最后
本文通过综合运用工作流
和Agent
,带大家实操了Dify 搭建图像生成专家。
前端使用还是很丝滑的,但后端调用时,因为流式输出,出现了各种问题。
篇幅有点长,下篇再来分享:如何采用聊天助手-工作流编排
,实现图像生成专家
的后端调用。
如果对你有帮助,欢迎点赞收藏备用。
为方便大家交流,新建了一个 AI 交流群
,欢迎感兴趣的小伙伴加入。
最近搭建的微信机器人小爱(AI)
也在群里,公众号后台「联系我」,拉你进群。