工具

July 5, 2026 · View on GitHub

语言:English · 中文

工具系列是 Agently 让模型调函数、MCP 服务、沙箱的兼容入口。新代码优先 action 入口 —— 见 Action Runtime。工具系列仍可用,干净映射到新 runtime,本页给已有它在代码里的用户。

入口对照

旧(兼容)新(推荐)做什么
@agent.tool_func@agent.action_func标记函数并推 schema
agent.use_tool(my_func)agent.use_actions(my_func)注册一个
agent.use_tools([a, b])agent.use_actions([a, b])注册多个
agent.use_mcp(url)agent.use_mcp(url)不变 —— MCP 挂载
agent.use_sandbox(...)agent.use_sandbox(...)不变 —— 沙箱挂载
extra.tool_logsextra.action_logsloop 产生的调用记录
Agently.toolAgently.action全局注册帮手

两边都路由进同一个 action runtime。旧名不是独立 ToolManager 插件实现 —— 是别名。

最小例子

from agently import Agently

agent = Agently.create_agent()


@agent.tool_func
def add(a: int, b: int) -> int:
    """两个整数相加。"""
    return a + b


agent.use_tool(add)

result = agent.input("3333 + 6666 等于多少?").start()
print(result)

模型把 add 看作可调用工具并决定是否调用。

auto-func —— 模型驱动的实现

@agent.auto_func 装饰器把函数签名 + docstring 变成由模型驱动并使用 agent tool / action 的实现:

@agent.auto_func
def calculate(formula: str) -> int:
    """计算 {formula}。必须用 ACTION 确保答案正确。"""
    ...


print(calculate("3333+6666=?"))

被装饰函数无函数体(...)。调用时 agent 用注册的 tool 跑模型并返回结果。

何时用哪个入口

新项目:用 action 入口(见 Action Runtime)。新功能、插件类型、架构改进都在 action 一侧。

留在 tool 入口当:

  • 维护已有用旧名的代码。
  • 依赖库或旧样例仍使用旧名。

工具系列不会消失 —— 但新功能优先在 action 那侧落地。

内置 actions 与 legacy tools

几个常用能力作为内置 action package 发布:

  • Search —— web 搜索包装
  • Browse —— 页面抓取与可读正文提取
  • Cmd —— 低层受限 shell 执行

新代码使用 action-native import path:

from agently.builtins.actions import Browse, Search

agent.use_actions(Search(timeout=15, backend="auto"))
agent.use_actions(Browse())

Search(...) 注册 searchsearch_newssearch_wikipediasearch_arxivBrowse(...) 注册 browse。实现放在 agently.builtins.actionsagently.builtins.tools 只保留为旧代码的薄 legacy import facade;它可以补旧的 tool_info_list 元数据,但不应该拥有内置能力实现。agent.use_tools(...)agent.tool_funcAgently.tool 也仍是受支持的兼容入口。新的内置能力不要再以 tool_info_list / BuiltInTool 作为 authoring API。

默认 Browse() 会依次尝试 Jina Reader、Playwright、BS4、restricted curl。Jina Reader 会把目标 public URL 交给 https://r.jina.ai/,并消费其 URL-to-Markdown 输出;当默认 Reader endpoint 出现传输或服务错误时,Browse 会先尝试官方替代 endpoint https://r.jinaai.cn/,再进入本地 backend 降级。如果应用不能接受这个外部 Reader 服务边界,可以显式关闭: Browse(enable_jina_reader=False, fallback_order=("playwright", "bs4", "curl"))

Search 由 ddgs package 支撑。默认保留 backend="auto",也可以传入具体 ddgs backend,例如 yahoobraveduckduckgogooglestartpagemojeekwikipediayandex。某个 backend 返回 HTTP 200 不代表已经解析到 可用搜索结果;当 backend 没有可用结果时,Search 会继续尝试配置或默认的 ddgs fallback backends。真实无结果会以成功 action result 返回 [],不会让 action loop 因为“没有结果”而失败。

如果前面的 backend 失败,但后续 fallback backend 返回了可用结果,Action result 会使用 status="partial_success",同时保持 success=True 并携带 backend diagnostics。这表示“有可用证据但存在外部搜索源降级”,不应被 ActionFlow 当作 action.failed 终止条件。

Search 和 Browse 都在 package 对象上显式配置 proxy=timeout=。两者默认也会对 瞬时传输错误重试一次(max_attempts=2retry_backoff_seconds=0.25),覆盖 incomplete chunked read、timeout、connection reset、proxy 握手失败这类短暂网络抖动; 它不能替代长期不可用的网络或无法连通的代理。 Browse 默认 backend 顺序是 Jina Reader -> Playwright -> BS4 -> restricted curl。 curl backend 只接收 Browse 规范化后的 URL candidate,不会作为 shell action 暴露给模型。 Jina Reader backend 只接收目标 URL 和 Reader 专用 headers;它是第三方页面读取 backend, 不是 Search 替代。Browse 会自动跳过传输错误、HTTP 5xx、空内容、明确 block/captcha/error 页,但不会判断模糊页面文本在语义上是否足够完成任务。

当 Agent 通过 agent.language("zh-CN") 设置语言策略后,注册后的 Search/Browse package 会在未显式配置时接收兼容的 locale 默认值。Search 会在 Search package 内部派生 provider-specific 默认 region;Browse 会把策略作为 Accept-Language header。这个 策略用于查询、来源召回和过程文本引导,不替代任务自己的来源要求。

Browse.browse(url) 直接调用仍保持返回文本的兼容行为,但注册后的 browse Action 使用结构化结果。如果所有 Browse backend 都失败,Action result 会是 status="error" 并带 backend diagnostics,而不是把 "Can not browse ..." 文本当作 成功证据。

注册后的 Browse Action 也负责基础 URL 恢复和远程文件交接。裸域名以及同 host 的 http / https candidate 会先尝试,再判断整体不可达;结构化结果会包含 selected URL、retry candidates、canonical links、same-site links、attempts,以及 必要的 security downgrade diagnostic。Browse 收到 PDF、Office 文件、图片或其他 download-like binary response,且当前 execution 绑定了 Workspace 时,会把 bytes 物化到 downloads/,并返回 file refs 与有界 read_file preview。Browse 本身不解析 文档;后续读取由 Workspace file IO handlers 负责。没有绑定 Workspace 时,远程文件 Browse 会 fail closed,不会把 raw bytes 放进模型 hot path。

shell 能力优先使用 agent.enable_shell(...),它挂载托管 run_bash action。 Cmd 仍作为低层兼容 package 与 Bash 执行实现 helper 保留。shell 用于测试、构建、 git inspection 和只读诊断;文件读取、检索、编辑和写入使用 read_filegrep_filesedit_fileapply_patch 等 Workspace file actions。

当前 action-native 示例见 examples/builtin_actions/。历史 built-in tool 示例已移到 examples/archived/builtin_tools/,并在 README 中指向当前替代案例。

另见

  • Action Runtime —— 推荐入口,含完整架构
  • MCP —— agent.use_mcp(...) 详细
  • Coding Agents —— 使用内置 search/browse 和自定义 action 的项目如何给 coding agent 提供指引