当前位置: 首页 > news >正文

Langchain入门介绍

[声明]

本文参考:Langchain官方文档

什么是LangChain?

LangChain 是一个开源的、用于开发由大型语言模型 (LLM) 驱动的应用程序的框架。它的核心目标是将强大的 LLM(如 GPT-4, Claude, Llama 等)与外部数据源、计算资源和工具连接起来,从而构建更复杂、更有用、更具交互性的 AI 应用。

LangChain由 Harrison Chase 创建于2022年10月,它是围绕LLMs(大语言模型)建立的一个框架,LLMs使用机器学习算法和海量数据来分析和理解自然语言,GPT3.5、GPT4是LLMs最先进的代表,国内百度的文心一言、阿里的通义千问也属于LLMs。LangChain自身并不开发LLMs,它的**核心理念是为各种LLMs实现通用的接口,把LLMs相关的组件“链接”在一起,简化LLMs应用的开发难度,方便开发者快速地开发复杂的LLMs应用。**LangChain目前有两个语言的实现:python和Nodejs。


Langchain的核心组件

一个LangChain的应用是需要多个组件共同实现的,LangChain主要支持6种组件:

  • Models:模型,各种类型的模型和模型集成,比如GPT-4
  • Prompts:提示,包括提示管理、提示优化和提示序列化
  • Memory:记忆,用来保存和模型交互时的上下文状态
  • Indexes:索引,用来结构化文档,以便和模型交互
  • Chains:链,一系列对各种组件的调用
  • Agents:代理,决定模型采取哪些行动,执行并且观察流程,直到完成为止

Models组件介绍

现在市面上的模型多如牛毛,各种各样的模型不断出现,LangChain模型组件提供了与各种模型的集成,并为所有模型提供一个精简的统一接口。

LangChain目前支持三种类型的模型:LLMs、Chat Models(聊天模型)、Embeddings Models(嵌入模型).

  • LLMs: 大语言模型接收文本字符作为输入,返回的也是文本字符.

    LLMs (legacy):Older language models that take a string as input and return a string as output.

  • Chat Models(聊天模型): 基于LLMs, 不同的是它接收聊天消息(一种特定格式的数据)作为输入,返回的也是聊天消息.

  • Embedding Models(文本嵌入模型): 文本嵌入模型接收文本作为输入, 返回的是浮点数列表.

LangChain支持的三类模型,它们的使用场景不同,输入和输出不同,开发者需要根据项目需要选择相应。

LLMs (大语言模型)

LLMs使用场景最多,常用大模型的下载库:https://huggingface.co/models


Chat Models (聊天模型)

聊天消息包含下面几种类型,使用时需要按照约定传入合适的值:

  • AIMessage: 用来保存LLM的响应,以便在下次请求时把这些信息传回给LLM.
  • HumanMessage: 发送给LLMs的提示信息,比如“实现一个快速排序方法”.
  • SystemMessage: 设置LLM模型的行为方式和目标。你可以在这里给出具体的指示,比如“作为一个代码专家”,或者“返回json格式”.
  • ChatMessage: ChatMessage可以接收任意形式的值,但是在大多数时间,我们应该使用上面的三种类型.

LangChain支持的常见聊天模型有:

模型描述
ChatOpenAIOpenAI聊天模型
AzureChatOpenAIAzure提供的OpenAI聊天模型
PromptLayerChatOpenAI基于OpenAI的提示模版平台
在 Chat Model上使用提示词模板

提示模板就是把一些常见的提示整理成模板,用户只需要修改模板中特定的词语,就能快速准确地告诉模型自己的需求。

Embeddings Models(嵌入模型)

将字符串作为输入,返回一个浮动数的列表。在NLP中,Embedding的作用就是将数据进行文本向量化。

Embeddings Models可以为文本创建向量映射,这样就能在向量空间里去考虑文本,执行诸如语义搜索之类的操作,比如说寻找相似的文本片段。

不同的 Embedding 模型对多语言支持和文本类型有不同的特点:

  • 多语言支持
    • text-embedding-ada-002:支持多种语言,但对中文等亚洲语言的支持相对较弱
    • bge-large-zh:对中文有很好的支持
    • multilingual-e5-large:对多语言都有较好的支持
  • 文本类型适用性
    • 代码文本:建议使用专门的代码 Embedding 模型,如 CodeBERT
    • 通用文本:可以使用 text-embedding-ada-002bge-large-zh
    • 专业领域文本:建议使用该领域的专门模型

