76、【Agent】【OpenCode】用户对话提示词(addtionalProperties 属性)
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【Agent】【OpenCode】用户对话提示词(question 工具)
继续分析了 question 工具的 parameters 参数,其中 properties 字段下面有个 required 参数,这个参数是个 array 类型,里面只有一个字段 questions 属性,这里强调属性中的 questions 字段是必须提供的,然后开始分析核心属性 questions,这里是 AI 真正需要填写的部分,另外,该属性是个 array 数组类型,意味着 AI 可以一次性向用户提出多个问题,接着开始分析具体的问题项 items 信息,其中 required 规定了每个问题必须包含三个必填字段:question(完整问题),header(短标签),options(选项列表),接着重点分析了 additionalProperties 关键词,该字段决定了数据对象中,除了 OpenCode 明确列出的字段之外,是否还允许出现 OpenCode 未定义的额外字段,下面继续分析
OpenCode
上篇 blog 分析了 addtionalProperties 关键词,下面再补充分析下

可以看到,在 OpenCode 的工具定义中,都设置了 addtionalProperties: false,这是为了防止 AI 幻觉或乱填参数,确保 OpenCode 前端界面只接收它能理解的参数(比如这里的 label 和 description),防止 AI 传一些前端不支持的参数(比如 onClick,customClass 等其他乱七八糟的参数)导致程序崩溃,强迫 AI 传给工具的数据是纯净,且完全符合预期的
当然,这个 addtionalProperties 关键字是 JSON Schema 标准中的内容,专门用于控制对象中未在 properties 里明确定义的属性是否合法,官方链接 JSON Schema Docs: additionalProperties

此外,additionalProperties 的值除了布尔值(true/false),还可以是一个子 Schema,用来定义额外属性必须符合的格式

OK,下面看 question 工具中几个比较关键的属性

这里定义了作为单个问题的完整数据结构,下面详细看下
question(完整问题):这是展示给用户的主要文本,一般是完整的问句,会详细描述 AI 想要问的内容,比如【您希望使用哪种数据库?】header(短标题):一个非常简短的标签,提示用,在界面紧凑的地方,比如侧边栏,步骤条等显示,让用户能快速了解这个问题是什么,比如【数据库选择】,最多 30 个字符options(选项列表):用户可以选择的答案列表,数组类型,里面可以包含多个对象,每个对象代表一个选项label:选项上显示的简短文字description:对该选项的详细结束multiple(是否多选,可选项):控制用户能不能选多个答案,布尔值,默认单选
OK,接下来看下一个工具 bash

bash 工具的描述路径在 opencode/packages/opencode/src/tool/bash.txt

OpenCode 这里定义的 bash 工具和在终端里直接输入 bash 命令本质上是一回事,但这里的 bash 工具在安全性和便利性上做了很多包装,可以理解为一个带着安全校验和导航功能的 Bash,下面来简单分析下 bash 工具和终端 Bash 的区别
| 维度 | 终端 Bash 命令 | bash 工具 |
|---|---|---|
| 执行方式 | 用户输入什么,终端就执行什么 | 先检查,后执行,比如 bash 工具会先检查目录是否存在,路径是否有空格等 |
| 工作目录 | 需要手动 cd 切换工作目录 |
自动定位,默认在 ${directory} 运行,或者可以指定目录,不需要手动输入 cd 命令 |
| 安全性 | 如意误操作,比如误删文件 | 有防护,被明确禁止用于文件读写(其他专用工具的活儿),只负责运行命令,比如 git,npm |
| 路径处理 | 容易忘记给带空格的路径加引号 | 强制规范,提示词强制要求给带空格的路径加双引号,防止报错 |
| 持久性 | 每次新开窗口都是新的环境 | 持久会话,在一个 persistent shell session 中运行,意味着上一次命令设置的环境变量,在下一次打开该会话时还能用 |
OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)