73、【Agent】【OpenCode】用户对话提示词(工作目录&工作区根目录)
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【Agent】【OpenCode】用户对话提示词(系统快照)
分析到了代理日志中除了 qwen.txt 定义的规则提示词之外,还有额外的部分(系统快照),其中系统快照的提示词在 opencode/src/session/system.ts 文件,这里定义了两个异步函数,用于向 AI Agent 提供运行环境信息 environment 和可用技能列表 skills,这两个函数通常用于在对话开始前,或执行特定任务时,向 AI 注入上下文,使其了解所处的系统环境和具备的能力,其中 environment 提供系统环境快照,负责收集并返回当前运行环境的关键信息,帮助 AI 了解当前正在哪个项目,什么系统上工作,其中这些系统信息会被包裹在 <env> 标签内,而目录结构(当前没被启用)会被包裹在 <directories> 标签里,然后解释了工作区根目录和工作目录的概念和区别,下面继续分析
OpenCode
接上篇 blog,继续分析工作区根目录,和工作目录
工作区根目录:作为安全围栏与项目锚点,属于项目的大本营,在 AI Agent 的语境下,该区域承担着安全隔离的职责,对 AI Agent 来说,有两点作用:
- 安全边界:很多 Agent 框架(比如 OpenClaw,Claude SDK 等)会将工作区根目录视为沙盒的边界,AI 被允许在这个目录里自由创建,修改文件,但一旦试图访问这个目录之外的文件(比如
/etc/passwd或C:\\Windows),就会比 Agent 系统拦截 - 上下文锚点:同时,该目录也是 AI 理解项目结构的基础,比如 AI 要分析整个项目的架构,就是以这个根目录为起点进行扫描的
工作目录:操作的基准点,这是 AI 执行具体命令时的立足点,同样有两点作用如下
- 相对路径解析:比如当读取 config.json 时,AI 会去当前的工作目录下查找
- 命令执行环境:当运行
npm install或git status时,这些命令就是在工作目录下生效的
举个实际的例子,假设项目结构是这样的
MyProject/ <-- 工作区根目录
├── src/
│ └── components/ <-- 当前工作目录 (假设 AI 刚 cd 到了这里)
│ └── App.tsx
└── package.json
工作区根目录是 MyProject/,AI 知道不能去修改 MyProject外面的文件,而工作目录是 MyProject/src/components/
- 如果 AI 执行
ls,看到的是 App.tsx - 如果 AI 想访问 package.json,则必须使用相对路径
../../package.json,因为在 components 里,需要往上找两层
所以总结下,工作区根目录决定了 AI 的权限范围(能管多宽,对应 VSCode 打开的文件夹),而工作目录决定了 AI 的操作基准点(对应终端当前所在目录)
再来看下 skills 的描述

这里的代码主要向 AI Agent 提供当前可以使用的技能列表,在对话开始前,或者需要完成某个特定任务时,AI Agent 会通过这个函数查看自己当前有哪些技能可以调用
首先是权限检查
if (PermissionNext.disabled(["skill"], agent.permission).has("skill")) return
这里会检查当前 OpenCode 的权限设置,如果系统配置中明确禁止了 skill 功能,那么就直接结束返回,不再提供任何技能列表,确保安全性,防止在不被允许的情况下暴露功能
接着获取可用技能
const list = await Skill.available(agent)
这里会查询系统中所有当前这个 Agent 有权使用的技能,这里调用了 Skill.available 方法,并传入当前 agent 信息,通过 await 异步操作,等待系统返回结果,然后将所有可用技能存入 list 变量中
OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Agent】【OpenCode】用户对话提示词(工具)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)