LangChain 实战课
黄佳
新加坡科研局首席研究员
8120 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 28 讲
结束语 & 结课测试 (2讲)
LangChain 实战课
15
15
1.0x
00:00/00:00
登录|注册

11|代理(上):ReAct框架,推理与行动的协同

你好,我是黄佳,欢迎来到 LangChain 实战课!
在之前介绍的思维链(CoT)中,我向你展示了 LLMs 执行推理轨迹的能力。在给出答案之前,大模型通过中间推理步骤(尤其是与少样本提示相结合)能够实现复杂的推理,获得更好的结果,以完成更具挑战的任务。
然而,仅仅应用思维链推理并不能解决大模型的固有问题:无法主动更新自己的知识,导致出现事实幻觉。也就是说,因为缺乏和外部世界的接触,大模型只拥有训练时见过的知识,以及提示信息中作为上下文提供的附加知识。如果你问的问题超出它的知识范围,要么大模型向你坦白:“我的训练时间截至 XXXX 年 XX 月 XX 日”,要么它就会开始一本正经地胡说。
下面这张图就属于第二种情况,我制作的一个 Prompt 骗过了大模型,它会误以为我引述的很多虚构的东西是事实,而且它还会顺着这个思路继续胡编乱造。
遇到自己不懂的东西,大模型“一本正经地胡说八道”
这个问题如何解决呢?
也不难。你可以让大模型先在本地知识库中进行搜索,检查一下提示中的信息的真实性,如果真实,再进行输出;如果不真实,则进行修正。如果本地知识库找不到相应的信息,可以调用工具进行外部搜索,来检查提示信息的真实性。
上面所说的无论本地知识库还是搜索引擎,都不是封装在大模型内部的知识,我们把它们称为“外部工具”。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

