0


AI大模型入门 - LangChain的剖析与实践

LangChain概述

官方文档介绍:https://python.langchain.com/docs/get_started/introduction
github:https://github.com/langchain-ai/langchain
安装文档:https://python.langchain.com/docs/get_started/quickstart.html
在这里插入图片描述

LangChain 是一个基于语言模型开发应用程序的框架。它可以实现以下功能
  • 数据感知:将语言模型与其他数据源连接起来
  • 主动性:允许语言模型与其环境进行交互
LangChain 的主要价值在于
  • 组件:用于处理语言模型的抽象,以及每个抽象的一系列实现。无论您是否使用 LangChain 框架的其他部分,组件都是模块化且易于使用的
  • 现成的链式组装:用于完成特定高级任务的结构化组件组装,现成的链式组装使得入门变得很容易。对于更复杂的应用程序和细致入微的用例,组件可以轻松自定义现有的链式组装或构建新的链式组装。

本篇文档主要篇幅会集中在对LangChain的技术剖析,通过具体的代码实践以及相关的文献分析,来引发对与LLM的相关思考,从而真正理解LLM(大模型)所带来空前机遇。

理解LangChain

在这里插入图片描述

结合上图所示内容,为了帮助大家理解,一些关键词这里做一些介绍

  • LLM:基于transformer实现的大模型,例如,ChatGPT、Llama2等模型都是LLM。
  • Tools:提供给LLM调用的各种API函数,相当于给LLM配置的助手,让它能够做到超出它能力的事情。
  • Prompt:一种给LLM塞提示语的方式,即一段自然语言的描述,其中可以是用户的要求,也可以是一些上下文内容,就像和一个陌生人交流钱,先把交谈所需要告知的规则、上下文等告诉对方。
  • CoT:思维链,让LLM能够将复杂任务拆解成多步去完成,从而极大提升它的推理能力。
  • ReAct:结合CoT(思维链),在每一步中为LLM配置Tools,将Tools执行的结果作为上下文再回馈给LLM,从而让LLM能够边推理、边执行、再继续推理的能力。
  • Embedding:嵌入模型,即将文本、图片转换到统一向量空间中的一个向量,从而能够让LLM能够通过向量余弦等数学计算,来理解不同语句的语义,以及它们之间的关系
  • 向量数据库:一种只存储向量,以及提供向量相似度检索的数据库,例如,SQLite-VSS、Pinecone、Weaviate、Chroma等,目前业内已经有非常多成熟的方案。
  • 记忆:LLM只有训练时的记忆,通过Eebedding将额外的数据向量化成向量,存储在向量数据库中,以后每次与大模型的会话前,通过向量相似度检索找到有关联的内容,通过Prompt提供给LLM,LLM会像人一样从中理解最需要的内容,从而回答训练过程中没有的知识或内容。

核心能力剖析

1. LLMs:对具体LLM实现解耦,支持接入自己的LLM

在这里插入图片描述

2. Agent:通过ReAct将思维链(CoT)和Action结合

CoT介绍:2022年1月提出,100B规模才会出现质的效果(涌现),白盒研究的未知领域,LLM厂商追求的目标

  • 论文:https://arxiv.org/abs/2201.11903
  • 原理:约束“精神分裂症”患者LLM,让他能够表现得和正常人类思考模式一样。这是因为使用全网数据(不需要打标签的数据)训练出的LLM,会存在的各种人格(说话的语气)、思维习惯、表达方式(精炼/啰嗦)等等,需要用一段明确的话去示范给它看,应该以什么的模式去进行推理,这段话就是CoT论文的最终产物。
  • 论文结论:一段自然语言prompt模版,下图中右边部分蓝色加粗的就是。
  • 请注意!只需要一段简单的示范就可以,LLM会自己理解这是要分步骤去思考,然后后面所有的其他问题它都会按照分步思考的方式去推理,是不是很像教一个人如何办事?这就是LLM强大之处,只要给它个例子,它就能明白。在这里插入图片描述

ReAct介绍:2022年10月提出,是一套将在LLM中将模型推理(CoT)和Action协同结合的方法,能够有效解决LLM在信息滞后、幻觉、错误等方法的问题,基本的原理如下图所示:

  • 论文:https://arxiv.org/abs/2210.03629 - https://react-lm.github.io/- https://www.promptingguide.ai/zh/techniques/react
  • 原理:给“通识教育”学生LLM,配备必要的工具助手,解决特定领域因信息差、能力不足而致幻、错误的问题
  • 论文结论:一段自然语言prompt模版在这里插入图片描述 以下图HotpotQA上的知识问答为例,使用ReAct协同的方法,对回答的正确率提升明显在这里插入图片描述LangChain中ReAct的实现:以自然语言范本的方式让LLM遵循ReAct范式,并以Agent的形式提供给用户使用在这里插入图片描述 实现方式并不复杂,主要是通过内置Prompt的方式,让LLM按照分步思考(CoT),然后再根据LLM提供的步骤分步执行Action并和LLM多次交互,具体实现代码如下:在这里插入图片描述在这里插入图片描述Lanchain中ReAct Agent使用示范在这里插入图片描述在这里插入图片描述

3. Tools:通过自然语言描述自定义工具

