type
Post
status
Published
date
Mar 28, 2026
slug
deepagents-004
summary
基于DeepAgents深度搜索项目(2)
tags
Agent
category
DeepAgents
icon
password
四、功能开发&测试
4.3 Subagents实现
4.3.1 网络搜索助手(network_search_agent)
4.3.1.1 完善信息
- Agent描述:
- 工具涵盖:
internet_search: 根据问题进行网络查询,当需要获取外部互联网的公开信息、最新新闻或特定主题数据时使用此工具。- *提示词思路 **:
- 强制多维视角:Prompt 中明确要求 "至少检索3个角度",防止模型只搜一次就草草了事,强迫其进行发散性思维。
- 防止死循环:设置 "最多进行5次检索" 的硬性约束,防止模型在找不到答案时无限重试,消耗 Token。
- 广度优先:强调检索 "非内部的公开信息",明确了其边界,不与数据库和 RAG 助手冲突。
- 提示词参考:
- 执行策略:Agent 接收任务 -> 思考拆解搜索关键词 -> 调用搜索工具 -> 观察结果 -> 决定是否需要补充搜索 -> 汇总信息。
4.3.1.2 tavily搜索工具
步骤1:定义tavily访问api_key
文件:
.env直接打开官网:**https://app.tavily.com/ ** 免费版:每月 1000 次请求,完全够用学习 / 开发
步骤2:tavily_tools定义&实现
位置:
tools/tavily_tools.py4.3.1.3 定义network_search_agent
文件:
agent/sub_agents/network_search_agent.py4.3.2 数据库查询助手(database_query_agent)
4.3.2.1 完善信息
- 核心职责:负责查询企业内部结构化数据(如商品库存、销售记录),解决"具体是多少"的精度问题。
- 技术栈:
Text-to-SQL(LLM 生成 SQL) +MySQL Connector。
- Agent描述:
- 工具描述:
list_sql_tables: 列出配置的 MySQL 数据库中所有可用的表,这是了解数据库结构的第一步。get_table_data: 读取指定 MySQL 表的前 100 行数据,用于快速预览数据内容。execute_sql_query: 执行自定义 SQL 查询,当需要复杂的筛选、联接或聚合时使用此工具。
- 提示词思路:
- *防幻觉机制 **:Prompt 强制规定了 "Step 1: list_tables" 的动作。LLM 只有知道了真实的表名,生成的 SQL 才是可执行的,避免了臆造表名的常见幻觉。
- *数据理解 **:要求 "Step 2: get_table_data" 预览数据。这让 LLM 理解字段的具体格式(如日期是 '2026-01' 还是 '2026/01'),保证
WHERE条件的准确性。 - 只读权限:Prompt 强调 "检索信息",隐含了不进行 UPDATE/DELETE 操作的安全边界。
- 提示词参考:
- 执行策略 (三步走):查表结构 -> 预览数据 -> 执行查询。
- 流程图:
4.3.2.2 数据库搜索工具
步骤1:准备数据库数据
脚本位置:
项目/sql/company_data.sql步骤2:准备数据库配置
文件:
.env步骤3:mysql_tools定义&实现
4.3.2.3 定义database_query_agent
文件:
agent/sub_agents/database_query_agent.py4.3.3 RAGFlow助手(knowledge_base_agent)
4.3.3.1 完善信息
- 核心职责:负责检索企业私有非结构化文档(如规章制度、技术文档),解决"内部怎么规定"的深度问题。
- 技术栈:
RAGFlow API+Vector Database。
- Agent描述:
- 工具描述 (Tool Description):
get_assistant_list: 获取 RAGFlow 中的所有聊天助手信息,并返回组合后的字符串。如果需要知道有哪些助手可用,请使用此工具。create_ask_delete: 创建一个新会话,提问一次,然后删除该会话,并返回答案。当需要向特定的 RAGFlow 助手提问时,使用此工具。
- 提示词思路 (Prompt Strategy):
- 动态发现:Prompt 要求先
get_assistant_list。因为知识库可能会动态增加(如新增了 "2025年考勤规定"),Agent 需要先"看"一眼现在的知识库列表,才能精准定位。 - 饱和式检索:要求 "至少提问三个不同的问题"。这是为了克服 RAG 检索的片段性,通过多角度提问提高召回率(Recall),确保不遗漏关键条款。
- 保留原始语义:Prompt 强调 "不需要进行概括性总结",要求 "传输原始信息"。这是为了避免 "传话筒效应" 导致的信息失真,把总结权交给 Main Agent。
- 提示词参考:
- 执行策略:发现知识库 -> 选定目标 -> 多角度提问 -> 获取切片。
- 流程图:
负责检索企业私有非结构化文档(如规章制度、技术文档),解决"内部怎么规定"的深度问题。
4.3.3.2 RAGFlow基本使用
外部教案(资料里)
4.3.3.3 RAGFlow工具定制
步骤1:定义ragflow访问api_key
文件:
.env步骤2:ragflow_tools定义&实现
文件:
tools/ragflow_tools.py4.3.3.4 定义knowledge_base_agent
文件:
agent/sub_agents/knowledge_base_agent.py4.4 MainAgent实现
4.4.1 定义工具
主智能体工具:
- generate_markdown —— 生成标准 Markdown 文档
- convert_md_to_pdf —— 将 Markdown 转为 PDF 文件
- read_file_content —— 读取上传文件,并解析内容
4.4.1.1 读取上传文件tool
文件:
tools/upload_file_read_tool.py4.4.1.2 生成md文件tool
文件:
tools/markdown_tools.py依赖:pip install markdown pywin32
4.4.1.3 将md转成pdf文件tool
文件:
tools/pdf_tools.py4.4.2 定义mainAgent
文件:
agent/main_agent.py4.4.3 辅助函数
函数1:_prepare_session_environment(thread_id: str)
函数2:_process_stream_chunk(chunk)
4.4.4 执行函数
4.4.5 MainAgent提示词
MainAgent提示词核心注意事项:
- 角色定位:沃华医药智能团队负责人,仅协调网络搜索、数据库查询、RAGFlow 三位助手完成任务
- 信息获取规则
- 外部 / 背景知识→网络搜索助手,可多次深入检索;
- 企业内部非流通知识→RAGFlow 助手;
- 企业内部商品数据→数据库查询助手;
- 信息边界不明确时,三种助手全部调用,需获取完整信息后再推进后续步骤。
- 工作目录强制要求
- 所有操作(文件创建 / 读取 / 保存)仅限系统指定绝对工作目录;
- 调用子助手时,必须明确传达该工作目录路径。
- 任务处理分两类
- 无文件生成要求:获取信息后直接反馈用户;
- 有文件生成要求:仅转交文件生成助手,自身不参与文件制作。
- 文件生成严格规则
- 仅可生成 Markdown、PDF,PDF 需先生成 Markdown 再通过 convert_md_to_pdf 转换,不生成用户要求外的格式;
- 必须先完成所有信息获取,再调用文件生成工具,严禁一步同时做搜索 + 生成,禁止用占位符生成文件;
- 无论任务复杂度,文档内必须包含 todo-list 规划;
- 文档内容丰富全面,字数不少于 1000 字;
- 汇报进度 / 结果时,仅告知 “已成功创建”,不发送文件路径。
- 核心执行顺序(不可违反)
① 优先调用子助手获取完整信息;② 确认拿到全部信息文本后,再调用文件生成工具;③ 生成文件严格遵循用户格式要求,按步骤执行。
具体提示词如下:
4.4.6 测试函数
五、Web接口开发和测试
- server基础准备
文件:
api/server.py- 开启任务接口实现
- 上传文件接口
- 下载文件接口
- 查询所有文件列表接口
- WebSocket 实时通讯
- 启动服务器
📎 参考文章
- 一些引用
- 引用文章
欢迎您在底部评论区留言,一起交流~
Loading...
