LangChain核心模块 Model I/O——相关概念

本文介绍了LangChain中两种主要模型(LLMs和ChatModels)的特点,强调了它们在输入输出架构上的差异,以及如何正确使用提示模板和输出解析器。特别关注了提示策略对不同模型的影响,如OpenAI模型的XML和JSON偏好,以及如何适配不同类型的输出内容。
摘要由CSDN通过智能技术生成

Concepts

Models

LangChain 集成的模型主要有两种类型:LLMs 和Chat Models。它们由它们的输入和输出类型定义。它们由它们的输入和输出类型定义。

  • LLMs

    LangChain中的LLMs指的是纯文本补全模型,它们包装的 API 将字符串提示作为输入并输出字符串完成。

  • Chat Models

    Chat Models通常由LLMs支持,但专门针对对话进行了调整。最重要的是,它们的API使用与纯文本完成模型不同的接口。不再使用单个字符串,而是将聊天消息列表作为输入,并返回 AIMessage作为输出。

  • Considerations 注意事项

    这两种API模型具有截然不同的输入和输出架构,这意味着与他们互动的最佳方式可能会完全不同。尽管 LangChain 可以互换对待它们,但这并不意味着您应该这样做。特别是,LLMs 与 ChatModels 的提示策略可能会有很大不同。这意味着您需要确保您使用的提示是针对您正在使用的模型类型设计的。

    不同的模型有不同的最佳提示策略。例如,Anthropic 的模型最适合使用 XML,而 OpenAI 的模型最适合使用 JSON。这意味着用于一种模型的提示可能不会转移到其他模型。LangChain 提供了很多默认提示,但不能保证这些提示能够很好地配合您所使用的模型,大多数提示在 OpenAI 上都能很好地工作,但没有在其他模型上进行过大量测试。

Messages

ChatModels将消息列表作为输入并返回消息。所有的消息都有一个rolecontent属性,role表示这条消息的发送者。LangChain针对不同的角色有不同的消息类别。content表示这条消息的内容。

  • 字符串(大部分模型)
  • 字典列表(用于多模式输入,其中字典包含有关该输入类型和该输入位置的信息)

此外,消息还有一个additional_kwargs属性,用来传递有关消息的附加信息,主要用于特定于提供者而非通用的输入参数。最著名的例子是 OpenAI 的 function_call

  • HumanMessage

    来自用户的消息,通常仅由内容组成

  • AIMessage

    来自模型的消息,可能包含additional_kwargs

  • SystemMessage

    一条系统消息,只有部分模型支持此功能,告诉模型如何表现,通常仅包含内容

  • FunctionMessage

    表示函数调用的结果,除了rolecontent,还有一个name参数,该参数传达为产生此结果而调用的函数的名称

  • ToolMessage

    表示工具调用的结果。与FunvtionMessage不同,是为了匹配OpenAI的函数和工具消息类型。除了rolecontent,该消息有一个 tool_call_id 参数,该参数将调用的 id 传达给被调用以产生此结果的工具。

Prompts

语言模型的输入通常称为提示。通常,应用程序中的用户输入并不是模型的直接输入。相反,它们的输入会以某种方式进行转换,以生成进入模型的字符串或消息列表。接受用户输入并将其转换为最终字符串或消息的对象称为“提示模板(Prompt Templates)”。

  • PromptValue

    ChatModels 和 LLMs 采用不同的输入类型。 PromptValue 是一个设计为可在两者之间相互操作的类。它有一个要转换为字符串的方法(与 LLM 一起使用)和另一个要转换为消息列表的方法(与 ChatModel 一起使用)。

  • PromptTemplate

    由模板字符串组成,然后使用用户输入格式化该字符串以生成最终字符串。

  • MessagePromptTemplate

    由一条模板消息(表示特定角色)和一个 PromptTemplate 组成。然后,此 PromptTemplate 将根据用户输入进行格式化,以生成成为此消息的最终字符串content

    • HumanMessagePromptTemplate

      生成 HumanMessage 的 MessagePromptTemplate。

    • AIMessagePromptTemplate

      生成 HumanMessage 的 MessagePromptTemplate。

    • SystemMessagePromptTemplate

      生成 SystemMessage 的 MessagePromptTemplate。

  • MessagesPlaceholder 消息占位符

    通常提示的输入可以是消息列表。这需要使用 MessagesPlaceholder,这些对象由variable_name参数参数化,与该variable_name值具有相同值的输入应该是消息列表。

  • ChatPromptTemplate

    由 MessagePromptTemplates 或 MessagePlaceholders 的列表组成,然后根据用户输入对这些内容进行格式化以生成最终的消息列表。

Output Parsers

模型的输出是字符串或消息。通常,字符串或消息包含以供下游使用的特定格式格式化的信息(例如,逗号分隔列表或 JSON blob)。输出解析器负责接收模型的输出并将其转换为更可用的形式。这些通常适用于content输出消息的值,但有时也适用于additional_kwargs字段中的值。

  • StrOutputParser Str输出解析器

    这是一个简单的输出解析器,仅将语言模型(LLM 或 ChatModel)的输出转换为字符串。如果模型是 LLM(输出一个字符串),它只会传递该字符串。如果输出是 ChatModel(输出消息),则它会传递.content消息的属性。

  • OpenAI Functions Parsers OpenAI函数解析器

    有一些解析器专门用于处理 OpenAI 函数调用。它们获取 function_callarguments 参数(位于additional_kwargs 内部)的输出并使用它们,很大程度上忽略内容。

  • Agent Output Parsers Agent输出解析器

    Agent是使用语言模型来确定要采取哪些步骤的系统。因此,需要将语言模型的输出解析为某种可以表示要采取的操作(如果有)的模式AgentOutputParsers 负责获取原始 LLM 或 ChatModel 输出并将其转换为该模式。这些输出解析器内部的逻辑可能会有所不同,具体取决于所使用的模型和提示策略。

  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值