Skip to content

示例插件:greet-tool

本页是教程第 3 章的配套可运行示例,位于仓库 examples/greet-tool/

文件说明

文件作用
src/index.ts插件源码:定义 Config、注册 greet 工具
cordis.yml插入 Web UI 的 patch 覆盖层
package.json示例包清单(示例插件,非发布包)
README.md运行说明

运行

deepseek-harness 仓库 检出根目录执行:

sh
pnpm dsh web --patch /absolute/path/to/examples/greet-tool/cordis.yml

打开 http://127.0.0.1:3080,发送:

Use the greet tool to greet Ada.

模型会调用 greet,收到 Hello, Ada!(或你在配置里改过的问候语)。

尝试修改配置

cordis.ymlconfig 改为:

yaml
config:
  greeting: 'Howdy'
  uppercase: true

保存后插件会热替换(HMR),无需重启。再调用一次,结果变为 HOWDY, ADA!

源码速览

ts
import type { Context } from '@deepseek-ai/cordis'
import Schema from '@deepseek-ai/schemastery'
import { defineTool } from '@deepseek-ai/dsh-tools'

export const name = 'greet-tool'
export const inject = ['tools']

export interface Config {
  greeting: string
  uppercase: boolean
}

export const Config: Schema<Config> = Schema.object({
  greeting: Schema.string().default('Hello'),
  uppercase: Schema.boolean().default(false),
})

export function apply(ctx: Context, config: Config) {
  ctx.tools.register(defineTool({
    name: 'greet',
    description: 'Greet someone by name.',
    parameters: {
      name: { type: 'string', required: true, description: 'The name to greet' },
    },
    output: {
      schema: { type: 'string' },
      render: (_args, value) => [{ type: 'text', text: value }],
    },
    async execute(args) {
      let message = `${config.greeting}, ${args.name}!`
      if (config.uppercase) message = message.toUpperCase()
      return message
    },
  }))
}