反思型智能体 • Langchain

反思是一种用于提高代理和类似 AI 系统质量与成功率的提示策略。本文概述了如何使用 LangGraph 构建 3 种反思技术,包括 Reflexion 和语言代理树搜索的实现。 关键链接 简单反思: (Python)反思: (Python)语言智能体树搜索: (Python)Youtube反思是一种提示策略,用于提升智能体和类似 AI 系统的质量和成功率。它通过提示大语言模型(LLM)反思和批评其过去的行为,有时还会结合外部信息,如工具观察。 人们常提到“系统1”和“系统2”思维,系统1是反应迅速或本能的,而系统2则更为有条理和反思性。正确应用反思,可以帮助 LLM 系统摆脱纯粹的系统1思维模式,表现出更接近系统2的行为。 反思需要时间!本文中的方法都用了一些额外的计算换取更好的输出质量。虽然这可能不适合低延迟应用,但对于知识密集型任务,响应质量比速度更重要,确实值得这样做。 以下是三个示例: 基本反思 链接: (Python, Youtube) 这个简单示例由两个 LLM 调用组成:一个生成器和一个反思器。生成器尝试直接响应用户请求,反思器则扮演老师角色,对初始响应提供建设性的批评。 循环进行固定次数后,返回最终生成的输出。 简单反思循环 我们可以在 LangGraph 中定义以下循环: from langgraph.graph import MessageGraph builder = MessageGraph() builder.add_node("generate", generation_node) builder.add_node("reflect", reflection_node) builder.set_entry_point("generate") def should_continue(state: List[BaseMessage]): if len(state) > 6: return END return "reflect" builder.add_conditional_edges("generate", should_continue) builder.add_edge("reflect", "generate") graph = builder.compile() MessageGraph 表示一个有状态图,其中“状态”只是一个消息列表。每次调用生成器或反思节点时,它会将一条消息添加到状态的末尾。最终结果由生成器节点返回。 这种简单的反思方式有时可以通过让 LLM 多次尝试改进输出,并让反思节点在批评输出时扮演不同角色,从而提高性能。 然而,由于反思步骤不依赖于任何外部过程,最终结果可能不会显著优于原始结果。我们来探索一些可以改善这一情况的其他技术。 反思 链接:(Python, Youtube)...

July 22, 2024 · 2 min · fisherdaddy

关于智能体、认知架构 、规划 • LangChain

本文是 LangChain 官方发布的关于 Agent 的系列文章,这里我将其汇总和翻译了一下 什么是智能体? “什么是智能体?” 我几乎每天都会被问到这个问题。在 LangChain,我们构建工具来帮助开发人员构建大语言模型 (LLM) 应用程序,尤其是那些作为推理引擎并与外部数据和计算源交互的应用程序。这类系统通常被称为“智能体”。 每个人对智能体的定义似乎都有些不同。我的定义可能比大多数人的更技术化: 智能体是使用 LLM 来决定应用程序控制流的系统。 即便在这里,我也不得不承认我的定义并不完美。人们常常认为智能体是高级的、自主的、类人的——但如果只是一个简单系统,其中大语言模型 (LLM) 在两条路径之间进行选择呢?这虽然符合我的技术定义,但并不符合大家对智能体能力的普遍认知。智能体到底是什么,确实很难准确定义! 这就是为什么我非常喜欢 Andrew Ng 上周的推文。在推文中,他建议“与其争论哪些工作应该包含或排除为真正的智能体,我们可以承认系统的智能行为有不同的程度。”就像自动驾驶汽车有不同的自动驾驶级别一样,我们也可以将智能体的能力视为一个光谱。我非常同意这个观点,我认为 Andrew 表达得很好。未来,当有人问我什么是智能体时,我会转而讨论什么是“智能行为”。 智能行为是什么意思? 去年我做了一个关于 LLM 系统的 TED 演讲,并使用下面的幻灯片来讨论 LLM 应用程序中存在的不同自主级别。 一个系统越“智能”,LLM 决定系统行为的程度就越高。 使用 LLM 将输入路由到特定下游工作流具有一定程度的“智能”行为。这会在上图的Router类别中。 如果你使用多个 LLM 进行多个路由步骤?这会介于Router和State Machine之间。 如果其中一个步骤是确定是否继续或结束——有效地允许系统在完成之前循环运行?这会属于State Machine。 如果系统正在构建工具,记住这些工具,然后在未来的步骤中使用它们?这类似于Voyager 论文中实现的,非常智能,属于更高的Autonomous Agent类别。 这些“智能”定义仍然非常技术化。我更喜欢“智能”的技术定义,因为我认为它在设计和描述 LLM 系统时很有用。 为什么“智能”是一个有用的概念? 与所有概念一样,值得问的是我们为什么需要“智能”这个概念。它有何帮助? 了解你的系统有多智能可以指导你在开发过程中的决策——包括构建、运行、与之交互、评估甚至监控它。 你的系统越智能,编排框架就越有帮助。如果你正在设计一个复杂的智能系统,拥有一个具有正确抽象概念的框架可以加速开发。这个框架应该对分支逻辑和循环有一流的支持。 你的系统越智能,运行就越困难。它会越来越复杂,某些任务将需要很长时间才能完成。这意味着你会希望将任务作为后台运行。这也意味着你希望有持久的执行能力来处理中途发生的任何错误。 你的系统越智能,你就越希望在运行时与它交互。你会希望能够观察内部发生的情况,因为所采取的确切步骤可能事先未知。你会希望能够在特定时间点修改智能体的状态或指令,如果它偏离了预定路径,可以将其拉回正轨。 你的系统越智能,你就越希望有一个为这些类型的应用程序构建的评估框架。你会希望多次运行评估,因为有大量随机性叠加。你会希望能够不仅测试最终输出,还测试中间步骤,以测试智能体的效率。 你的系统越智能,你就越希望有一个新型的监控框架。你会希望能够深入了解智能体所采取的所有步骤。你还会希望能够根据智能体所采取的步骤查询运行情况。 了解和利用系统中的智能能力光谱可以提高开发过程的效率和健壮性。 智能是新的 我经常思考的一个问题是,在这场热潮中,什么是真正新的。我们是否需要为人们构建的 LLM 应用程序提供新工具和新基础设施?还是以前的通用工具和基础设施就足够了? 对我来说,你的应用程序越智能,拥有新工具和基础设施就越关键。这正是促使我们构建LangGraph,一个帮助构建、运行和交互智能体的编排器,以及LangSmith,一个用于 LLM 应用程序的测试和可观测性平台。随着我们在智能光谱上不断前进,支持性工具的整个生态系统需要重新构想。 什么是“认知架构”? 更新:有几位读者指出,“认知架构”这个术语在神经科学和计算认知科学中有丰富的历史。根据维基百科的定义,“认知架构”既指关于人类心智结构的理论,也指这种理论的计算实现。这个定义(以及相关的研究和文章)比我在这里提供的定义更为全面。所以这篇博客应该被视为我在过去一年中构建和帮助构建基于大语言模型 (LLM) 应用程序的经验与这一研究领域的对照。 在过去的六个月里,我经常使用“认知架构”这个短语,而且以后可能会更多地使用。这是我第一次从 Flo Crivello 那里听到的术语——所有的功劳都归于他,我认为这是一个很棒的术语。那么我究竟指的是什么呢?...

July 22, 2024 · 2 min · fisherdaddy