74、【Agent】【OpenCode】用户对话提示词(工具)
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【Agent】【OpenCode】用户对话提示词(工作目录&工作区根目录)
继续分析了工作区根目录,和工作目录,工作区根目录作为安全围栏与项目锚点,属于项目的大本营,在 AI Agent 的语境下,该区域承担着安全隔离的职责,而工作目录则是操作的基准点,是 AI 执行具体命令时的立足点,工作区根目录决定了 AI 的权限范围(能管多宽,对应 VSCode 打开的文件夹),而工作目录决定了 AI 的操作基准点(对应终端当前所在目录),然后介绍了 skills 的描述,主要向 AI Agent 提供当前可以使用的技能列表,里面先进行权限检查(如果系统配置中明确禁止了 skill 功能,那么就直接结束返回,不再提供任何技能列表,确保安全性),接着获取可用技能存入 list 变量,下面继续分析
OpenCode
继续看 skills 最后剩下的内容

- 构建回复内容:将信息整理成一段 AI 容易理解的文本,告诉 AI 什么是技能,并且技能怎么用,通过
Skill.fmt方法将刚才获取的list格式化成人类和 AI 都容易读的字符串,这里传入了{ verbose: true }参数,意味着会生成一个详细版的描述(注释里也提到了,详细的技能描述如果注入到上下文中,可以帮助 AI 更好地理解和使用这些技能,同时也更费 tokens 了)
下面来看提示词中,工具的介绍

这是个用户交互类工具,其原始提示词路径在 opencode/packages/opencode/src/tool/question.txt

这个工具可以让 AI 在执行任务的过程中,遇到不确定的地方,或者需要用户做决定时,可以停下来询问用户,其核心作用在于中途暂停与交互,比如 AI 可能需要
- 收集需求:比如【你想用 React 还是 Vue?】
- 澄清模糊指令:比如【你说的修复,是指修复语法错误,还是逻辑错误?】
- 获取决策:比如【发现两个同名文件,你要覆盖哪一个?】
这段提示词特别强调了选项的设计逻辑,比如
- 自动包含自定义输入:OpenCode 客户端系统会自动在选项列表最后加一个【其他/手动输入】的选项,所以 AI 不需要,也不应该再添加类似这种【其他/以上都不是】的选项,否则就重复了
- 选项的格式(单选/多选):默认是单选,如果想让用户一次选好几个,比如【你想要删除哪些文件?】,则必须设置
multiple: true - 选项的格式(推荐项):如果想引导用户,可以把推荐的那个选项放在第一个,然后在标签后面加上
[Recommended],比如
使用 TypeScript (Recommended)
使用 JavaScript
举个例子,假设 AI 在帮用户写代码,但不知道他想用什么颜色的主题,就可以这样调用工具
工具:question
问题:你希望代码编辑器使用什么颜色主题
选项:
深色模式(Recommended)
浅色模式
高对比度模式
用户界面就会显示
[深色模式 (Recommended)]
[浅色模式]
[高对比度模式]
[输入其他答案…]
最后一个【输入其他答案】是系统自动生成的,AI 不用考虑,所以总结下,该工具就是一个带选项的询问弹窗,可以让 AI 在关键时刻停下来,让用户做选择题或填空题,确保做出来的东西符合用户需求
接下来看这个 question 工具的参数定义

该参数定义了 AI 想调用 question 工具时,必须发送给 OpenCode 客户端的数据结构,下面来详细看下
$schema:指定使用的 JSON Schema 版本,这里是 2020-12type:固定为object,表示参数是一个对象properties:属性对象,定义了对象里具体包含哪些字段,这里只有一个核心字段questions
OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Agent】【OpenCode】用户对话提示词(question 工具)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)