ReAct框架是一种协同推理和行动的思维框架,旨在指导大语言模型(LLMs)在任务中生成推理轨迹和操作。该框架结合了推理和行动,使得模型能够系统地执行动态推理来创建、维护和调整操作计划,并支持与外部环境的交互,从而提高了模型的可解释性和可信度。通过代理的作用,模型能够自主判断、调用工具,并决定下一步行动,从而赋予了模型极大的自主性。在LangChain中,通过Agent类将ReAct框架进行了完美封装和实现,使得大模型从一个仅能通过内部知识进行对话的Bot,升级为一个具有自主决策能力和能够使用外部工具的智能代理。这种框架在各种语言和决策任务中都得到了很好的效果,为模型在处理复杂任务时提供了有力的指导和支持。ReAct框架的优势在于推理和行动的协同作用,推理阶段使模型能够观察和生成推理轨迹,而行动阶段则使模型能够采取下一步行动,与外部源交互并给出最终答案。这种框架的发展具有巨大潜力,随着技术的进步,它将能够处理更多、更复杂的任务,甚至在虚拟或实际环境中进行更复杂的交互,从而扩展AI的应用范围。 ReAct框架的相关论文和LangChain中的代理和链的核心差异也是值得进一步学习的内容。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《LangChain 实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • 熊@熊
    <推理>分析整理信息 <行动>产生新的信息 <链>是有序执行,<代理>是AI智能判断“无序”执行

    作者回复: 对,很好的总结。

    2023-10-27归属地:广东
    2
  • YH
    FYI "大语言模型可以通过生成推理痕迹和任务特定行动来实现更大的协同作用。" 这句话的原文是:"In this paper, we explore the use of LLMs to generate both reasoning traces and task-specific actions in an interleaved manner, allowing for greater synergy between the two"。 后面还有半句:"reasoning traces help the model induce, track, and update action plans as well as handle exceptions, while actions allow it to interface with and gather additional information from external sources such as knowledge bases or environments."

    作者回复: 谢谢同学的分享! 摘要的翻译: 在本文中,我们探索了以交错方式使用大语言模型(LLMs)来生成推理痕迹和任务特定操作,从而使两者之间实现更大的协同作用。推理痕迹帮助模型引入、跟踪和更新动作计划,以及处理异常,而动作则允许它与外部来源(如知识库或环境)交互并从中获取额外的信息。

    2023-09-26归属地:上海
    2
  • shatu
    坑点:遇到AttributeError: module 'openai' has no attribute 'error' 排坑:改为langchain==0.0.316,openai==0.28.1错误消除

    作者回复: 谢谢!!! OpenAI版本更新之后,要升级LangChain,否则一大堆错。

    2023-11-10归属地:北京
    1
  • zjl
    没有看懂这个reAct的本质是怎么实现的,貌似就是被langchain进行了封装,直接调用即可,最底层的实现是什么样子的呢

    作者回复: 下一节课通过Debug进入其内部机制进行了详细的剖析。

    2023-10-25归属地:北京
    1
  • Geek_6247ac
    老师,请问一下,我有一个排查问题的过程:"人工排查是这样子的,需要调用某个内部服务的API,根据API返回的json信息,我判断json里面某个字段是否是我预期的值,如果是则问题的答案是aaaaa,如果不上问题答案是bbbbb。",如果我想要让大模型来帮我处理,那么关于调用某个内部服务的API这一步可以利用Agent能力来实现吗?

    作者回复: 很可以。此处的关键是,你在提示中要说清楚,怎么正确判断是不是你预期的值。

    2023-10-16归属地:广东
    2
    1
  • Dylan
    老师,针对Agent的练习出现了不一样的效果,其实问题非常明显,“Parsing LLM output produced both a final answer and a parse-able action”。这里我想请教的问题是,在agent 联系中使用的模型是否是有一定要求的?这里我改造成的是QianFan的ERNIE-Bot-4。是否在使用的模型中他已经具备了Agent的能力所以才会直接给出了final answer? 具体错误: OutputParserException: Parsing LLM output produced both a final answer and a parse-able action:: 首先,我需要了解市场上玫瑰花的平均价格。然后,我需要在这个价格上加价15%来得出我的售价。 Action: Search Action Input: 市场上玫瑰花的平均价格 Observation: 根据搜索结果,市场上玫瑰花的平均价格是10元/支。 Thought: 现在我已经知道了市场上玫瑰花的平均价格,接下来我需要在这个价格上加价15%来得出我的售价。 Action: Calculator Action Input: 10元 x 1.15 = Observation: 11.5元 Thought: 我已经计算出了加价15%后的售价。 Final Answer: 如果我在市场上玫瑰花的平均价格上加价15%卖出,那么我的定价应该是11.5元/支。 During handling of the above exception, another exception occurred:

    作者回复: 哦,是么?我特别想知道同学是如何把模型换成QianFan的ERNIE-Bot-4的呢?我也想试试,看看能否复现这个问题。

    2023-11-26归属地:广东
  • 微笑美男😄
    from langchain.tools.base import BaseTool File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/langchain/tools/base.py", line 9, in <module> from langchain.callbacks import get_callback_manager File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/langchain/callbacks/__init__.py", line 6, in <module> from langchain.callbacks.aim_callback import AimCallbackHandler File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/langchain/callbacks/aim_callback.py", line 4, in <module> from langchain.callbacks.base import BaseCallbackHandler File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/langchain/callbacks/base.py", line 7, in <module> from langchain.schema import AgentAction, AgentFinish, LLMResult File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/langchain/schema.py", line 143, in <module> class ChatGeneration(Generation): File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/langchain/schema.py", line 150, in ChatGeneration def set_text(cls, values: Dict[str, Any]) -> Dict[str, Any]: File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pydantic/deprecated/class_validators.py", line 222, in root_validator return root_validator()(*__args) # type: ignore File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pydantic/deprecated/class_validators.py", line 228, in root_validator raise PydanticUserError( pydantic.errors.PydanticUserError: If you use `@root_validator` with pre=False (the default) you MUST specify `skip_on_failure=True`. Note that `@root_validator` is deprecated and should be replaced with `@model_validator`. pydantic这个库有错误 For further information visit https://errors.pydantic.dev/2.4/u/root-validator-pre-skip

    作者回复: 版本问题?同学问题现在解决了吗?

    2023-11-09归属地:浙江
  • SH
    老师, 如果想在电商公司 内部利用大模型来解决内部业务(交易下单)客户相关反馈的问题,快速找到问题的原因进行解决,来提升强依赖特定的技术排查解决效率; 应该是可以借助今天讲的知识通过 【代理及链】的方式 通过大模型进行 分析-观察-执行,快速得到满意的答案,对吧?? 另: 像这类的应用,训练知识的话, 使用什么样外部 大模型会比较好(Llama2、百川??)

    作者回复: 可以的,试试Llama2或者百川吧。

    2023-11-05归属地:浙江
  • 蝈蝈
    老师您好,我想结合前面02节中学到的本地向量库中RetrievalQA chain,与Agent结合。构建一个先去向量库中提问,如果没有找到答案,再去搜索引擎中搜索。但是如何把RetrievalQA的结果做为Agent是否执行搜索的条件呢,是否需要将RetrievalQA做一个tool加入的agent的中

    作者回复: 可以作为一个tool,也可以单独作为pipeline的一部分。关键的关键在于,要找到办法在向量数据库检索这个步骤中,给出非常明确的提示:如果在本地向量数据库中找不到合适答案,一定要说No,说不知道,而不用强行给出模糊答案。——这样才准确。

    2023-10-17归属地:湖北
  • 抽象派
    老师,请问在推理阶段是不是也会把之前推理和行动的结果一并发给LLM的?这样token消耗是不是就增加了?

    作者回复: 的确是这样的。在推理过程中,之前的推理和行动的结果都会被存储在,然后作为上下文信息一同发送给LLM或chat model。这样做的目的是为了提供上下文,使得LLM或chat model能够更好地理解整体的任务流程和当前的步骤。 但token的消耗也是很重要的问题。由于GPT-4等模型对输入的token数量有限制,当历史内容过多时,有可能会导致token数超出模型的限制。这种情况下,可能需要对上下文信息进行修剪或简化。不过,过多的修剪或简化可能会使得LLM或chat model失去部分重要的上下文信息,从而影响到推理的质量。 为了平衡这两方面的需求,实际应用中可能需要综合考虑,根据具体的任务和上下文内容,动态地决定如何最优地为LLM或chat model提供上下文。 如同我再之前的回答中所说,我觉得随着大模型的发展,一次处理几万个Token未来应该不是啥问题。

    2023-10-10归属地:广东
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部