在许多 AI 对话支持语音模式之后,网络上出现很多人使用两个 AI 进行对话,例如对某一个主题进行讨论或是让两种 AI 进行辩论。但是,看多了就会发现,他们的很多观点都是比较浅显的,对话也是比较短并不深入,这很大的原因可能是因为没有做 prompt 工程或是 AI 并没有拿到一些真实数据来用于他的辩论当中。因此我便产生一个想法,自己从 prompt 工程做起构建一个辩论 Agent,进行两个 AI 互相辩论。一般我在与大语言模型例如 ChatGPT、gemini 或是 Claude 对话的时候使用的 prompt,一般就几个来源 Github 的一些库、询问 perplexity 或是之前收藏的。
这一次没有直接拿来主义,首先是因为我确实没有找到这个 prompt,第二就是辩论作为思维上的比拼,prompt 可能不会太简单。当然,我首先还是先询问了一下 perplexity 以及其他 AI,问问他们”一个优秀的辩论手“有哪些特质。AI 可能会回答”他具有批判性思维“,第一反应一看似乎是很有道理的,但是我们要知道一个事实就是目前的 AI 或许没有那么聪明,他或许知道批判性思维该怎么去解释它的含义是什么。或许你问它某种情况下运用批判性思维该怎么去思考他能给你讲的头头是道,但他不一定就能按照批判性思维的步骤生成文字。当然这都是我的猜想,但确保输出的稳定性,我还是要去给到他具体的步骤。
我这一次的prompt工程就旨在探索提升AI辩论的深度和质量。比如,在AI辩论过程中,具体的一个思维链路是怎么去构建的,包括一些批判性思维的具象化实现,还有多模块协同的辩论系统框架的构架的构建。
Prompt 构建过程
从抽象到具象【深度】
批判性思维在辩论中该怎么去体现,这个问题就需要我们去做一些资料的调研。在这个过程中不必说要做多么深的调研分析,因为我们很难将所有的技巧都整合进 prompt 当中,毕竟但就”批判性思维“来说有人都能讲出一本书来。
在这个过程当中,我并不是真的去一篇一篇地查看文章或文献进行调研,而是会借助AI的能力。比如说,我会把文章或资料扔给AI,然后询问它批判性思维具体是怎么体现的。接着,我会问它在辩论中批判性思维该如何进行,并要求它给出具体的步骤。我会多问几种AI,比如说ChatGPT、Gemini和Claude,收集它们的回答,并将这些回答进行总结提炼。这个过程我一般是多信息来源、多 AI 整合。
然后,首先做一个框架的提取,看多个AI他们是从哪些角度去进行讲的。先把这个大角度整合到一起之后,再在每个角度下面整合他们具体的步骤。不断地从枝干到树叶,展开、拓展、填充,最后就形成了一个完整的批判性思维在辩论中怎么去实现的一个prompt的一部分。
这个过程我称之为Prompt的深度扩展,就是让抽象的特质转化成行动指导。,抽象的特质可能是一个比较模糊的概念,如果我们直接用行动指导去替代这个模糊的特质,就更能让AI的输出一步一步地保持在我们期望之中的输出风格。
点线成面【广度】
在 2024 年 11 月 8 日,新加坡举办了首届 GPT-4 提示工程竞赛。在这个比赛中数据科学家 Sheila Teo 凭借她的 CO-STAR 框架来搭建 prompt 架构。
- (C) 上下文(Context)
- (O) 目标(Objective)
- (S) 风格(Style)
- (T) 语气(Tone)
- (A) 受众(Audience)
- (R) 响应(Response)
我在 prompt 构建中也借鉴了她的做法,我用的是Gemini 1.5 Pro的模型,它的上下文长度有200k,因此对于上下文,我选择直接把历史的辩论对话直接丢给 Gemini。然后我也在 prompt 中设置了目标。对于风格,我对于 co-star 中的风格和语气直接使用了输出风格来替代,因为我认为这两个可以合并在一起。
我没有写受众,只是写了他所需要的特质和技巧。因为辩论,我觉得它不是作为一个工具去做出什么事情,比如说你要写广告,它的受众可能就是一些你的目标客户,或者说你要去写一篇作文,那你就要去想你的这个作文的呈现对象是谁,面向的人员是谁。但是像辩论的话,它就是一个互相的,虽然一般辩论是有观众的,但辩论的目的并不是为了取悦观众(至少在本次 AI 构建中不是),而是为了论证自己的这个辩题,打败对方,赢得这场辩论的胜利。因此,我就想用技巧和特质来替代这两个部分。
在其中的技巧部分,我又设置了四个方面。首先,议题的分析就是当他拿到了他的议题时,应该如何进行分析。我在Agent的构建过程中加入了一个网络搜索证据的模块,旨在搜索一些论证的证据,以便让辩论的AI知道如何利用这些证据。
第三个方面是如何处理对方的论点。首先,你需要了解对方的论点,然后对他的所有陈述的前提进行分析。这些前提是否充分、是否真实,是否需要检验,以及他的表达逻辑是否清晰。接着,你需要对其进行推理上的分析,比如是否存在逻辑错误、是否有过度概括,或者检验他的结论是否来源于他的前提。最后一点是对他的证据进行分析。
对于论证结构,首先你要形成自己的论点,然后反驳对方的论点,并加强你的核心论点。此外,还有一个比较重要的方面是预防批判。你可以承认你的目前论述中的局限性,也可以明确范围和假设,但你需要论证为什么,尽管你的立场存在弱点,仍然是有利的。这在一定程度上可以预防对方对你的论点进行批判。
此外,我还构建了一个搜索模块,加入到代理中。我让这个AI对上下文进行回顾。虽然它是一个搜索模块,但它也必须具备辩论者的一些特性,因为它需要根据辩论进行相应的搜索。同时,还需要给它设定一个目标特质。不过,这就需要做一些修改。例如,我专门给他加入了自然语言输出查询请求的要求,以便给出一些自然语言的查询。因此,需要让它从多个角度进行思考,比如学术视角、查询证据、深入思考对方的反驳论点,以及加强自己的核心论点。
这个地方我有些偷懒,因为我本来设想的是直接让他输出一句一句的查询语句,然后把它整合进一个 Python 的列表中,通过 for 循环一个一个去进行,比如说用爬虫的形式去进行 google。这里直接用了 Exa 的 API 接口,它可以直接帮你将自然语言查询到结果,并返回精准的 url 等信息,这样就不用去做爬虫或其他一些工作。
效果展示
我总共设置了三轮的辩论,设置了正反方面的议题:正方是“人性本善”,反方是“人性本恶”。这里我展示的是正方在第二轮的一个辩论回答:
我们坚持认为人性本善。虽然对方认为亲社会行为是由自我利益和进化压力驱动的,但我们认为这种解读忽视了人类发展和动机的基本方面。研究《幼儿的亲社会行为:从工具性到共情再到利他帮助》中记录的幼儿亲社会行为的早期出现,提供了对善良的天生倾向的有力证据。
这项研究表明,甚至在两岁之前,儿童就表现出工具性帮助行为,协助成年人完成任务。这表明他们对目标有早期的理解,并愿意为实现目标做出贡献,即使没有明确的奖励。虽然这些初始的帮助行为可能源于对社会互动或行为本身的兴趣,但它们仍然代表了亲社会性的基础元素。此外,研究强调了向共情帮助的发育进程,儿童对他人的情感困扰做出反应。这一转变发生在18至30个月之间,表明理解和回应他人内心状态的能力在不断增长,超越了单纯的工具性动机。
研究还承认利他帮助的复杂性,这种帮助对施助者有成本。虽然幼儿在这种类型的帮助方面不够熟练,但其存在,即使在幼年阶段,也表明了对无私的初步能力。30个月大的幼儿在有成本的帮助情境中表现出更强的辨别能力,区分自己和他人的物品,这进一步强调了对社会交换的更细致理解和为他人利益而个人牺牲的价值的发展。
我们承认对方的观点,即亲社会行为可能是由进化压力驱动的,以增强群体生存。然而,研究结果表明,幼儿亲社会性的发展的显著影响来自与成年人的社会互动和沟通。这突显了养育在塑造和支撑这些天生亲社会倾向中的作用,表明人类的善良不仅仅是冷酷、计算的进化策略的产物,而是自然与养育的复杂互动。儿童的帮助行为在对他人需求的清晰沟通下更容易被引发,这强调了社会学习和共情在促进亲社会发展中的重要性。这表明,尽管进化压力可能在亲社会倾向的初步出现中发挥了作用,但它们的发展和表达与我们的社会环境和共情能力密切交织在一起。
从工具性帮助到共情帮助的观察到的发展轨迹,以及甚至是有成本的帮助行为的早期出现,强烈表明人性并不是一个完全空白的状态,自我利益只是其上书写的内容。相反,我们拥有对合作、共情和利他主义的内在倾向,这种倾向通过社会互动被滋养和精炼。我们相信,培育这些天生亲社会倾向的环境对于建立一个更富有同情心和合作精神的社会至关重要。
可以看到他这个回答还是比较有逻辑性的,他先呈述观点,然后再引用论据,根据论据进行分析。他也会去驳论对方的观点,到了最后再进行一个增强自己观点的步骤。我们也能看到他对于这个论据材料的使用是比较充分的,也能够结合到他的这个论证的目标当中。而不足之处可能就是在于他的语言还是会有点AI的味道,未来可以再更加生动一点,在语言风格上做到晓之以情动之以理。
猜想、反思、感想
未来我也会打算把这个 prompt 中的步骤拆分成一个一个的单独的 AI 去逐步进行处理,比如从反驳到论证,或者说到批判思考。这些步骤把它拆分成单独的模块,然后用单独的 AI、单独的 prompt 去进行步骤式的一个方案解决。
猜想
因为当时我之前写过一篇文章,是对于这个 Chain of Thoughts(思维链)。我认为这个思维链,或者说我们通过这个单次的 prompt 提示去让它进行思考,是一个虚假的 AI 思考。就是说 AI 并不是真正的在思考。一般我们直接使用原始的 prompt,它就会直接输出一个结果。那我们让它使用 prompt,然后再让它使用 chain of thoughts,那它就会先生成 first step,然后再是 second step,最后就是那个 result 结果。
这个看起来真的是一步一步在分析,但是它只是把文字给你输出出来了,并不是它真的在思考。大语言模型首先会根据我们的 prompt 去进行生成文字。然后每一次生成字,或者说每一个 token,它生成出来都会利用前面的生成好的文字进行统计上的计算,然后不断地去生成,直到生成出一个完整的字和 token。也就是说,它这是一种步骤式的概率强化的方法。通过改变这个语言模型生成 token 的概率计算过程来影响最终的一个输出。 因为我们加入了 chain of thought,所以他一开始就在计算的时候,他就不会计算出直接 result,而是计算出了 first step 这一段文字。在生成这个后面的文字的时候,模型就会结合原来的 prompt 和已经生成的 first step 来进行概率计算。 这个时候概率计算出来的是 second step。那这个过程就会一直持续下去,每一步都会基于之前的步骤生成的文字和原始的 prompt 来调整概率分布。所以他可能就会影响整体的一个输出的质量,可能导致更高的质量的结果和更好的奖励值,也就是一个概率的分布。方法的核心就在于通过引导模型按步骤思考来改变他 token 的生成的概率分布,从而影响他整体的输出质量。
具体的猜想如上图所示:我们把每一段简化为一个 token,如果在没有思维链的情况下,直接在整个圆的面积中去找到 result token,但是加入思维链后,思维链所代表的改变第一个 token 的生成,第一个 token 更加精确的缩小圆圈面积,然后在第二个圆圈中找答案,不断说小面积,所以最后找到正确答案的概率变大了。
拆分成了单独 AI 的时候,第二个 AI 也是基于第一个 AI 的这个整个的文字去进行一个计算的。那我们的把它拆分成一个一个的 AI 去逐步处理和整个的直接处理有什么不同呢?
对于同一个AI来说,你一次性把所有的prompt都给了它,它在生成你想要的第一个步骤的文字时,会受到除了第一个步骤所需要的prompt以外的其他部分prompt的影响。这样一来,它的生成概率就会被稀释,范围也会被拉大。
反思
未来我也打算把这个 prompt 中的步骤拆分成一个一个的 AI,单独去逐步进行处理,然后去实验一下效果。这个里面会产生一个问题,就是我在想,首先我能不能把它们单独区分开,因为在 prompt 中的步骤并不是完完全全的单独的,而是有一些相关联系,相关联系互相影响。
第二个就是我在想,我们的辩论那个时候的思路真的是线性的吗?我们是一步一步地去理解,再去拆分分析,然后再转到下一步吗?我有时候在思考问题,想到了第一个步骤,但从第一个步骤不一定就是直线地往第二个步骤去想。可能跳跃式地就想到了结果,可能发生那些东西,然后由结果可能发生的那些东西再反馈到我们的第一个想法,然后我们再跳到第二个想法中去。所以我们可能不是那么有意识地一步一步去进行的,而是可能从一个地方入手,然后在这个地方正好想到另外一个点。这个点不一定就是第二个部分的点,然后我们再去往下思考。所以我觉得这个是需要后面去进行探讨研究的,可以从一些比如说元认知的研究去看一看人在辩论或者说思考问题的时候,具体是一个什么样的步骤和框架。
这就引入了下一个反思,从后面的一个可能结果在影响前面的思考,就相当于引入了一个反馈的机制。可以设置一个AI的评分员去对他的论述进行不断的分析,然后不断优化他的论述。在这个辩论质量评估中,可以纳入一些指标,比如说论证的完整性(论点—论据—论证的结构完整度)、逻辑的严密性(在这个推理过程中的有效性)、反驳的针对性(每个辩论者对于对方论点的直接回应的程度),以及引用证据的相关性和可靠性。
因为我们并不是像真正的辩论那样有那么多时间限制,真的就是说让他在那个时间里面去把辩论出来。我们追求的目的是让他能够更好地辩论,达到输出一个具有深度思考的、思考完全的正反两方面的结果。 这样子是对我们比较有意义的,因为这样我们也能够学习一些东西,通过让它给出具有深度两方面的见解,为思考问题提供一些思路。
感想
最开始的目标是去为我的 AI 的辩论做准备,但是在这个过程当中,也确实学到了很多东西。当我深入调研每个辩论者需要具备的技能,并对每项技能进行具体化的步骤指导的时候,我也能学习在一些情境下,用例如批判性思维或运用反驳技巧时,我们可以从哪些角度去思考,这种经验可以运用到我们现实生活当中。
比如说,有的人会利用大语言模型做进行一些投资的代理。在这个时候,他就需要调研在投资过程中一般需要做哪些决策,如何进行决策,如何衡量,以及如何判断时机等等。在这个过程中,不断地将 prompt 写得具体、写的有逻辑性,也是学习的一个过程。这个提示撰写以及梳理的过程,也是只是在我们大脑演绎的过程,最终产出的不仅仅是我们需要的某个 prompt,还有对于某一个领域某一个专业角色的了解。
当然,我目前所说的都是一些关于这个调研去撰写 prompt 的内容。如果我们自身作为一个专业人士,比如说我们刚刚提到的辩论者或者投资者,他们在想要写一个辩论的 prompt 或者一个投资的 prompt 时,就可以将自身的理解运用到其中,并把自身的知识和理解融入其中。这个时候,有一个很重要的能力叫做元认知,即对自己认知水平的了解。因为有句话“纸上得来终觉浅,绝知此事要躬”,我们做一些纸面上的调研只能是去把别人的经验进行整合进行学习。但是,有一些实践性的经验和实操才能得到的感受,在感受到之后我们还要把它转化为一种文字上的表现,这个时候又需要我们的元认知。