这道题其实是在问,当你面对一个大模型时,怎么用提示词让它稳定、高效地完成你想要的输出。本质上,这是人和模型之间的沟通问题。我会从几个层次来讲:先是基础技巧,再是推理增强,然后是[[Agent]]模式,最后聊聊怎么选型和落地风险。
先说基础技巧。最简单的就是 [[Zero-shot]],直接给指令,比如“把这段翻译成英文”。它适合特别明确、不需要额外示例的任务,比如格式转换、简单分类。但一旦任务复杂一点,效果就不稳定了。所以更常用的是 [[Few-shot]],给两三个例子,模型就能模仿你的格式和思路,输出质量会明显提升,特别是小模型。不过代价是示例设计很耗精力,而且会占上下文长度。还有个常用的技巧是角色设定和约束,比如“你是一位资深客服,说话要礼貌但坚定”,或者“必须用JSON格式输出”。这对输出风格有要求的场景很管用,比如客服话术、营销文案。
接下来是推理增强。这里最核心的是 [[Chain-of-Thought]],也就是让模型一步一步想。比如做数学题,你加一句“Let's think step by step”,它就能把中间步骤写出来,结果准确率大幅提升。但这里有个坑:简单任务上,CoT反而会过度思考,增加延迟和成本,说白了就是杀鸡用牛刀。所以我会区分场景,简单分类用Zero-shot,逻辑推理才上CoT。再进一步是 [[Tree-of-Thoughts]],它让模型同时生成多个候选思路,然后评估选最优。适合创意写作、策略规划这类需要探索的问题。但代价很大,需要多次采样,推理成本高,所以我只在效果要求极高、预算又充裕的场景用。
然后是Agent模式。这块重点是 [[ReAct]],也就是Reasoning + Acting。模型先思考要做什么,然后调用工具,观察结果,再继续思考,循环直到完成。比如在客服场景,用户问“我的订单怎么还没到”,模型可以思考“需要查物流状态”,然后调用查询API,拿到结果再回复。这里的关键是工具调用要可靠,所以 [[Function Calling]] 是工程基础,你要定义好工具schema,让模型生成可解析的参数。落地时有个常见失败场景:模型调用工具后,返回结果格式不对或者超时,链就断了。所以我会特别关注异常处理,比如加一个超时重试,或者让模型在失败时换一种方式思考。
最后聊选型。简单任务比如分类、摘要,用Zero-shot加清晰指令就够了。复杂推理比如数据分析、决策,用CoT或ToT,但要权衡效果和成本。如果涉及工具集成,比如搜索、推荐,那ReAct加Function Calling是标配。规模化部署时,如果提示长度经常超过1k tokens,或者规则特别多,我会考虑转向[[SFT]]或者 [[RLHF]],因为提示工程的稳定性天花板很明显。
其实还有一个方向我最近在关注,就是 [[Self-Consistency]] 和多路径集成。CoT虽然好,但单次推理可能随机走偏,如果用多次采样再加投票,能显著提升可靠性,当然代价是推理成本翻倍。这块我觉得在金融、医疗等高容错场景很有价值,但怎么平衡成本和效果,还得看具体业务。
所以整体上,我更倾向把提示工程看成快速验证和轻量迭代的工具,它零训练成本,适合快速试错。但真要上线高并发、高稳定的系统,我会优先考虑SFT或者Agent框架,把提示词固化到模型里,减少运行时的不确定性。