Agentic RAR+Nano
在这篇文章中,我将向你介绍如何利用 LangGraph、Agentic RAR、Nano-GraphRAG 和 Claude 3.7 Sonnet 创建一个基于智能推理的聊天机器人。阅读完后,你将能够为自己的业务构建一个强大的智能推理聊天机器人。
首先,我将展示聊天机器人的效果,例如:“生成代码,检查以下数字是否为回文数:123、121、12321、12345、123454321。”
当用户提问时,初始推理 Agent 会分析问题,识别所需的专业 Agent,并检测特定标签以确定查询类型,如网页搜索、代码执行或思维导图。
每个 Agent 都有一个合作伙伴来收集数据。例如,当代码 Agent 执行任务时,另一个 Agent 会记录过程并将其结果存储到文件中。
- • 使用 route_to_agent 功能,系统会通过分析状态和所需的 Agent 来指导工作流程,提取嵌入式查询,决定激活哪个 Agent,并存储路由决策。
- • 在需要进行网页搜索时,web_search_agent 会通过 Tavily API 进行查询,处理返回结果,并在完成后存储查询信息和结果。
- • code_execution_agent 会生成并运行代码,同时提取格式化输出以更新推理和存储结果,执行完毕后会自行退出。
- • 思维导图 Agent 在整个过程中收集知识,并在用户查询时组织结构性信息,它会汇总所有信息并格式化成知识文档,存储到 GraphRAG 知识图谱中,以便进行检索和结构化分析。
- • 知识管理依赖于通过 collected_knowledge 字典进行信息收集,并通过基于 GraphRAG 的 MindMap 类进行长期存储。这涉及到目录存储、JSON 文本块、语义搜索的向量嵌入,以及通过 graph_retrieval 实现的查询功能,确保知识不断增长。
- • 最后,synthesize_answer 方法将整合所有收集到的信息,生成全面的总结,并将其存储在思维导图中,结合推理链和思维导图的信息生成最终答案。
我在开发中遇到的问题
在开发聊天机器人的过程中,我遇到了一些困难。
- • 思维导图初始化问题:一个主要的挑战是,Agent 在没有任何数据的情况下试图访问数据,导致了“matrix”错误。为了解决这个问题,我调整了初始化方法,在启动时仅创建基本的目录结构,并确保 Agent 在存储信息之前先收集实际数据。
- • Agent 之间的状态管理:另一个问题是信息在 Agent 之间转换时会丢失。为了解决这个问题,我引入了一个持久的知识收集机制,使用 collected_knowledge 字典来跟踪输出,以确保知识逐步积累。
- • 知识整合效果不佳:思维导图中知识整合的效果不如预期,因此我修改了工作流程,持续收集数据,在合适的时候存储格式化的知识,并在合成前查询思维导图。
- • 思维导图 Agent 的设计突破:最大的突破是重新设计思维导图 Agent,使其成为一个被动的知识收集者,而不是一个需要显式调用的 Agent,这样它可以在推理过程中自然而然地构建出全面的知识图谱。
通过阅读这篇文章,你将了解到 Agentic RAR 和 Nano-GraphRAG 的概念,为什么 Agentic RAR 具有独特性,以及它的工作原理,我们如何应用 Agentic RAR 创建一个强大的推理聊天机器人。
什么是 Agentic RAR?
首先,尽管大型语言模型(LLM)在推理能力上尚未达到通用人工智能(AGI)或超人工智能(ASI)的水平,但它们在处理数学、编码和复杂思维等任务上已经取得了显著进展。
以最新推出的 Claude 3.7 Sonnet 为例,这是市场上第一个混合推理模型。它不仅能快速响应用户需求,还能进行深入思考,用户甚至可以调整其思考的时间。这一模型能够启动长时间的思考模式,模拟人脑的思维过程。
然而,LLM 在序列推理方面仍然较为薄弱。例如,当要求 LLM 解决一个多步骤的数学问题时,它可能会忘记之前的步骤,导致错误的答案。此外,在面对模糊不清的问题时,LLM 可能会选择猜测而不是寻求更多细节,这会导致结果不准确,有时对同一问题的回答也可能不一致,这增加了使用时的困惑,特别是在处理专业主题或长期对话时。
想象你有一位聪明的朋友,不仅知识渊博,还能在线搜索更多信息,编写并运行简单的程序,甚至绘制思维导图来连接各类想法。这正是 Agentic RAR 的应用场景。它在 RAG 模式的基础上,带来了一种动态和以推理为中心的问题处理方法。
Agentic Reasoning 的核心在于赋予 AI 模型使用额外工具的能力,类似于我们用计算器解答复杂的数学问题、查字典获取词义,或利用搜索引擎在线查找答案。
例如,当你询问 AI:“中国现在的人口是多少?”它不仅依赖以往学到的知识,还能实时检查最新的数据并给出精确的答案。这种能力让 AI 变得更加智能和实用,因为它不会仅仅依赖猜测,而是通过使用合适的工具找到最佳解答,就像我们在现实生活中所做的一样!
Agentic RAR 的独特性
Agentic RAR 的独到之处在于它通过统一的 API 来标准化工具调用,使得集成新工具(例如化学方程求解器)变得非常简单。
此外,它可以动态分配认知负荷,通过将简单任务交给轻量级的 Agent 处理,而将复杂计算交给专用的代码代理,从而更高效地利用资源。测试表明,在医学诊断的场景中,系统的响应速度提升了 40%,而计算能力的使用量则下降了 72%。
它的多模态记忆融合技术使得思维导图代理能够存储并连接文本、公式和图表,构建一个三维的知识系统,因而能够有效地处理复杂问题。
工作原理
Agentic Reasoning 采用结构化的方法,结合多个外部 Agent 来提升大型语言模型(LLM)的推理能力。
- • 利用网页搜索 Agent,从互联网获取实时信息,以补充 LLM 预训练过程中缺失的知识。
- • 编码 Agent 用于执行代码或完成计算任务,具备定量推理能力,能够解决需要编程的复杂问题。
- • 思维导图 Agent 的作用在于构建知识图谱,组织和可视化复杂的逻辑关系,以帮助结构化推理过程。
- • 该模型能够在推理过程中识别出需要额外信息或计算能力的时机,并生成特定查询,从而无缝地触发外部 Agent 的使用。
在整合所有信息并结构化信息之后,模型将构建一个连贯的推理链,最终生成答案。
了解 Nano-GraphRAG
GraphRAG 是微软提出的一种高效框架,但其官方实现相对复杂,用户在使用和修改上会遇到困难。
Nano-GraphRAG 是 GraphRAG 的轻量化且灵活的实现,旨在简化用户的使用体验和定制过程。它保留了 GraphRAG 的核心功能,同时提供更简洁的代码结构、更友好的用户体验和更高的自定义能力。
Nano-GraphRAG 的代码量大约为 1100 行(不包括测试和提示),它被设计为轻量、异步且完全类型化,非常适合希望在项目中集成 GraphRAG 的开发者,同时避免增加额外的复杂性。
开始编码
我创建了一个名为 MindMap 的类,作为智能系统,用于高效地存储和检索信息。在初始化时(使用 __init__
函数),我构建了一个工作目录(local_mem),并利用 GraphRAG 来组织数据,同时立即保存任何提供的初始内容。
为了存储和确认保存的信息字符数,我使用了 insert
函数。当需要查询时,可以调用 __call__
函数,该函数会使用 graph_retrieval
来搜索存储的数据,在“本地”模式下查看相关信息,并展示结果。
我还开发了一个 process_community_report
函数,用于从特定的 JSON 文件中读取并合并结构化的社区报告,从而更方便地查看所有相关信息。如果希望专门在社区报告中进行搜索,我会使用 graph_query
函数,它可以根据这些报告收集和格式化问题,并返回最相关的信息。
我开发了一个名为 MultiAgentReasoner 的类,功能类似于智能管理者,能够协调多个 Agent 来帮助回答问题。每个 Agent 执行特定的任务,例如网页搜索、代码编写或信息组织。
当我实例化一个新的 MultiAgentReasoner 时,它会连接到名为 Tavily 的工具,以便进行搜索。此外,它还会创建一个思维导图(MindMap),用来存储和组织信息,并设定默认的搜索次数限制为 3 次。同时,它还会创建一个工作流程,以便于规划和管理任务,并准备一个知识存储的空间。
系统分析问题的起点是 initial_reasoning
函数。该函数首先从 GraphState 中提取问题,并利用大型语言模型(LLM)进行问题分解。如果 LLM 识别出思考的部分,它会将其提取出来。接着,根据问题的性质,系统决定需要哪些辅助 Agent;例如,如果需要进行搜索,便会添加搜索 Agent;若涉及编码相关问题,则加入代码 Agent;如果需要组织信息,则引入思维导图 Agent。
若编码相关问题没有配置 Agent,系统会自动添加代码 Agent,并生成默认的查询内容,例如“编写代码以 [你的问题]”。在将问题和初步推理存储到思维导图中以备后续查阅后,系统会展示其推理过程以及将要使用的 Agent。
若处理问题时出现错误,系统会打印错误信息,并提供类似于“让我一步步分析”的备用响应。此时,代码 Agent 会被设置为默认辅助,系统将通过返回问题的基本信息来继续处理。
route_to_agent
函数根据推理的结果决定应该由哪个 Agent 来处理问题。当系统接收到问题时,它首先检查存储在状态中的推理,判断是否需要进行搜索、编码或者利用思维导图。
如果不需要特定的 Agent,系统将默认使用综合 Agent。若需要搜索 Agent,函数会在推理中寻找相关的搜索查询,提取出该信息并将问题路由到搜索 Agent,同时将决策记录在 MindMap 中。如果需要调用代码 Agent,则会检查与代码相关的查询,提取必要信息并将其发送到代码代理,再次将决策保存到 MindMap 中。
当推理涉及思维导图查询时,函数会提取该查询,并将问题路由到思维导图 Agent。如果没有找到这些特定的查询,问题则会被转发到综合 Agent,后者可以合并信息或提供简单的响应。
我设计了一个 web_search_agent
函数,用于在需要时进行搜索并收集相关信息。当遇到问题时,这个函数会打印一条消息,并从系统状态中提取搜索查询。它使用名为 Tavily 的工具,在网络上执行查询,最多收集三个搜索结果,并将内容进行合并。
接下来,系统为大型语言模型(LLM)生成指令,以便对结果进行处理,确保聚焦于最相关的信息。它会检查是否存在标示为“最终信息”的部分,如果有,就优先使用该部分;否则,使用整个 LLM 输出的内容。
查询和搜索结果会被保存到思维导图(MindMap)中,供后续查阅。同时,它还会更新待办事项列表,移除“搜索”任务,并通过将查询替换为相应的搜索结果来调整推理。
最后,该函数将搜索结果存入收集的知识中,并返回更新后的推理和结果,从而确保系统获得回答问题所需的最新信息。
接下来,我开发了 code_execution_agent
函数,用于生成和执行代码。
该函数首先创建一个“思维链”(chain of thought,cot),以指导大型语言模型(LLM)生成所需的代码指令,然后将这些指令发送给模型,如果输出中包含类似于 [ANSWER] 和 [/ANSWER] 的特殊标签,它会提取出中间的代码;如果没有,则使用整个回应。
该函数会将原始查询和生成的代码存储在 MindMap 中,以便未来参考,并更新待办事项列表,移除“代码”任务。同时,通过将代码查询替换为生成的结果,来更新整个推理过程。
此外,它还会将查询和结果存储在已收集的知识中,以便未来能轻松使用,并返回更新后的推理状态、代码结果以及所需 Agent 的新列表,顺利完成整个流程。
我开发了一个名为 mind_map_agent 的函数,旨在帮助组织和关联不同的信息片段。首先,该函数会显示执行思维导图 Agent 的提示,并从状态中获取特定的思维导图查询。
它会收集所有相关信息,包括原始问题、推理过程、搜索结果、代码执行结果,以及思维导图中已有的知识。基于这些信息,它构建出一个完整的知识文档,并将其存储在思维导图中。
在使用用户问题查询思维导图时,系统会尽量找到直接的答案;如果找不到,它将利用大型语言模型(LLM)生成一个结构化的分析,强调关键概念和信息。
若查询时出现错误,系统会提供一条备用消息以便继续流程。同时,我会将思维导图的查询和结果保存在思维导图中,以便今后参考,并通过标记任务完成来更新待办事项列表。
最后,我会通过整合思维导图的结果来更新整体推理,并返回更新后的推理内容、思维导图结果和相关知识。
因此,我开发了 synthesize_answer
函数,用于整合所有收集到的信息,生成最终的全面答案。首先,我会显示一条消息,指明流程的启动,并提取用户的问题以及迄今为止完成的推理内容。
接下来,我将所有相关信息合并成一个文档,这个文档会包含原始问题和推理链。如果有任何搜索结果或代码执行后产生的结果,我也会将它们纳入文档,以便提供一个完整的知识视图。
一旦知识收集完毕,我会将其存储在思维导图中以供未来参考,并查询与问题相关的任何信息。然后,我构建一个综合提示,其中包括所有收集到的知识(也包括思维导图中的信息),并将其传递给 LLM,以生成一个清晰而完整的答案。
在生成最终答案后,我会将其存储于思维导图中,并打印一条消息,表示答案已经准备好。最后,我将最终答案返回给用户进行展示。
我设计了一个名为 decide_next_step
的函数,用于交通指挥。该函数会根据当前活跃的 Agent 决定工作流程的下一步。它会检查活跃的 Agent,并将流程引导至相应的下一步。如果没有任何 Agent 处于活跃状态,则返回一个空字符串。
我开发了一个 create_workflow
函数,用于构建整个工作流程图。在这个过程中,我设计了多个关键节点,代表不同的功能,包括推理、网页搜索、代码执行、思维导图以及综合处理。我将起点设定为“initial_reasoning”,并定义了各个节点之间的连接关系(边)。
此外,我创建了依赖于 decide_next_step
函数的条件边,使其能够根据具体问题的需求来决定下一个节点。最后,我标记了流程的终点,编译完成图,并返回最终的工作流程。
结论
Agentic Reasoning 和 Nano-GraphRAG 不仅是工具框架,它们体现了人工智能系统的演变过程——从单一模型发展到智能代理生态系统,从静态知识转向动态认知——标志着推理变革的起点。对于对 GraphRAG 感兴趣的用户而言,Nano-GraphRAG 是一个非常理想的选择,因其具备简单易用和高度可定制的特点,使其成为开发人员的强有力替代方案。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-14,如有侵权请联系 cloudcommunity@tencent 删除系统存储函数思维导图搜索我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,让AI助力您的未来发展。