Skip to main content

功能说明

当内置工具无法满足业务需求时,可以把任意 Python 函数封装成自定义工具,扩展智能体的能力。本页介绍三种形式:普通入参函数、携带运行时上下文的函数,以及长时运行任务。
  • 普通入参函数是最基础的自定义工具:定义一个函数、写好类型注解与 Docstring,再注册到 Agent 即可。智能体会根据函数签名与 Docstring 决定何时调用、如何传参。
  • 携带运行时上下文的函数在工具函数中加入一个 tool_context: ToolContext 参数,就能访问智能体的运行时上下文——共享会话状态等运行时信息。框架会自动注入该参数,模型不会、也不需要为它传值。
  • 长时运行任务适用于耗时或异步的操作(大规模计算、数据分析、批处理等)。用 LongRunningFunctionTool 包装函数:工具先返回一个 pending 状态与任务 ID,应用在后台推进任务,再把最终结果回填给智能体。

前提条件

运行智能体示例前完成模型配置。普通函数本身可以直接在本地调用,不需要模型或服务凭证

使用方法

普通入参函数

1

定义函数

使用扁平、清晰的入参与返回类型。
2

编写 Docstring

描述函数功能、参数与返回值——模型据此理解工具用途。
3

注册到智能体

把函数放进 Agent 的 tools 列表。
下面用一个计算器演示。注意 divide 分支:除零时返回 status: "error" 且不带 result,与其他分支的 status: "success" 保持一致。
examples/tools/function_tools/simple_function_tool.py

携带运行时上下文的函数

examples/tools/function_tools/tool_context_usage.py
工具函数可以通过 tool_context.state 读取和更新共享会话状态,从而让后续工具调用和回调继续使用这些信息。

长时运行任务

下面的示例模拟任务提交与完成,不会下载数据或启动后台计算。工具返回 pending,运行循环捕获 long-running 调用,随后用 FunctionResponse 回填 finish 状态,让智能体给出最终回复。
examples/tools/function_tools/long_running_tool.py

同步、异步与长时任务

普通函数可使用 def 或 async def;异步函数适合等待网络或存储操作,但这不会自动把一次工具调用变成后台任务。LongRunningFunctionTool 标记的是需要后续结果的调用,实际任务提交、持久化、轮询与失败处理仍由应用负责 向智能体回填长时任务结果时,保留原 FunctionResponse 的调用 ID 与工具名,并使用相同的应用、用户与会话标识。不要用另一次请求创建的任务结果覆盖当前调用。普通函数也应返回明确的成功或失败字段,避免将错误消息当作有效业务数据
最后修改于 2026年9月19日