Prompts

Prompt是指当用户输入信息给模型时加入的提示,这个提示的形式可以是zero-shot或者few-shot等方式,目的是让模型理解更为复杂的业务场景以便更好的解决问题。

提示模板:如果你有了一个起作用的提示,你可能想把它作为一个模板用于解决其他问题,LangChain就提供了PromptTemplates组件,它可以帮助你更方便的构建提示。


Agents (代理)

在 LangChain 中 Agents 的作用就是根据用户的需求,来访问一些第三方工具(比如:搜索引擎或者数据库),进而来解决相关需求问题。

为什么要借助第三方库?

因为大模型虽然非常强大,但是也具备一定的局限性,比如不能回答实时信息、处理数学逻辑问题仍然非常的初级等等。因此,可以借助第三方工具来辅助大模型的应用。

几个重要概念:

Agent代理:

  • 制定计划和思考下一步需要采取的行动。
  • 负责控制整段代码的逻辑和执行,代理暴露了一个接口,用来接收用户输入。
  • LangChain提供了不同类型的代理(主要罗列一下三种):
    • zero-shot-react-description: 代理使用ReAct框架,仅基于工具的描述来确定要使用的工具.此代理使用 ReAct 框架确定使用哪个工具 仅基于工具的描述。缺乏 会话式记忆。
    • structured-chat-zero-shot-react-description:能够使用多输入工具,结构化的参数输入。
    • conversational-react-description:这个代理程序旨在用于对话环境中。提示设计旨在使代理程序有助于对话。 它使用ReAct框架来决定使用哪个工具,并使用内存来记忆先前的对话交互。

Tool工具:

  • 解决问题的工具
  • 第三方服务的集成,例如计算、网络(谷歌、bing)、代码执行等等

Toolkit工具包:

  • 用于完成特定目标所需要的工具组,比如create_csv_agent 可以使用模型解读csv文件。

AgentExecutor代理执行器:

  • 它将代理和工具列表包装在一起, 负责迭代运行代理的循环,直到满足停止的标准。
  • 这是实际调用agent并执行其选择的动作部分。

Memory

大模型本身不具备上下文的概念,它并不保存上次交互的内容,ChatGPT之所以能够和人正常沟通对话,因为它进行了一层封装,将历史记录回传给了模型。

因此 LangChain 也提供了Memory组件, Memory分为两种类型:短期记忆和长期记忆。短期记忆一般指单一会话时传递数据,长期记忆则是处理多个会话时获取和更新信息。


Indexes (索引)

Indexes组件的目的是让LangChain具备处理文档处理的能力,包括:文档加载、检索等。注意,这里的文档不局限于txt、pdf等文本类内容,还涵盖email、区块链、视频等内容。

Indexes组件主要包含类型:

  • 文档加载器
  • 文本分割器
  • VectorStores
  • 检索器

http://www.mrgr.cn/news/100047.html

相关文章:

  • 【金仓数据库征文】金仓数据库:开启未来技术脑洞,探索数据库无限可能
  • 5.6 Microsoft Semantic Kernel:专注于将LLM集成到现有应用中的框架
  • 【黑马 微服务面试篇】
  • AI之FastAPI+ollama调用嵌入模型OllamaBgeEmbeddings
  • 【torch\huggingface默认下载路径修改】.cache/torch/ 或 .cache/huggingface
  • 金仓数据库征文-政务领域国产化数据库更替:金仓 KingbaseES 应用实践
  • General Spark Operations(Spark 基础操作)
  • 一天学完Servlet!!!(万字总结)
  • 杨立昆:卷积神经网络创始者,人工智能领路人
  • redis特性及应用场景
  • Android killPackageProcessesLSP 源码分析
  • RabbitMQ 基础核心概念详解
  • Ubuntu22学习记录
  • 【数据可视化-22】脱发因素探索的可视化分析
  • TensorFlow深度学习实战(14)——循环神经网络详解
  • Ubuntu / WSL 安装pipx
  • 【Linux】基本指令(下)
  • pycharm2024.3.2项目解释器选择问题
  • docker 配置代理
  • 面试之消息队列