图_5工具层模块
对应 [[5_代码实现_工具层]]。把知识检索与高德天气包装为外层 Agent 可选择的工具。
知识工具
runtime.create_agent_for_request(ctx) 调用工厂得到与本次请求绑定的知识工具。工具内部先领取一次执行名额,再调用 [[图_4RAG工作流模块]],把 Trace 和恢复快照存入 ctx;文本返回值交给模型,结构化状态由 Service 从 ctx 读取。
天气工具
get_current_weather_tool() 是装饰后的工具;get_current_weather() 是普通 HTTP 函数。tools/__init__.py 导出时将工具包装器重命名为 get_current_weather,因此 runtime 导入的名称与 weather.py 内普通函数同名,但指向装饰后的工具。
两个工具由模型选择;天气分支不经过 RAG,知识分支也不直接生成最终回答。
图形约定
绿色是目录,蓝色是文件,紫色是类,橙色是函数;标题中的名称与职责之间保留 12 个空格。类框中的编号通常对应其方法;函数框的编号描述内部步骤。没有组合,矩形宽高可分别调整。
导航
[[项目实现|查看项目实现总图]] · [[图_1数据存储模块|数据存储模块]]
Excalidraw Data
Text Elements
05 工具层模块 · 实现结构 ^d8286d81
目录 → 文件 → 类 / 函数;框内编号表示局部职责,箭头表示主要调用。 ^690e60ba
backend/ 承载本模块的后端代码 ^5f032d0c
tools/ 为 Agent 暴露业务工具 ^a6267291
[[5_代码实现_工具层#2.1 knowledge.py|knowledge.py]] 将请求 ctx 绑定到知识检索工具 ^b65feccd
make_search_knowledge_base(ctx) 为每个请求生成工具
- 闭包持有当前请求的 ChatRequestContext
- 返回内部 @tool("search_knowledge_base") 函数 ^6a931792
search_knowledge_base(query) 运行证据工作流并格式化返回
- ctx.acquire_knowledge_tool_slot():每轮最多执行一次知识工具
- 延迟导入并调用 run_rag_graph(query, ctx)
- ctx.store_rag_trace():暂存 Trace 和可选恢复快照
- 返回 NEEDS_CLARIFICATION / NEEDS_SCOPE_SELECTION / NO_KNOWLEDGE
- 有证据则返回带编号、来源、页码的 Retrieved Chunks ^906f4064
返回闭包工具 ^1c9ea75c
工具只返回证据或控制信息,回答仍交给 Agent。 这是一轮知识工具的硬预算;不是对天气工具的通用次数限制。 ^731e0493
[[5_代码实现_工具层#2.2 weather.py|weather.py]] 提供实时天气与预报 ^a4c6c7f6
get_current_weather_tool() 对外的 @tool 包装
- 转发 location / extensions 参数到普通 Python 函数 ^f81c291e
get_current_weather() 请求高德天气 HTTP API
- 校验 AMAP_API_KEY、城市和 extensions
- base 返回实时天气;all 返回预报
- 处理请求超时、HTTP 错误和业务失败 ^28245586
这是独立工具分支,不经过 Milvus 或 RAG Pipeline。 ^a4a56ba1
init.py 整理包级导出名称
- 导出 make_search_knowledge_base
- 将装饰后的 get_current_weather_tool 导出为 get_current_weather ^85dbd233
Agent 装配入口见 [[图_6Agent状态管理模块]] 的 runtime.create_agent_for_request()。 ^4ceb0237
Element Links
b65feccd: [[5_代码实现_工具层#2.1 knowledge.py]]
a4c6c7f6: [[5_代码实现_工具层#2.2 weather.py]]
4ceb0237: [[图_6Agent状态管理模块]]
%%
Drawing
1 | N4IgLgngDgpiBcIYA8DGBDANgSwCYCd0B3EAGhADcZ8BnbAewDsEAmcm+gV31TkQAswYKDXgB6MSgw4CxAHSp6AWzJJMMJTEZgaCANqg8CELgAcLUwDYzARlWRYxsCjCrkCACwBWchFY+QIjwwfgQAZgBOAP4YbABzQU8vOQiABnSMzIzLcnRGOPUEVPYwfHoAaxgAYXpMenxjAGIbFjDUjwB2VQAjdFRyuLLORlwauobEUryaKHR8LVdyADNsTE |
%%