这篇文章是23年10月微软和Carnegie Mellon大学一起发表的一个Prompt调优的工作。
文中注意到,专家在处理一个问题的时候,是会在问题本身之外引入很多domain知识的(如下图所示),而当前的一些常规的prompt调优的手段,比如CoT或是迭代优化等方法,都是只专注于prompt本身,通过一些prompt表述方式的优化来试图优化LLM的回答质量。
因此,文中提出了一个Prompt Agent的方法,尝试通过反馈迭代的机制,不断地让模型自己在prompt当中引入domain内的专业知识补充,从而获得更好的prompt,让LLM生成更好的回答。
下面,我们就来看看这个Prompt Agent方法的具体实现和实验结果。
首先,文中给出了prompt优化的具体问题定义,但是这个其实比较直接,就是给定LLM以及对应的任务,然后优化prompt,然后令LLM能够在对应的task下生成最好的回答。
用数学语言表示就是:
p ∗ = a r g m a x p ∈ S ∑ i R ( p B ( a i ∣ q i , p ) ) p^{*} = \mathop{argmax}\limits_{p \in S} \sum\limits_{i} R(p_{B}(a_i|q_i, p)) p∗=p∈Sargmaxi∑R(pB(ai∣qi,p))
其中, a , q a, q a,q表示回答和对应的问题,然后 p p p表示prompt, R R R表示回答的质量, S S S为对应的prompt空间。
下面,我们首先给出文中给出的的Prompt Agent的整体框架示意图如下:
可以看到:
具体的左侧Monte-Carlo树的伪代码实现如下:
我们给出文中一个具体的输出prompt样例如下:
不过,比较惭愧的是,这里只是整理了一下文中的整体思路和伪代码实现,但是对于Prompt Agent算法的实现细节,比如具体专业知识的导入方式,迭代的实现细节以及最终的迭代停止条件其实我们都没有完全的理解,所以这里就不班门弄斧随便乱说了。好在作者将他们的算法开源了,后面可能去结合一下他们的代码实现细节来理解一下他们的具体实现方法,当然更多的可能性估计还是到时候偷懒直接拿代码来用了,如果后面真的要用的话……
Anyway,言归正传,我们还是回来看一下文中Prompt Agent的具体实验以及对应的实验结果好了。
首先,文中主要是在以下一些任务上进行的基础实验:
其次,关于baseline的选择的话,文中使用的主要是以下这些:
最后,使用的模型的话,文中主要使用的是GPT3.5进行生成,然后使用GPT4进行prompt的优化。
下面,我们给出文中整理的实验结果如下:
可以看到:
然后,文中还对Prompt Agent的一些细节点进行了一下额外的考察。
首先,文中考察了一下Prompt Agent方法在不同的LLM上的泛化性,得到结果如下:
可以看到:
其次,文中还考察了一下Prompt Agent实现当中使用不同的prompt检索策略对结果的影响,得到结果如下:
可以看到:
然后,文中还考察了一下Prompt Agent算法的收敛性与收敛速度,得到结果如下:
可以看到:
最后,文中还通过一些具体的case来对prompt agent进行了一下定性分析。
可以看到:
综上,文中主要是提出了一个prompt agent的方法,其核心的功能是借由文中提出的prompt agent的方法,通过给prompt自动增加domain knowledge的方式来完善prompt,进而获得更好的LLM生成效果。
因此,从原理上来看,这个策略应该更适合一些复杂的问题以及包含很多先验知识的问题,在一些定义明确的场景下,可能不太能有很大的优化空间。
不过,考虑到这个方法本身已经开源了,后面有空还是可以试试的,毕竟在这个LLM猪突猛进,prompt调优越来越重要的大环境下,丰富点武器库总还是有用的。