Dify 从入门到精通(第 10/100 篇):使用 Dify 工具集扩展功能
Dify 从入门到精通(第 10/100 篇):使用 Dify 工具集扩展功能
在 Dify 博客系列:从入门到精通(100 篇) 的前九篇文章中,我们系统地探索了 Dify 的核心概念与实践。
Dify 入门到精通系列文章目录
- 第一篇《Dify 究竟是什么?真能开启低代码 AI 应用开发的未来?》介绍了 Dify 的定位与优势
- 第二篇《Dify 的核心组件:从节点到 RAG 管道》深入剖析了 Dify 的功能模块
- 第三篇《Dify vs 其他 AI 平台:LangChain、Flowise、CrewAI》对比了 Dify 与其他平台的优劣
- 第四篇《快速上手 Dify 云端:5 分钟创建第一个应用》带您实践了云端部署的问答机器人
- 第五篇《Dify 本地部署入门:Docker Compose 指南》讲解了本地部署
- 第六篇《配置你的第一个 LLM:OpenAI、Claude 和 Ollama》介绍了 LLM 配置
- 更多文章:Dify 博客系列:从入门到精通(100 篇)
本文是系列的第十篇,聚焦 Dify 的工具集功能,深入讲解如何通过内置工具(如 Serper、JinaReader)和自定义工具扩展 Dify 应用的能力。我们将通过实践构建一个结合搜索和网页抓取的实时信息查询系统。本文侧重知识干货,确保您在 30-40 分钟内掌握工具集的配置与应用。本文适合初学者、开发者以及希望扩展 Dify 功能的从业者。完成本文后,您将为后续文章(如第 11 篇《Dify 从入门到精通(第 11/100 篇):优化 Prompt 工程:提升 LLM 性能》)做好准备。跟随 逻极,解锁 Dify 的工具集扩展之旅!
什么是 Dify 工具集?
Dify 的工具集(Tools)是扩展应用功能的关键组件,允许用户在 Chatflow 和 Workflow 中调用外部 API 或自定义代码,获取实时数据或执行特定任务。工具集分为内置工具和自定义工具:
- 内置工具:Dify 提供预配置工具,如 Serper(实时搜索)、JinaReader(网页抓取)、Yahoo Finance(金融数据)。
- 自定义工具:通过 Code 节点(Python/Node.js)或 API 集成实现特定功能。
- 核心优势:
- 实时数据:补充知识库,获取最新信息。
- 灵活性:支持多种场景,如搜索、数据分析、自动化任务。
- 无代码配置:内置工具通过可视化界面快速集成。
适用场景:
- 实时问答:结合 Serper 回答最新问题。
- 内容抓取:用 JinaReader 提取网页数据。
- 数据分析:通过 Yahoo Finance 获取市场数据。
- 自定义逻辑:用 Code 节点处理复杂任务。
注意:本文假设您已完成 Dify 云端(第四篇)或本地部署(第五篇),并配置了 LLM(第六篇)。若未完成,建议先参考前文。
前置准备
在开始之前,您需要:
- Dify 环境:
- 云端:登录 Dify 官网,确保有 API 调用额度。
- 本地:完成第五篇的 Docker Compose 部署,访问
http://localhost:3000
.
- LLM 配置:
- 已配置 OpenAI GPT-4o、Claude 3.5 或 Ollama Llama 3(参考第六篇)。
- 工具 API 密钥:
- Serper API 密钥(从 Serper 获取)。
- 可选:Yahoo Finance API 密钥(或其他数据源)。
- 数据源:
- 准备知识库(如“company_faq.pdf”)或网页 URL(如
https://company.com/news
)。
- 准备知识库(如“company_faq.pdf”)或网页 URL(如
- 工具:
- 浏览器:访问 Dify 仪表板。
- 可选:curl 或 Postman,测试 API 调用。
- 可选:代码编辑器(如 VS Code),编写自定义工具。
- 时间预估:30-40 分钟(含配置和测试)。
干货:Serper 提供免费试用额度(100 次搜索),适合测试;优先选择 GPT-4o 作为 LLM,快速响应且适合工具集场景;本地部署用户需确保网络支持外部 API(如 api.serper.dev
)。
步骤 1:配置内置工具
我们将配置 Serper(实时搜索)和 JinaReader(网页抓取),构建一个实时信息查询系统。
-
配置 Serper:
- 登录 Dify 仪表板,点击“Tools” > “Add Tool” > “Serper”.
- 输入 Serper API 密钥(从 Serper 获取)。
- 配置:
Name: Serper Search API Key: <your_serper_key>
- 点击“Test Connection”,确认返回搜索结果。
- 点击“Save”。
-
配置 JinaReader:
- 点击“Tools” > “Add Tool” > “JinaReader”.
- 配置:
Name: JinaReader Base URL: https://r.jina.ai/
- 无需 API 密钥,JinaReader 免费使用(有限制)。
- 点击“Test Connection”,输入 URL(如
https://company.com/news
),确认返回网页内容。 - 点击“Save”。
干货:
- Serper 配置:确保 API 密钥有效,测试查询(如“AI trends 2025”)检查结果质量。
- JinaReader 限制:免费版支持简单网页,复杂动态网页(如需登录)可能需付费版。
- 工具测试:在“Tools”面板手动输入查询,验证输出格式(JSON 或文本)。
步骤 2:创建 Workflow 应用
我们将构建一个 Workflow,结合 Serper 和 JinaReader,回答用户关于行业的最新问题(如“AI in healthcare trends”)。
-
创建应用:
- 点击“Create Application” > “Workflow”.
- 命名应用(如“Real-Time Query Bot”)。
- 选择“Blank Workflow”。
-
配置工作流:
- Start 节点:
- 定义输入:
query: string (e.g., "AI in healthcare trends")
- 输出变量:
query
.
- 定义输入:
- Tools 节点(Serper):
- 选择“Serper Search”.
- 配置:
Query: {{start.query}} Max Results: 5
- 输出变量:
search_results
(类型:数组)。
- Tools 节点(JinaReader):
- 选择“JinaReader”.
- 配置:
URL: {{search_results[0].url}} (提取搜索结果的第一个 URL)
- 输出变量:
web_content
(类型:字符串)。
- LLM 节点:
- 选择模型:GPT-4o.
- 配置 Prompt:
Based on the search results {{search_results}} and webpage content {{web_content}}, answer {{start.query}} in a concise tone, under 100 words. Provide key trends and insights.
- 参数:
Temperature: 0.5 Max Tokens: 100
- 输出变量:
answer_text
(类型:字符串)。
- Answer 节点:
{{llm.answer_text}}
- Start 节点:
干货:
- 节点连接:确保
search_results[0].url
有效,添加 If/Else 节点检查 URL 可用性。 - Prompt 优化:明确“key trends” 和“under 100 words”控制输出质量。
- 工具顺序:Serper 先于 JinaReader,确保网页抓取基于搜索结果。
步骤 3:测试与调试
-
预览测试:
- 点击“Preview”,输入:
query: AI in healthcare trends
- 预期输出:
AI in healthcare trends include improved diagnostics (95% accuracy in imaging), predictive analytics reducing costs by 20%, and chatbots adopted by 30% of clinics, per recent studies.
- 点击“Preview”,输入:
-
调试常见问题:
- 搜索结果不相关:
- 优化
query
(如“AI healthcare trends 2025”)。 - 检查 Serper API 配额。
- 优化
- 网页抓取失败:
- 验证
search_results[0].url
是否可访问。 - 测试 JinaReader 独立抓取(如
https://company.com/news
)。
- 验证
- LLM 输出冗长:
- 调整 Max Tokens(100)或 Prompt 字数限制。
- 使用“Workflow Process”面板:
- 检查
search_results
是否包含有效数据。 - 验证
web_content
是否提取完整网页文本。
- 检查
- 搜索结果不相关:
-
API 测试:
- 获取 API 端点(“API Access”面板):
Endpoint: http://localhost:5001/v1/workflows/run (本地) 或 https://api.dify.ai/v1/workflows/run (云端) Authorization: Bearer <your_api_key>
- 测试:
curl -X POST http://localhost:5001/v1/workflows/run \ -H "Authorization: Bearer <your_api_key>" \ -H "Content-Type: application/json" \ -d '{"inputs": {"query": "AI in healthcare trends"}, "app_id": "real-time-query-bot"}'
- 获取 API 端点(“API Access”面板):
干货:
- 调试技巧:启用“Workflow Process”查看工具输出(Dify v1.5.0 功能),快速定位问题。
- API 优化:使用
response_format=json
确保结构化输出。 - 日志监控:检查 Dify 日志(云端:仪表板“Logs”;本地:
docker logs dify-api
)。
步骤 4:配置自定义工具
我们将通过 Code 节点创建一个自定义工具,提取搜索结果中的关键词。
-
创建 Code 节点:
- 在 Workflow 中添加“Code”节点,放置在 Serper 节点之后。
- 选择语言:Python.
- 输入代码:
from collections import Counter import redef main(search_results):text = " ".join([result["snippet"] for result in search_results])words = re.findall(r'\w+', text.lower())keywords = Counter(words).most_common(5)return [{"keyword": k, "count": c} for k, c in keywords]
- 输入变量:
search_results
(从 Serper 节点)。 - 输出变量:
keywords
(类型:数组)。
-
更新 LLM 节点:
- 修改 Prompt:
Based on {{search_results}}, {{web_content}}, and keywords {{keywords}}, answer {{start.query}} in a concise tone, under 100 words. Highlight top keywords.
- 示例输出:
AI in healthcare trends include diagnostics (95% accuracy), predictive analytics (20% cost reduction), and chatbots (30% clinic adoption). Top keywords: AI, diagnostics, analytics.
- 修改 Prompt:
干货:
- 代码调试:在 Code 节点面板测试输入(如
[{"snippet": "AI diagnostics..."}]
),验证输出。 - 性能优化:限制关键词数量(如 5 个)减少 LLM 输入长度。
- 可复用性:保存 Code 节点为自定义工具,复用至其他 Workflow。
步骤 5:发布与集成
-
发布 WebApp:
- 点击“Publish”,生成 WebApp 链接:
- 云端:
https://cloud.dify.ai/apps/real-time-query-bot
- 本地:
http://localhost:3000/apps/real-time-query-bot
- 云端:
- 测试 WebApp 界面,输入查询,确认回答准确。
- 点击“Publish”,生成 WebApp 链接:
-
嵌入网站:
- 使用 iframe 嵌入:
<iframe src="http://localhost:3000/apps/real-time-query-bot" width="100%" height="600px"></iframe>
- 调整 CSS 匹配品牌风格。
- 使用 iframe 嵌入:
-
API 集成:
- 集成到分析系统,示例请求:
curl -X POST https://api.dify.ai/v1/workflows/run \ -H "Authorization: Bearer <your_api_key>" \ -H "Content-Type: application/json" \ -d '{"inputs": {"query": "AI in healthcare trends"}, "app_id": "real-time-query-bot", "response_format": "json"}'
- 集成到分析系统,示例请求:
干货:
- WebApp 定制:使用 Dify WebApp SDK 调整 UI(如按钮颜色)。
- API 安全:设置 IP 白名单,定期轮换密钥。
- 批量查询:修改 Start 节点接受数组(如
queries: ["AI in healthcare", "AI in finance"]
)。
进阶技巧
-
工具组合:
- 添加 Yahoo Finance 工具:
- 配置:
Query: {{start.query}} + "stock market"
- Prompt:
Combine {{search_results}}, {{web_content}}, and {{yahoo_finance_data}} to answer {{start.query}}.
- 配置:
- 添加 Yahoo Finance 工具:
-
动态工具选择:
- 添加 If/Else 节点:
If {{start.query}} contains "stock", use Yahoo Finance; else use Serper.
- 添加 If/Else 节点:
-
自定义工具扩展:
- 创建 API 工具:
Name: Custom API Endpoint: https://api.example.com/data Method: GET Headers: {"Authorization": "Bearer <your_key>"}
- 输出变量:
custom_data
.
- 创建 API 工具:
-
批量处理:
- 使用 Iteration 节点循环处理多个查询:
Input: {{start.queries}} Max Iterations: 5
- 使用 Iteration 节点循环处理多个查询:
干货:定期检查工具 API 配额(如 Serper 每日限制),保存常用工具配置为模板,复用至其他项目。
常见问题与排查
-
Q:Serper 返回无关结果?
- A:优化查询(如“AI healthcare trends 2025”),检查 API 密钥有效性。
-
Q:JinaReader 抓取失败?
- A:验证 URL 可访问,尝试静态网页,或使用付费版 JinaReader。
-
Q:Code 节点报错?
- A:检查输入格式(
search_results
为数组),测试代码逻辑。
- A:检查输入格式(
-
Q:API 调用超时?
- A:检查网络连接,验证
app_id
和密钥。
- A:检查网络连接,验证
干货:使用“Tools”面板测试工具输出,记录 API 调用日志(Dify 仪表板“Logs”)分析性能。
实践案例:实时信息查询系统
背景:一家咨询公司需实时查询行业趋势(如 AI 在医疗领域),结合搜索和网页数据生成回答。
- 环境:Dify 云端,GPT-4o,Serper,JinaReader.
- 配置:
- Workflow:Blank Workflow.
- Start 节点:
query: AI in healthcare trends
- Tools 节点:Serper(
{{start.query}}
),JinaReader({{search_results[0].url}}
)。 - Code 节点:提取关键词(Python)。
- LLM Prompt:
Answer {{start.query}} using {{search_results}}, {{web_content}}, {{keywords}}. Concise, under 100 words.
- 测试:
- 输入:
AI in healthcare trends
- 输出:
AI diagnostics achieve 95% accuracy in imaging, predictive analytics cut costs by 20%, and chatbots are adopted by 30% of clinics. Top keywords: AI, diagnostics, analytics.
- 输入:
- 发布:API 集成到 BI 系统。
成果:30 分钟完成配置,提供实时精准回答,节省 80% 人工研究时间。
结论
通过本文,您掌握了 Dify 工具集的配置与应用,学会了使用 Serper、JinaReader 和自定义工具扩展功能。从内置工具配置到 Workflow 设计,再到测试和优化,我们提供了详细步骤和实用技巧。工具集的灵活性使 Dify 能应对实时数据和复杂任务需求。本文的实践为后续高级功能开发奠定了基础。
在 Dify 博客系列:从入门到精通(100 篇) 的下一篇文章——第 11 篇《Dify 从入门到精通(第 11/100 篇):优化 Prompt 工程:提升 LLM 性能》中,我们将深入探讨 Prompt 工程技巧,提升 Dify 应用的回答质量。继续跟随 逻极,解锁 Dify 从入门到精通的完整学习路径!