LangChain快速入门

LangChain快速入门

构建应用程序

LangChain应用程序的核心构建模块是LLMChain。

  • LLM:语言模型是核心推理引擎。要使用LangChain,需要了解不同类型的语言模型以及如何使用它们。
  • Prompt Templates:提供语言模型的指令,控制了语言模型的输出,因此了解如何构建提示和不同的提示策略至关重要。
  • Output Parsers:将LLM的原始响应转换为更易处理的格式,使得在下游使用输出变得更容易。

LLMs & ChatModels

LangChain有两种类型的语言模型

  • LLMs:以字符串作为输入并返回字符串的语言模型
  • ChatModels:以消息列表作为输入并返回消息的语言模型

LLMs的输入输出就是字符串,而ChatModels的输入是一个ChatMessage列表,输出是一个单独的ChatMessage

一个ChatMessage具有两个必需的组件:

  • content:消息的内容
  • roleChatMessage来自的实体的角色

LangChain提供了几个对象,用于方便地区区分不同的角色:

  • HumanMessage: 来自人类/用户的ChatMessage
  • AIMessage: 来自AI/助手的ChatMessage
  • SystemMessage: 来自系统的ChatMessage
  • FunctionMessage: 来自函数调用的ChatMessage

还可以使用ChatMessage类手动指定角色。

LangChain为两者提供了一个标准接口,但对于两者之间仍然具有差异。

LangChain提供的标准接口有两种方法:

  • predict: 接受一个字符串,返回一个字符串
  • predict_messages: 接受一个消息列表,返回一个消息。

提示模板

​ 大多数LLM应用程序不会直接将用户输入传递到LLM中。通常,它们会将用户输入添加到一个更大的文本片段中,称为提示模板,该模板提供了有关特定任务的附加上下文。

​ PromptTemplates正是为此而设计的,它们将用户输入转化为完全格式化的提示的所有逻辑绑定在一起。

例如:

from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("What is a good name for a company that makes {product}?")
prompt.format(product="colorful socks")

输出得到:What is a good name for a company that makes colorful socks?

其优势是,可以“部分”出变量,即一次格式化某些变量,将它们组合在一起,将不同的模板组合成一个单独的提示。

​ PromptTemplates还可以用于生成消息列表。在这种情况下,提示不仅包含有关内容的信息,还包含每个消息(其角色、其在列表中的位置等) 在这里,最常见的是ChatPromptTemplate是ChatMessageTemplate的列表。每个ChatMessageTemplate包含了格式化该ChatMessage的指令 - 其角色,以及其内容。

例如:

from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)

template = "You are a helpful assistant that translates {input_language} to {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

chat_prompt.format_messages(input_language="English", output_language="French", text="I love programming.")

输出:

[SystemMessage(content='You are a helpful assistant that translates English to French.'),
 HumanMessage(content='I love programming.')]

输出解析器

OutputParsers将LLM的原始输出转换为可以在下游使用的格式。输出解析器有几种主要类型,包括:

  • 将LLM的文本转换为结构化信息(例如JSON)
  • 将ChatMessage转换为字符串
  • 将除消息之外的其他信息(如OpenAI函数调用)转换为字符串。

LLMChain

​ 将所有这些组合成一个链组件,这个链组件将接收输入变量,将其传递给提示模板以创建提示,将提示传递给LLM,然后通过一个输出解析器将输出传递出去。

from langchain_openai import ChatOpenAI
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser

class CommaSeparatedListOutputParser(BaseOutputParser):
    """将 LLM 调用的输出解析为逗号分隔的列表。"""

    def parse(self, text: str):
        """解析 LLM 调用的输出。"""
        return text.strip().split(", ")

template = "您是一位有用的助手,可以生成逗号分隔的列表。用户将传入一个类别,您应该在该类别中生成 5 个对象,并以逗号分隔列表形式。仅返回逗号分隔的列表,仅此而已。"
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(
    llm = ChatOpenAI(),
    prompt=chat_prompt,
    output_parser=CommaSeparatedListOutputParser()
)
chain.run("colors")

输出:

['red', 'blue', 'green', 'yellow', 'orange']
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值