当前位置:   article > 正文

LangChain学习——核心组件

langchain

        LangChain是一个用于大语言模型(LLM)应用开发的框架,它简化了LLM应用的开发难度,帮助开发者快速构建复杂的LLM应用。

一、LangChain 库简介

LangChain 包的主要价值主张是:

  1. 组件:用于处理语言模型的可组合工具和集成。无论你是否使用 LangChain 框架的其余部分,组件都是模块化的,易于使用
  2. 现成的链:用于完成高级任务的组件的内置组合

现成的链使得开始变得容易。组件使得定制现有链和构建新链变得容易。

LangChain 库本身由几个不同的包组成。

  • langchain-core:基础抽象和 LangChain 表达式语言。
  • langchain-community:第三方集成。
  • langchain:构成应用程序认知架构的链、代理和检索策略。

 二、LangChain的核心组件

        1、模型输入输出(Model I/O)

        这是与各种大语言模型进行交互的基本组件。它允许开发者管理提示(prompt),通过通用接口调用语言模型,并从模型输出中提取信息。简单来说,这个组件负责与大语言模型“对话”,将我们的请求传递给模型,并接收模型的回复。

  • 提示 prompts : 将模型输入模板化、动态选择和管理
    • PromptTemplate 可以在模板中自定义变量
  1. from langchain.prompts import PromptTemplate
  2. template = PromptTemplate.from_template("给我讲个关于{subject}的故事")
  3. print(template.format(subject='星座'))
  • ChatPromptTemplate 用模板表示的对话上下文
  1. from langchain.prompts import (
  2. ChatPromptTemplate,
  3. HumanMessagePromptTemplate,
  4. SystemMessagePromptTemplate,
  5. )
  6. from langchain_openai import ChatOpenAI
  7. template = ChatPromptTemplate.from_messages(
  8. [
  9. SystemMessagePromptTemplate.from_template(
  10. "你是{product}的客服助手。你的名字叫{name}"),
  11. HumanMessagePromptTemplate.from_template("{query}"),
  12. ]
  13. )
  14. llm = ChatOpenAI()
  15. prompt = template.format_messages(
  16. product="手机客服",
  17. name="小花",
  18. query="你是谁"
  19. )
  20. ret = llm.invoke(prompt)
  21. print(ret.content)
  • MessagesPlaceholder 把多轮对话变成模板
  1. from langchain.prompts import (
  2. ChatPromptTemplate,
  3. HumanMessagePromptTemplate,
  4. MessagesPlaceholder,
  5. )
  6. from langchain_core.messages import AIMessage, HumanMessage
  7. human_prompt = "Translate your answer to {language}."
  8. human_message_template = HumanMessagePromptTemplate.from_template(human_prompt)
  9. chat_prompt = ChatPromptTemplate.from_messages(
  10. [MessagesPlaceholder(variable_name="conversation"), human_message_template]
  11. )
  12. human_message = HumanMessage(content="Who is Elon Musk?")
  13. ai_message = AIMessage(
  14. content="Elon Musk is a billionaire entrepreneur, inventor, and industrial designer"
  15. )
  16. messages = chat_prompt.format_prompt(
  17. # 对 "conversation" 和 "language" 赋值
  18. conversation=[human_message, ai_message], language="中文"
  19. )
  20. result = llm.invoke(messages)
  21. print(result.content)
  • 语言模型 models : 通过常见接口调用语言模型
    • LLMs: 输入一个文本字符串并返回一个文本字符串的模型
  1. from langchain_openai import ChatOpenAI
  2. llm = ChatOpenAI(model="gpt-3.5-turbo") # 默认是gpt-3.5-turbo
  3. response = llm.invoke("你是谁")
  4. print(response.content)
  • 聊天模型: 由语言模型支持的模型,接受一个聊天消息列表作为输入并返回一个聊天消息
  1. from langchain.schema import (
  2. AIMessage,
  3. HumanMessage,
  4. SystemMessage
  5. )
  6. messages = [
  7. HumanMessage(content="今天天气怎么样?"),
  8. AIMessage(content="已收到您的问题,正在查询..."),
  9. SystemMessage(content="今天天气晴朗,气温适宜。")
  10. ]
  11. ret = llm.invoke(messages)
  12. print(ret)

Class hierarchy:

BaseLanguageModel --> BaseLLM --> LLM -->  Examples: AI21, HuggingFaceHub, OpenAI
                  --> BaseChatModel -->    Examples: ChatOpenAI, ChatGooglePalm

LangChain 内置的 OutputParser 包括:

  • ListParser
  • DatetimeParser
  • EnumParser
  • JsonOutputParser
  • PydanticParser
  • XMLParser

等等

        2、数据连接(Data Connection)

        大语言模型的知识来源于其训练数据集,但并不包含用户信息或最新时事。数据连接模块提供了加载、转换、存储和查询数据的组件,使得大语言模型能够在训练数据集的基础上,利用自有数据中的信息来回答问题。这样,模型就能给出更有用的答案。

  • Document Loaders:各种格式文件的加载器
  • Document Transformers:对文档的常用操作,如:split, filter, translate, extract metadata, etc
  • Text Embedding Models:文本向量化表示,用于检索等操作(啥意思?别急,后面详细讲)
  • Verctorstores: (面向检索的)向量的存储
  • Retrievers: 向量的检索
        3、链(Chains)

        对于复杂的需求,可能需要将多个大语言模型或其他组件进行链式组合。链允许将多个组件组合在一起,创建一个连贯的应用程序。例如,可以创建一个链,接受用户输入,对其进行格式化,然后将格式化后的提示词传递给大语言模型。

  • 内置 Chain,比如LLMChain(基本的链类型)、SequentialChain(处理单个输入且单个输出的情况)、Router Chain(同一输入router到不同的输出)

简单的LLMChain形式:

  1. from langchain.prompts import PromptTemplate
  2. from langchain.llms import OpenAI
  3. llm = OpenAI(temperature=0.9)
  4. prompt = PromptTemplate(
  5. input_variables=["product"],
  6. template="What is a good name for a company that makes {product}?",
  7. )
  8. from langchain.chains import LLMChain
  9. chain = LLMChain(llm=llm, prompt=prompt)
  10. # Run the chain only specifying the input variable.
  11. print(chain.run("colorful socks"))

LLMChain 中使用聊天模型

  1. from langchain.chat_models import ChatOpenAI
  2. from langchain.prompts.chat import (
  3. ChatPromptTemplate,
  4. HumanMessagePromptTemplate,
  5. )
  6. human_message_prompt = HumanMessagePromptTemplate(
  7. prompt=PromptTemplate(
  8. template="What is a good name for a company that makes {product}?",
  9. input_variables=["product"],
  10. )
  11. )
  12. chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt])
  13. chat = ChatOpenAI(temperature=0.9)
  14. chain = LLMChain(llm=chat, prompt=chat_prompt_template)
  15. print(chain.run("colorful socks"))

        LCEL可以实现:

        1)配置运行时变量:https://www.wpsshop.cn/w/我家自动化/article/detail/1009519

推荐阅读
相关标签
  

闽ICP备14008679号