快思考与慢思考 Agent 的结合
快思考与慢思考 Agent 的结合
本文介绍了一种"Talker-Reasoner"架构,用于提升大语言模型在与用户交互时的效果。该架构将智能体分为快速直观的对话代理和慢速深思熟虑的推理代理,通过模块化设计提高了响应的灵活性和准确性。
摘要
这篇论文介绍了一种"Talker-Reasoner"架构,用于提升大语言模型在与用户交互时的效果。论文将该架构类比于Kahneman提出的"快思慢想"理论,其中"Talker"代理(系统1)负责快速、直观地生成对话响应,而"Reasoner"代理(系统2)则专注于多步骤推理和规划。这种模块化设计不仅提高了响应的灵活性和准确性,还减少了延迟。
文章类比了人类思考的两种模式:快速、直观的系统1和缓慢、深思熟虑的系统2。系统1能够快速做出判断和反应,比如感知速度较快的汽车或识别同事的情绪。而系统2则处理复杂问题,如规划假期和进行复杂计算,代表了有意识的推理。两者在认知过程中密切互动,系统1持续为系统2提供直觉和建议,后者可以选择采纳这些建议。
类似的双系统方法也适用于强化学习(RL)问题。随着大语言模型(LLMs)的快速发展,各种人工智能代理(如编程助手、导师和健康教练)被期望能通过语言理解世界的复杂模式,并产生直觉和连贯的对话。这种能力与系统1相似,而代理在进行多步骤推理、调用工具、检索信息和解决复杂问题时则与系统2的功能相符。
主要方法
整个双系统架构如图所示。在这个双系统架构中,Agent被分为两个角色:快速直观的对话代理和较慢深思熟虑的推理代理。
对话代理负责与用户进行自然的语言交流,能够迅速感知用户的反馈和对话历史,生成连贯的回答。它通过访问Memory,将最新的信息融入其回应中,尽管它的视角可能存在滞后。这种滞后是因为推理代理可能需要时间来进行复杂的分析和形成新的观点,导致对话代理在生成响应时使用的是较旧的观点。
与此同时,推理代理承担着更为复杂的任务,包括多步骤的推理和规划。它会生成新的理解,并将其存储在Memory中,以便对话代理在需要时进行检索。推理代理通常是以特定目标为导向,能够将复杂问题分解为小问题,从而有条不紊地解决。
对话代理与推理代理之间的互动主要通过Memory实现,对话代理可以在必要时选择等待推理代理的分析结果。这种机制确保在需要深入分析的情况下,对话代理的回应能够建立在推理代理的深入思考之上。通过这种有效的角色分配和协作,这个架构不仅提高了对话的自然性和连贯性,还增强了代理在解决复杂问题时的能力。
Talker Agent
Talker Agent按照特定prompt来确保对话的连贯性和良好的用户体验。每次与用户互动时,Talker生成的响应依赖于当前上下文、用户的最新反馈以及推理代理存储的最新观点。尽管Talker旨在快速响应,可能使用较旧观点。但整体上,Talker Agent仍能快速且自然地进行对话,始终处于活跃状态,以满足用户的交流需求。
Reasoner Agent
Reasoner Agent负责复杂问题的解决、观点的形成和决策。它执行多步骤推理和规划,涉及对多种语言模型的调用,以及获取外部知识的工具或数据库调用。
Reasoner通常将复杂问题分解为子问题,以层次化的方式分配给不同的模块、工具或语言模型。结合多步骤推理的中间结果,并从过去的对话历史中提取用户的信息,以结构化的对象存储在Memory中。来支持Talker Agent的快速响应。
总结
本文并没有做更多的实验来支撑这种架构。原文有一个真实场景(Sleep Coaching)的评估案例,感兴趣的读者可以阅读原文的第四章节来看一下在这个场景下,双系统架构是如何生成每一轮的响应的。
笔者认为,这篇文章虽然只是一个技术方案报告,但在一些垂直领域场景下,确实更有可行性。例如现在流程的CoT或Plan反思结构中,系统的响应速度过慢导致无法真实落地。如果你的场景是一个多轮连续对话,且对话意图不会轻易发生偏移,那快慢思考结合的方式就可能会适用。从方法的本质来说仍然属于一个传统的RAG结构,只不过检索的内容被替换成慢思考的结果。