最近我一直在忙着开发基于 GPT-4o 和 Claude 3 的应用,不过自从接触了 Dify,我就忍不住觉得 “有它就够了啊”。
这次我就用 Dify 打造了一个 “当 LLM 自身知识不足时会通过 Google 搜索获取答案的聊天机器人”。
能通过 Google 搜索作答的聊天机器人
- 概述1.1 什么是 Dify
- 环境搭建
- 应用创建3.1 各模块的简单说明
- 实际运行测试
- 总结
1. 概述
1.1 什么是 Dify
Dify 是一个用于开发基于大型语言模型(LLM)的应用程序的开源平台。
我认为它有以下 4 个值得关注的特点:
- 可通过图形用户界面(GUI)轻松创建能执行复杂任务的 AI 智能体
- 可全面支持多种模型(ChatGPT、Bedrock、Llama 等)
- 可将创建的智能体作为 API 发布,并集成到现有应用程序中
- 内置 LLMOps(大语言模型运维)功能
本次将重点关注第 1 点和第 2 点。
2. 环境搭建
Dify 也提供 SaaS 服务,但本次我们将使用 Docker 容器在本地搭建服务器并运行。
由于官方提供了 docker-compose.yaml 文件,因此可轻松在本地启动服务。
- 从 Github 获取代码
bashgit clone https://github.com/langgenius/dify.git
- 酌情编辑 docker/docker-compose.yaml
文件建议添加name: dify
- 通过 Docker Compose 启动服务器
docker compose -f docker/docker-compose.yaml up -d
- 访问http://localhost
- 显示用户创建页面,在此创建用户即可
3. 应用创建
- 点击 “工作室”>“创建应用”>“从头创建”

2. 选择 “聊天机器人”>“Chatflow”,并输入应用名称

3. 通过连接模块来创建应用

3.1 各模块的简单说明
1. 问题分类器 “问题分类”
利用 LLM 将用户的问题分类到多个类别中。
根据分类结果切换后续处理流程,即可创建具备多种功能的智能体。
2. LLM “聊天”“问答(Q&A)”“历史摘要”“回答生成”
指定模型、系统提示词、用户输入等参数来调用 LLM。
每个模块都可单独指定模型,这一点非常好。
本次实践中,为了实现高速化和低成本,后台处理使用 GPT-3.5-Turbo;而在最终向用户返回答案的环节,则使用 GPT-4o 以确保输出质量。
3. 参数提取 “查询提取”
可从用户输入中提取后续模块所需的参数,功能类似 Function calling。
该模块提供 “从工具导入” 选项,因此基本无需自行设置参数,非常便捷。
4. GoogleSearch
顾名思义,该模块可通过 Google 进行搜索,并以 LLM 可读取的格式返回结果。
由于其内部使用 SerpApi,因此需要注册账号并设置 API 密钥。
5. 输出
指定作为聊天机器人回复返回给用户的字符串。
4. 实际运行测试
使用 “调试与预览” 功能,确认流程是否按预期分支、能否正常执行搜索。
下图中蓝色高亮的线条表示根据分支结果实际执行的流程。
测试 1:询问常识性问题
用户:葡萄酒发酵后会变成醋,是真的吗?
问答(Q&A):是的,在某种程度上是真的。葡萄酒长时间接触酶时,酵母或细菌会将酒精转化为醋酸,从而变成葡萄酒醋(醋)。这是由一种名为醋酸杆菌的细菌作用导致的。但通常葡萄酒的发酵是生成酒精的过程,因此在管理得当的环境下不会变成醋。

各模块执行时间
序号 | 模块 | 执行时间(秒) |
---|---|---|
1 | Start | 0.001 |
2 | 问题分类 | 1.317 |
3 | 问答(Q&A) | 1.693 |
4 | 输出 | 0.004 |
合计 | – | 3.076 |
测试 2:询问专业知识
用户:请介绍一下 Amazon Bedrock
GoogleSearch:content: What is Amazon Bedrock? … Using Amazon Bedrock, you can easily experiment with and evaluate top FMs for your use case, privately customize them with your data …link: https://aws.amazon.com/bedrock/content: With this new capability, AWS makes it easy for organizations to choose a combination of Amazon Bedrock models and their own custom models via …link: https://www.aboutamazon.com/news/aws/amazon-bedrock-new-innovations-generative-ai-applications<省略>
回答生成:Amazon Bedrock 是 AWS 提供的全托管服务,可让用户使用来自主流 AI 企业的基础模型(Foundation Models, FMs)。用户可根据自身使用场景,轻松对这些模型进行实验和评估,还能使用自己的数据私下定制模型。该服务可通过 API 访问,方便企业结合使用 Amazon Bedrock 模型和自定义模型。详情请查看此处。

各模块执行时间
序号 | 模块 | 执行时间(秒) |
---|---|---|
1 | Start | 0.001 |
2 | 问题分类 | 1.141 |
3 | 历史摘要 | 2.708 |
4 | 查询提取 | 0.818 |
5 | GoogleSearch | 1.050 |
6 | 回答生成 | 3.799 |
7 | 输出 | 0.002 |
合计 | – | 9.612 |
测试 3:进行非提问式聊天
用户:今天又去健身房了,好累啊
聊天:辛苦了!这可是努力过的证明呢。你今天做了什么训练呀?

各模块执行时间
序号 | 模块 | 执行时间(秒) |
---|---|---|
1 | Start | 0.001 |
2 | 问题分类 | 1.117 |
3 | 聊天 | 0.578 |
4 | 输出 | 0.001 |
合计 | – | 1.732 |
可以看到,系统能正常切换 “使用 LLM 知识的问答” 和 “使用 Google 搜索的 RAG(检索增强生成)” 流程。此外,由于我们已指示系统对非提问式输入进行轻松回应,因此能像后一个例子那样进行愉快的对话,而不是像前两个例子那样给出事务性的回答。
只需用鼠标连接模块,再用日语输入简单指令,就能打造出这样的 AI 智能体,实在太强大了。
另外,本次虽然只使用了 GPT-3.5-Turbo 和 GPT-4o,但也可以连接 Bedrock 使用 Claude 3。而且只需通过下拉菜单更改所选模型即可,操作非常简便,因此可以轻松根据任务指定合适的模型。
5. 总结
本次我们使用 Dify 打造了 “知识不足时通过 Google 搜索获取答案的聊天机器人”。
如前所述,使用 Dify 只需通过 GUI 就能轻松创建复杂的 AI 智能体,实在没有理由不用它。
此外,除了本次用到的功能外,Dify 还有自定义工具(Custom Tool)、API 发布等众多极具吸引力的功能。我希望能熟练运用所有功能,打造出最棒的 AI 智能体。