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.py

      4.3.1.3 定义network_search_agent

      文件:agent/sub_agents/network_search_agent.py

      4.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.py

          4.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.py

              4.3.3.4 定义knowledge_base_agent

              文件:agent/sub_agents/knowledge_base_agent.py

              4.4 MainAgent实现

              4.4.1 定义工具

              主智能体工具:
              1. generate_markdown —— 生成标准 Markdown 文档
              1. convert_md_to_pdf —— 将 Markdown 转为 PDF 文件
              1. read_file_content —— 读取上传文件,并解析内容

              4.4.1.1 读取上传文件tool

              文件:tools/upload_file_read_tool.py

              4.4.1.2 生成md文件tool

              文件:tools/markdown_tools.py
              依赖:pip install markdown pywin32

              4.4.1.3 将md转成pdf文件tool

              文件:tools/pdf_tools.py

              4.4.2 定义mainAgent

              文件:agent/main_agent.py

              4.4.3 辅助函数

              函数1:_prepare_session_environment(thread_id: str)
              函数2:_process_stream_chunk(chunk)

              4.4.4 执行函数

              4.4.5 MainAgent提示词

              MainAgent提示词核心注意事项:
              1. 角色定位:沃华医药智能团队负责人,仅协调网络搜索、数据库查询、RAGFlow 三位助手完成任务
              1. 信息获取规则
                  • 外部 / 背景知识→网络搜索助手,可多次深入检索;
                  • 企业内部非流通知识→RAGFlow 助手;
                  • 企业内部商品数据→数据库查询助手;
                  • 信息边界不明确时,三种助手全部调用,需获取完整信息后再推进后续步骤。
              1. 工作目录强制要求
                  • 所有操作(文件创建 / 读取 / 保存)仅限系统指定绝对工作目录;
                  • 调用子助手时,必须明确传达该工作目录路径。
              1. 任务处理分两类
                  • 无文件生成要求:获取信息后直接反馈用户;
                  • 有文件生成要求:仅转交文件生成助手,自身不参与文件制作。
              1. 文件生成严格规则
                  • 仅可生成 Markdown、PDF,PDF 需先生成 Markdown 再通过 convert_md_to_pdf 转换,不生成用户要求外的格式;
                  • 必须先完成所有信息获取,再调用文件生成工具,严禁一步同时做搜索 + 生成,禁止用占位符生成文件;
                  • 无论任务复杂度,文档内必须包含 todo-list 规划;
                  • 文档内容丰富全面,字数不少于 1000 字;
                  • 汇报进度 / 结果时,仅告知 “已成功创建”,不发送文件路径。
              1. 核心执行顺序(不可违反)
                1. ① 优先调用子助手获取完整信息;② 确认拿到全部信息文本后,再调用文件生成工具;③ 生成文件严格遵循用户格式要求,按步骤执行。
              具体提示词如下:

              4.4.6 测试函数

              五、Web接口开发和测试

              1. server基础准备
                1. 文件: api/server.py
              1. 开启任务接口实现
                1. 上传文件接口
                  1. 下载文件接口
                    1. 查询所有文件列表接口
                      1. WebSocket 实时通讯
                        1. 启动服务器

                           
                           
                           

                          📎 参考文章

                          • 一些引用
                          • 引用文章
                           
                          💡
                          欢迎您在底部评论区留言,一起交流~
                          上一篇
                          第一节 大脑:重新认识你自己
                          下一篇
                          Harness Engineering - 搭建Mini Harness
                          Loading...