DeepSeek Harness 工具:defineTool

DeepSeek Harness 工具:defineTool
工具是 Agent 用来干活的函数模型看到工具定义后决定调用。本章节我们将用 defineTool 写出第一个工具 greet并让模型真的调用它。工具是什么工具tool是一个描述清晰的函数包含名称、说明、参数和输出格式。模型在生成回复时可以根据这些信息发起调用。在 dsh 里工具通过 ctx.tools.register 注册到工具注册表。defineTool 的完整结构defineTool 是定义工具的 DSL它接收一个对象描述工具的全部信息。字段作用说明name工具名模型用它发起调用description工具说明告诉模型这个工具做什么parameters入参 schema类型化定义defineTool 据此推导并校验 argsoutput.schema返回值 schema声明 execute 返回的规范值类型output.render结果格式化把规范值转成面向模型的内容execute工具实现真正执行逻辑返回规范值创建 greet 工具把 scratch-plugin/src/my-plugin.ts 替换为以下内容。实例// 文件路径scratch-plugin/src/my-plugin.tsimport type { Context } from deepseek-ai/cordisimport { defineTool } from deepseek-ai/dsh-toolsexport const name greet-tool// 需要 tools 服务注册工具的前提export const inject [tools]export function apply(ctx: Context) {// 注册一个名为 greet 的工具ctx.tools.register(defineTool({// 工具名模型会以这个名字发起调用name: greet,// 工具说明告诉模型什么时候用description: Greet someone by name.,// 入参 schemadefineTool 会推导并校验 argsparameters: {name: { type: string, required: true, description: The name to greet },},// 输出定义output: {// 规范值类型execute 的返回值schema: { type: string },// render把规范值转成面向模型的内容render: (_args, value) [{ type: text, text: value }],},// 工具实现真正执行逻辑async execute(args) {// 返回规范值这里是一个字符串return Hello, ${args.name}!},}))}inject 让 Cordis 等待工具注册表就绪。defineTool 根据 parameters 推导并校验 args。execute 返回 output.schema 声明的规范值。output.render 再把规范值转换为面向模型的内容。运行并调用如果开发命令没在运行重新启动pnpm dsh web --patch ./scratch-plugin/cordis.yml打开 http://127.0.0.1:3080输入Use the greet tool to greet RUNOOB.模型可以调用 greet并收到 Hello, RUNOOB! 这一工具结果。关键点schema 自动流入提示词工具的 name、description、parameters、output 会自动组装进模型提示词。模型知道有这样一个工具就会在合适的时候调用。你不需要手写函数签名给模型schema 就是模型看到的接口。规范值canonical value是 execute 返回、output.schema 声明的值。它与面向模型的内容解耦同一个规范值可以通过不同 render 变成不同格式。提示想查看更复杂的工具写法嵌套 schema、后台工作、策略钩子见官方工具编写参考。小结与自测defineTool 用 schema 描述工具ctx.tools.register 注册它模型看到 schema 后直接调用。1. defineTool 的 execute 返回的是什么2. output.render 的作用是什么3. 模型是怎么知道要调用 greet 的

最新新闻

日新闻

周新闻

月新闻