这道题如果只看表面,好像是在问Prompt的优化方法有哪些,但我觉得面试官真正想听的是:你面对一个真实任务,怎么判断该用哪种思路,以及为什么。所以我会从选型的角度来讲,而不是罗列方法。
先说分类。我一般把Prompt优化分成三类:一类是结构化,一类是示例驱动,还有一类是推理增强。结构化和示例驱动,说白了就是给模型画框框,让它别跑偏;推理增强是帮模型把思路理清楚。
先说结构化,这是最基础也最见效的。比如角色设定,你给模型一个身份,像“你是一位资深算法工程师”,它输出的内容风格和知识倾向就会变。还有输出格式约束,比如用JSON模板,这样下游解析就特别稳定。适用场景很明确:只要输出需要被程序解析,或者任务边界清晰,结构化几乎必加。但它的局限也明显,模型可能死板地套格式,内容本身质量不一定高。
再一个就是示例驱动,也就是[[Few-shot]]。给几个输入输出例子,模型就能学会模式。这里有个坑:示例的分布很关键,如果只给常见case,边缘case就容易翻车。所以生产环境里,我倾向用动态示例检索,从示例库里用[[Embedding]]召回最相似的几个,比固定示例准得多。但代价是多了检索这一步,延迟会高。
接下来说推理增强,这是处理复杂任务的核心。[[Chain-of-Thought]]是最经典的,让模型一步步推理,数学题、逻辑题特别好使。但它的随机性也比较大,所以后来有[[Self-Consistency]],跑多条推理路径再投票,稳定性提升不少。再复杂一点的任务,比如要探索多种决策路径的,可以用[[Tree-of-Thoughts]],维护多个推理分支,剪枝扩展,像24点游戏这种就很合适。
这里我想特别强调一下选型:简单分类任务,比如客服的意图识别,Few-shot加格式约束就够了,没必要上推理。但数学推理,不加CoT基本没法用。多步决策,比如自动写SQL,ToT可能比CoT更适合,因为中间步骤错了可以回溯。
那自动化优化呢,像DSPy和APE,它们是把Prompt优化本身变成一个可编程的流程。DSPy把指令和示例当成可调参数,自动搜索最优组合。这个方向很前沿,但我认为它目前更适合做基线探索,真要上线,还得人工把关。为什么?因为自动搜索出来的Prompt可能在测试集上表现好,但泛化性不一定,甚至可能过拟合。
说到自动化,我其实更关注DSPy里的一个细节:它用编译的方式做优化,但编译过程中,搜索空间怎么定义很关键。如果搜索空间设得太大,可能跑很久都找不到好结果;设得太小,又可能错过最优。这个问题在实际落地时怎么平衡,我觉得挺有意思。
最后总结一下我的判断:我会把结构化看成必选项,不管什么任务都带上;示例驱动和推理增强是选配,根据任务复杂度和对推理的要求来加。落地的时候,我特别关注两个风险:一是示例分布偏差,二是推理路径的随机性。所以上线前,我一定会用一批覆盖边缘case的测试集做回归,确保召回和准确率都达标。