一文讲透Prompt、Context、Harness 工程

文章目录

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

做Agent只改Prompt?

前两天有个做Agent的朋友找我诉苦,说他写的Prompt改了N遍,角色设定从"资深架构师"换到"温柔体贴的代码仙子",又加了一句"你要认真思考",再加了一句"输出前请自我检查"。结果模型有时候灵,有时候不灵,跟抽盲盒似的。

我问他:你除了改Prompt,还干了啥?

他愣了一下:还能干啥?

我说兄弟,你这相当于买了一辆法拉利,发现跑得不够快,于是疯狂换喇叭。从双音喇叭换成气喇叭,再换成火车汽笛,最后甚至装了个防空警报。喇叭是越来越响了,但车还是那辆车,发动机该多少转还是多少转。

他听完沉默了,然后问我:那发动机在哪?

我说:发动机有三台,而且你一台都没装。

第一层:Prompt Engineering------让模型听懂人话

Prompt当然重要,这没毛病。它就像你给实习生布置任务,得说清楚你是谁、你要干啥、按什么步骤干、哪些事不能干、最后交什么东西。

但很多人写Prompt跟写情书似的,越写越长,越写越肉麻。"请你以资深全栈工程师的身份,用严谨但又不失幽默的语气,认真分析这个项目,并在输出前进行自我审查,确保内容准确无误......"

模型看完估计内心OS:哥,你到底要我干啥?分析项目?改代码?写文档?还是给你讲个段子?

这就好比你跟外卖小哥说:"请你以金牌骑手的姿态,用稳健但又不失风度的驾驶方式,认真地把这份外卖送到我手里,并在送达前进行自我检查,确保餐品完好无损......"

小哥听完只会回你一句:地址发一下,谢谢。

Prompt Engineering解决的是"单次调用的表达质量"。它让模型听懂任务,但听懂不等于能做好。就像你听懂了一道数学题,不代表你能解出来------你可能连公式都忘了。

第二层:Context Engineering------别让模型当算命先生

很多人嘴上说RAG,脑子里想的还是把资料往模型嘴里塞。塞得越多,模型越聪明?错。塞得越多,模型越像在吃自助餐------什么都夹一点,最后撑得消化不良。

Context Engineering不是塞资料,是喂情报。你想想,一个人要做判断,最怕的不是信息少,而是拿到一堆过期、重复、互相打架的信息。模型也一样。

上下文太少,模型就开始编。你问它公司最新接口文档,它不知道,就开始一本正经地胡说八道,跟村口算命大爷似的,说得头头是道,全是编的。

上下文太多,模型就抓不住重点。你给扔进去整个代码仓库,它看完估计只记得文件名叫啥,具体逻辑全懵了。这就好比你让一个人读完整本《辞海》再回答"今天吃啥",他脑子里只剩"饕餮、珍馐、脍炙人口"这些词,根本想不起来楼下有沙县小吃。

上下文顺序乱了更惨。你把重要信息放在最后,模型看完前面的噪声,早把重点忘了。这就跟你看电视剧一样,前三十集全是注水,最后一集才揭秘凶手,你早就睡着了。

真正的高手怎么做?先检索,再筛选,再压缩,再排序,把刚好需要的信息放到模型面前。就像你给狙击手配观察员,不是把整条街的人都指给他看,而是只告诉他:"三点钟方向,穿红衣服的,干掉。"

举个例子,你让Agent修bug。它需要的不是整个Git仓库,而是相关报错、相关文件、调用链、最近改动、测试结果,以及那些人类知道但模型不知道的潜规则。

比如这个接口虽然看起来没人用,但其实被一个老系统凌晨三点的定时任务调用。这种信息你不给模型,它怎么可能知道?它只会觉得:"这接口没人用啊,删了算了。"然后第二天凌晨三点,你的老板就会收到一条来自老系统的问候------它崩溃了。

Context Engineering解决的是"信息质量问题"。Prompt让模型听懂任务,Context让模型少猜。少猜的意思就是:别当算命先生,当个有情报的特工。

第三层:Harness Engineering------给模型系上安全带

就算Prompt写好了,Context也喂准了,模型还是会犯错。它会工具调用失败,会拿到错误结果,会成本超预算,会权限越界,会把不该删的东西删了,还会任务做到一半发现信息不够,但它不好意思说,继续硬编。

这就好比你请了个清华毕业的实习生,智商高得吓人,但没有任何规章制度约束他。他可能会把公司机密发到朋友圈,可能会把生产环境数据库删了,还可能会把老板的微信拉黑------因为他觉得老板话太多。

Harness Engineering就是给这个高智商实习生系上安全带、装上监控、配个导师、定个KPI。它包括Agent Loop、工具调用、权限控制、日志追踪、错误恢复、Guardrails、自动化测试、评估系统、版本管理、成本控制、部署发布、监控告警。

听起来很重对吧?但真实业务就是这么重。你以为做AI应用是写个Prompt然后模型自动帮你赚钱?醒醒,那是科幻电影。真实世界是:模型调用了删除接口,你得问它"你确定要删吗?";模型改了代码,你得跑测试;测试失败了,你得让它自己修;修了三次还修不好,你得熔断,别让它把代码库改得面目全非;这次效果变差了,你得知道是Prompt的锅、Context的锅,还是模型版本变了。

一个典型的Agent Loop就三件事:收集上下文、采取行动、校验结果。结果不对,把反馈塞回去让它修正。达到停止条件,就停。需要人判断,就把人叫进来。