理解LLM是如何能够调用人类定义的API函数,是非常有助于了解LLM为何是迄今为止AI领域空前的进步,请注意以下关于注册API函数的方式,是否无限接近与一个正常人类沟通交流的方式?人类无需关心什么时候调用API,以及如何抽取函数的参数,一切交给LLM,它会表现得像一个人一样思考,在它自己做不到某些事情时,它会去思考要去调用什么Tool来解决问题。

如何自定义Tool:通过LangChain封装自定义的Tool,方法比较简单,完全是通过自然语言描述和说明
在这里插入图片描述

Tool的注册实现:自定义Tool中的name和description字段,最终会被LangChain组装到ReAct形式的prompt中
在这里插入图片描述在这里插入图片描述

推理和分步调用Tool:LangChain通过“LLM + 本地OutputParser”的方式实现Tool的分步调用
在这里插入图片描述

首先,将用户问题交给LLM进行推理分析,并将LLM推理结果解析成要分步执行的Action列表。
然后,根据Action列表分步骤执行Tool调用,并将返回结果作为下一步执行Action的输入,继续下一步Action调用。
[图片]在这里插入图片描述

4. Memory:记忆、自定义策略

Memory的基本原理是将临时记录通过Prompt的方式加入到LLM的上下文中,如下图所示:
在这里插入图片描述

以一个自定义的Memory为例,其能做的事情,以及与LLM的协作流程如下:
在这里插入图片描述

LangChain实践总结

1. LangChain没有壁垒

没有算法壁垒、没有复杂的工程量,核心竞争力是对LLM的实际应用思想,而这些很容易被复制

2. 如何边聊天边让AI就把事情做了

根据Agent的特性不同,不是所有Agent都能做到一边聊天一边就能根据需要调用Tool完成工作,AgentType.CONVERSATIONAL_REACT_DESCRIPTION这种类型的Agent能比较好的满足需求,它的prompt中明确提示了LLM在回答问题时,哪些符合条件的问题需要用使用工具(LLM根据工具的自然语言描述来自行判断),并把结果以人类语言告知用户

在这里插入图片描述

AgentType.CONVERSATIONAL_REACT_DESCRIPTION对应的Prompt模版如下:

# flake8: noqa
PREFIX ="""Assistant is a large language model trained by OpenAI.

Assistant is designed to be able to assist with a wide range of tasks, from answering simple questions to providing in-depth explanations and discussions on a wide range of topics. As a language model, Assistant is able to generate human-like text based on the input it receives, allowing it to engage in natural-sounding conversations and provide responses that are coherent and relevant to the topic at hand.

Assistant is constantly learning and improving, and its capabilities are constantly evolving. It is able to process and understand large amounts of text, and can use this knowledge to provide accurate and informative responses to a wide range of questions. Additionally, Assistant is able to generate its own text based on the input it receives, allowing it to engage in discussions and provide explanations and descriptions on a wide range of topics.

Overall, Assistant is a powerful tool that can help with a wide range of tasks and provide valuable insights and information on a wide range of topics. Whether you need help with a specific question or just want to have a conversation about a particular topic, Assistant is here to assist.

TOOLS:
------

Assistant has access to the following tools:"""
FORMAT_INSTRUCTIONS ="""To use a tool, please use the following format:

Thought: Do I need to use a tool? Yes
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action

When you have a response to say to the Human, or if you do not need to use a tool, you MUST use the format:

Thought: Do I need to use a tool? No
{ai_prefix}: [your response here]
"""

SUFFIX ="""Begin!

Previous conversation history:
{chat_history}

New input: {input}
{agent_scratchpad}"""

应用的代码示例如下:
在这里插入图片描述

3. Tool和Memory结合可以突破上下文容量上限

在这里插入图片描述

核心在于将需要走上下文查询的场景定义清楚,通过prompt提交给LLM,最终LLM在执行ReAct流程时会根据需要调用对应的查询工具,具体演示代码如下:
在这里插入图片描述
对应的执行结果如下:
在这里插入图片描述

4. Tool调用的两种实现机制

Tool的调用有两种实现,一种是通过prompt规范输入/输出来判断,另一种是OpenAI Function机制,其中通过Prompt实现的方式更通用,也是LangChain中ReAct的主要实现方式
在这里插入图片描述

后记

关于大模型,还有一些非常深入的主题值得展开,这里篇幅所限,就当抛砖引玉,有兴趣的人可以自行去学习以下内容,个人也会在觉得有必要的时候再写一写深入一些的主题:

1. 多模态嵌入模型CLIP

利用它可以将图片向量化到与文本所在的同一个向量空间中,从而做到通过自然语言检索图片内容,例如:“放在窗台上的杯子”、“微笑的狗狗”,“秋水与长天一色”

推荐文章:
https://zhuanlan.zhihu.com/p/493489688
https://juejin.cn/post/7264503343996747830

一个推荐的开源个人项目,代码非常少,值得自己本地跑起来试试:
https://queryable.app/

2. 向量数据库

推荐自己实践使用以下SQLite-QSS

3. Llama2的运行时

通过Llama2的运行时,可以尝试去阅读Transformer的算法结构,代码只有900多行,但其中蕴含的原理非常丰富,相信你会有收获

源码地址:https://github.com/karpathy/llama2.c


本文转载自: https://blog.csdn.net/weixin_44701535/article/details/135948913
版权归原作者 TechGhost 所有, 如有侵权,请联系我们删除。

“AI大模型入门 - LangChain的剖析与实践”的评论:

还没有评论