尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ChatDev 2.0 如何编写自定义 Function Tooling 函数供 Agent 节点调用?

ChatDev 2.0 如何编写自定义 Function Tooling 函数供 Agent 节点调用? ChatDev 2.0 如何编写自定义 Function Tooling 函数供 Agent 节点调用【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/GitHub_Trending/ch/ChatDev在 ChatDev 2.0 的工作流中Agent 节点通过tooling配置获得可调用的工具。如果你已经内置的函数如 functions/function_calling/ 下的天气、文件、代码执行工具不能满足任务就需要自己编写一个 Python 函数让它出现在 Agent 的工具列表里被模型调用。完整路径是在函数目录新建顶层函数 → 用类型注解和ParamMeta描述参数 → 在 Agent 节点的tooling配置中按函数名引用 → 用配置加载报错、前端下拉列表和模板导出命令验证结果。函数从哪里加载目录结构与命名规则ChatDev 的 Function Tooling 由三部分协作完成entity/configs/node/tooling.pyFunctionToolConfig负责解析 YAML 中的工具配置并做校验utils/function_catalog.py在启动时扫描函数目录、生成 JSON Schema向前端和 CLI 暴露utils/function_manager.py按文件动态导入函数运行时执行模型发起的调用。必须遵守的目录与命名约束来自 docs/user_guide/zh/modules/tooling/function.md函数目录默认为functions/function_calling/可通过环境变量MAC_FUNCTIONS_DIR覆盖为自定义目录函数必须位于模块顶层文件名以_开头、__init__.py以及__pycache__会被跳过以_开头的函数也不会被注册参数必须使用 Python 类型注解否则无法生成 Schema需要补充描述或枚举时使用typing.Annotated[..., ParamMeta(...)]以_开头的参数不会暴露给 Agent*_args、**kwargs会被过滤docstring 的首段会作为工具描述自动截断为 600 字符。前端/UI 的下拉列表按module_name:function_name展示每个函数其中module_name是函数文件相对functions/function_calling/的路径去掉.py子目录用/连接。每个模块顶部还有一个module_name:All选项表示批量引入该模块的全部函数。第一步编写一个带类型注解的顶层函数以新增一个天气查询函数为例。新建或编辑functions/function_calling/下的文件按下面的模式写顶层函数示例代码基于 docs/user_guide/zh/modules/tooling/function.md 中的官方示例city与返回字符串由你按业务替换from typing import Annotated from utils.function_catalog import ParamMeta def get_weather( city: Annotated[str, ParamMeta(description城市名称)], ) - str: 查询指定城市的实时温度。 # 在这里实现你的逻辑例如请求一个天气 API return f{city}: 20C各部分的作用city: Annotated[str, ParamMeta(description城市名称)]类型注解决定 Schema 中的类型ParamMeta的description写入该参数的描述ParamMeta还支持enum字段提供枚举值见 utils/function_catalog.py 中ParamMeta的定义查询指定城市的实时温度。docstring 首段成为工具描述是模型决定是否调用该工具的关键信息函数没有默认值的参数会进入 Schema 的required列表有默认值的会写入default。如果函数需要访问运行时环境附件存储、工作区目录等可以声明_context关键字参数。执行器会自动向声明了_context的函数注入上下文包含attachment_store附件存储实例、python_workspace_root当前 Session 的code_workspace/、graph_directorySession 根目录、human_prompt可调用request()触发人工反馈等键。仓库中的现成写法可以参考 functions/function_calling/file.py 里的FileToolContext和 functions/function_calling/user.py。以_开头的参数不会暴露给 Agent因此_context不会被模型填写只能由执行器注入。第二步在 Agent 节点的 tooling 配置中引用函数仓库示例 yaml_instance/demo_function_call.yaml 展示了真实的引用方式- id: A type: agent config: provider: openai base_url: ${BASE_URL} api_key: ${API_KEY} name: gpt-4o role: 你是一个天气查询助手负责调用工具获取指定城市的实时温度。 tooling: - type: function config: auto_load: true tools: - name: get_weatherFunctionToolConfig的字段见 docs/user_guide/zh/modules/tooling/function.md 与 entity/configs/node/tooling.pytools必填列表每个条目至少包含name即functions/function_calling/文件中的顶级函数名auto_fill默认true表示描述和参数 Schema 自动从函数签名解析设为false时可自行提供手写的description和parameters覆盖自动结果timeout单次工具执行的超时时间秒可选同一条tools里还可以写module_name:All批量引入整个模块的函数但此时不能同时填写description、parameters或auto_fill等覆盖字段需要自定义就展开为具体函数逐条配置。配置加载时会做严格校验tools不能为空每个条目必须有非空name函数必须能在函数目录中找到重复声明同一函数、或给module_name:All附带覆盖字段都会直接报ConfigError并指出具体位置tools[i].name。第三步验证函数被正确加载有三个由文档和代码明确给出的验证点建议按顺序检查配置期报错定位。如果前端/CLI 报告function xxx not found先检查函数名是否与functions/function_calling/内或MAC_FUNCTIONS_DIR指向目录的实际函数名完全一致、函数是否位于文件顶层。这是配置加载失败最常见的原因。前端/CLI 下拉列表。function_catalog在启动时扫描目录生成 Schema 并暴露给前端/CLI新函数应出现在module_name:function_name列表中列表项的描述即 docstring 首段。如果function_catalog加载失败FunctionToolEntryConfig.field_specs()会在字段描述中显示loading failed: 错误提示——此时要先修复函数的语法错误或依赖缺失而不是继续配置。刷新前端枚举模板。新增函数后运行仓库提供的导出命令刷新 DesignConfig 模板输出路径按你本地约定替换仓库内既有模板位于 yaml_template/design.yamlpython -m tools.export_design_template --output 输出路径.yaml该命令会从类型化 Schema 重新生成 YAML 模板可选--version固定模板版本、--mirror同时写入其他路径见 tools/export_design_template.py。运行时验证则依赖 Agent 实际执行模型按生成的 Schema 发起工具调用执行器从函数目录取出函数执行。工具运行超时时会向 Agent 返回异常文本处理方式文档给出两条调大timeout限额或在函数内部捕获异常并返回友好错误信息。函数依赖第三方库怎么办文档给出两条路径在仓库的requirements.txt/pyproject.toml中声明依赖随项目环境安装使用函数目录内现成的install_python_packages位于 functions/function_calling/uv_related.py在运行时安装。它实际执行的是uv add且工作目录是当前 Session 的 workspace从注入的python_workspace_root解析因此只影响该 Session 的工作区环境需要uv命令在 PATH 中可用。边界与限制只有模块顶层函数会被注册放进类里或以下划线开头的函数都不会出现_context是执行器专用通道模型看不到它函数内使用它做路径解析时如FileToolContext.resolve_under_workspace会把越出 workspace 的路径判为错误module_name:All只是输入辅助YAML 落盘时仍是真实函数名且禁止搭配覆盖字段函数名冲突、覆盖字段误用等错误都在配置加载阶段以ConfigError形式暴露并带路径定位运行前就能发现不需要等到工作流执行。完成以上步骤后新函数会经过“目录扫描 → Schema 生成 → 配置校验 → 运行时调用”这条链路进入 Agent 节点的工具列表出现找不到函数或加载失败的提示时按第三步的三个检查点逐项定位即可。【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/GitHub_Trending/ch/ChatDev创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表