跳转到内容

第 9 课:上下文与行为控制

学习通过 AGENTS.md、skills、prompt templates、context files 和 DefaultResourceLoader 控制 Pi agent 的行为边界。

上下文不是越多越好。对 coding agent 来说,上下文系统的价值是把项目规范、交付标准、可用技能、提示模板和临时约束按来源组织起来,并在每次 session 创建时装配成模型能遵守的行为边界。

为什么同一个模型在不同仓库里应该表现出不同的工程习惯?

  • 项目规则提供本仓库的协作约束。
  • skills 提供可复用工作流。
  • prompt templates 提供可参数化任务入口。
  • ResourceLoader 把这些来源合并成一份资源快照。

下面不是完整源码,而是把本课主线压缩成可以在文档里直接阅读的关键形状。读者即使不打开本地源码,也应该能看出运行时如何组织职责。

async function buildSystemPrompt(task: Task) {
const resources = await resourceLoader.reload();
return composePrompt({
baseInstructions,
projectRules: resources.contextFiles,
skills: resources.selectedSkills(task),
template: resources.promptTemplate(task.kind),
});
}
  • 省略版源码说明上下文不是简单字符串拼接,而是多个来源按规则合成。
  • reload() 的价值是让规则变化、skills 变化和 extension 发现能进入下一次 session。
  • diagnostics 很重要:上下文加载失败应该可见,而不是静默影响模型表现。

为一个团队仓库设计三类上下文:必须遵守的规则、可选技能、任务模板。

  • 能解释项目规则、skills 和 prompt templates 的区别。
  • 能说明 ResourceLoader 为什么是 runtime 边界。
  • 能设计上下文加载失败时的用户提示。
  1. 实践题:基于本课的省略版源码,补出一个最小实现草图,要求写清输入、输出、副作用和错误处理。
  2. 思考题:本课机制如果只靠 prompt 约束,而不放进 harness 或 runtime,会出现什么工程风险?