听起来很朴素,但这里面全是工程细节。比如工具调用失败了,要不要重试?重试几次?如果模型要调用删除类工具,要不要二次确认?如果输出是JSON,怎么验证schema?如果连续三次都修不好,要不要熔断?如果这次效果变差了,怎么知道是Prompt的锅、Context的锅,还是模型版本变了?

这些问题都不性感,但它们决定一个Agent是玩具,还是系统。没有Harness,模型像一个聪明但不可控的实习生。有了Harness,它才慢慢变成一个能进流程、能留痕、能复盘、能迭代的工作单元。

为什么你的Agent总在翻车?

很多AI应用死掉,不是死在模型智商不够,而是死在工程层没搭起来。这就好比你去相亲,对方长得帅、学历高、谈吐好,但你没问他有没有工作、有没有负债、有没有家暴倾向------三层信息你只看了最里面一层,不翻车才怪。

同一个Prompt,有时候效果很好,有时候效果很差,为什么?因为模型面对的上下文不一样。就像你让同一个人做同一道菜,今天食材新鲜,做出来是米其林;明天食材过期,做出来是喷射战士。

同一个知识库,换个检索策略,回答质量差别巨大,为什么?因为模型看到的信息顺序和密度不一样。这就好比你给同一个人讲同一个故事,先说结局再说过程,和先说过程再说结局,听众的感受完全不同。

很多Agent Demo看起来很炸,一上线就崩,为什么?因为Demo场景里的上下文是干净的,真实业务里的上下文是脏的。Demo里你问"今天天气怎么样",模型回答"晴,25度"。上线后用户问"今天天气怎么样,顺便帮我订个机票,再查一下我上个月报销单批了没,还有我前女友的微信你帮我删一下"------模型当场宕机。

真实世界不是一份整理好的Markdown。真实世界是一堆数据库字段、历史文档、聊天记录、网页、权限、报错日志和人类口头约定揉在一起的毛线球。Context Engineering就是把这个毛线球理到模型能处理的程度。Harness Engineering就是确保模型在处理这个毛线球的时候,不会把自己缠进去。

Prompt是咒语,Context是情报,Harness是作战系统

很多人做Agent只盯着Prompt,因为Prompt最像魔法。你改一句话,模型立刻变了。这种反馈太爽了,跟打游戏开挂似的。

Context和Harness就没那么爽,它们更像脏活累活,要处理文档、接口、日志、权限、评估、异常。但偏偏这些脏活累活,才是AI应用真正能不能落地的地方。

Prompt是咒语------你念对了,模型就听你的。

Context是情报------你给准了,模型就知道该打谁。

Harness是作战系统------你搭好了,模型才能活着回来。

只有咒语,没有情报和作战系统,最多打一个漂亮的演示。就像你只会喊"阿瓦达索命",但不知道敌人在哪,也没有魔杖,最后只能对着空气比划。

有了三层,才有机会把Agent放进真实世界里,让它面对真实世界那坨混乱的信息、权限、失败和反馈。它才会从一个会聊天的窗口,变成一个有输入、有动作、有验证、有反馈的系统。

怎么搭?一层一层来,别想着一步登天

当然,我不是说大家一上来就要搞一套巨复杂的平台。尤其是很多个人项目、小团队项目,一开始连需求都还没跑明白,直接上全套观测、评估、权限系统,到头来很可能做成一个没人用的漂亮架子。

很多时候我们不是缺架构,我们是缺一个能真实跑起来的闭环。所以更实用的做法,是按三层一点点补。

先把Prompt讲清楚:这次任务是什么,边界是什么,输出是什么,失败了怎么说。别写情书,写指令。模型不需要你的温柔,它需要你的清晰。

然后把Context喂准:信息从哪里来,怎么筛,怎么去重,怎么压缩,怎么排序,哪些事实必须放在前面。记住,喂情报,不是喂饲料。

再把Harness接起来:动作怎么执行,权限怎么控,结果怎么验,错误怎么恢复,日志怎么留,评估怎么跑。给模型系上安全带,别让它在真实世界里裸奔。

你会发现,很多问题并不需要更强的模型。只要把这三层补齐,系统就会立刻稳很多。

举个特别简单的例子。你让Agent帮你处理一批客户反馈。

只写Prompt,它可能会给你总结得挺漂亮,但分类准确率随缘,跟抛硬币差不多。

加上Context,它能知道每个客户的历史订单、最近工单、产品版本、之前沟通过什么。分类准确率从抛硬币升级到掷骰子------至少有个范围了。

再加上Harness,它就可以把高置信度问题自动分类,把低置信度问题交给人工,把每次分类结果记录下来,定期评估准确率,发现某类问题总分错就回头改检索和Prompt。

到这一步,它才开始像一个应用。不是一个会聊天的窗口,是一个有输入、有动作、有验证、有反馈的系统。

写在最后

未来做AI产品的人,能力结构会越来越像半个产品经理、半个工程师、半个流程设计师。要会写Prompt,但不能迷信Prompt。要懂上下文,但不能只会堆资料。要做Harness,但不能为了工程而工程。

说到底,就是把模型当成一个强但不稳定的认知引擎,然后在它外面搭一套让它稳定工作的系统。

真正的AI工程能力,不是写好一句Prompt。而是把Prompt、Context、Harness三层一起设计好。

Prompt决定任务。

Context决定知识。

Harness决定可靠性。

这三个同心圆转起来,Agent才不只是看起来聪明。它才会开始变得真的有用。

所以下次你的Agent又翻车了,别急着改Prompt。先问问自己:情报喂了吗?安全带系了吗?

如果都没有,那你就是在给法拉利换喇叭------喇叭再响,也跑不过隔壁骑电动车的。

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。