从prompt engineering, context engineering, 再到Harness Engineering(基础理解)

6 阅读2分钟

从prompt engineering, context engineering到harness engineering, 我们对大模型的管理经历了一个从“大模型有没有听懂”,到“大模型有没有拿到足够且正确的信息”,再到现在的“大模型能不能持续在真实世界完成任务”的阶段。

大模型本质上是一个对上下文敏感的概率生成系统,prompt engineering塑造了一个局部概率空间,使得模型的回答能够更倾向于用户规定的“角色设定、风格约束、分布引导、拒答边界、输出格式,few-shot示例”等等,这在“一次回答”的聊天机器人领域能够起到很好的约束作用,“把话说明白”就能激发模型自身的潜力。

而在一个具体的Agent工作场景中,除了prompt之外,模型还需要知道当前环境“有什么”,比如,你让agent根据你的历史文档,模拟你的写作风格,写一份周报总结,agent必须要拿到你的真实历史文档,context就是当前模型真实“拿到了哪些信息”,换句话说,context是所有能影响当前模型决策的信息总和,包括输入给它的当前prompt,用户文件内容,数据库信息,历史对话memory,浏览器搜索结果,上一个agent的输出等等,如何管理这些context,让模型得到真实有用的结构化信息,并正确传递给下一个模型,就是context enginnering. RAG就是context enginnering到一部分,补充了模型能够拿到的信息。

context的长度是有限的,并且过于长的context会让模型注意力分散,反而会影响输出效果。上下文优化不是“给的更多”,而是“按需给,分层给,在正确时机给”(skill)

当我们写好提示词,做好上下文管理后,一个完整合理的执行链路决定了agent是否能完成任务,以及完成任务的优秀程度。prompt engineering和context engineering都是在完善模型的输入侧,prompt优化意图表达,context优化信息供给,而在执行侧,我们需要管理连续执行中的不确定性,需要持续的监督、约束和纠偏,harness enginnering由此诞生。

harness包含了prompt和context,专注于让agent在真实世界里稳定工作,合理的harness设计往往比模型本身的能力更重要(一个实用例子是,在claude code cli里配置其他国产模型免费API,用一个不差的模型搭配claude的harness设计,效果往往也很好)

参考资料

学习资料