【LangChain系列 1】 LangChain初探

原文链接:【LangChain系列 1】LangChain初探https://mp.weixin.qq.com/s/9UpbM84LlsHOaMS7cbRfeQ

本文速读:

  • LangChain是什么

  • LangChain初探

    • 环境准备

    • LLMs

    • Prompt Templates

    • Output Parser

    • 第一个LLMChain应用

01 LangChain是什么


LangChain是一个大语言模型的应用开发框架,在LangChain在基础上,我们可以快速开发AI应用。

02 LangChain初探


环境准备

  • openai api key

注册一个openai开发者帐号,然后可以生成key,获取key来调用open ai的接口,调用接口会消耗费用,帐号中有免费的5美金可以使用。

  • python开发环境

可以使用conda,也可以直接使用python 3,我使用的是python 3.8.9版本。

  • 安装openai和langchain

pip install openaipip install langchain

LLMs

LangChain中有LLMs和ChatModels两种语言模型:

  • LLMs:输入一个字符串,然后返回一个字符串。

  • ChatModels:输入一连串Message,比如说一连串对话,以此为上下评文,然后输入一条Message。

两者的区别是:LLMs偏向于问与答,ChatModel更偏向于对话的场景。

Message包含content和role两个部分,LangChain根据role在不同分为四种Message:

  • HumanMessage:代表人类/用户的message。

  • AIMessage:代表AI的message。

  • SystemMessage:代表系统的message。

  • FunctionMessage:代表函数调用的message。

下面我们看一个简单的例子怎么使用LLMs和ChatModels。

1. 输入一个字符串

from langchain.llms import OpenAIfrom langchain.chat_models import ChatOpenAI

text = "What would be a good company name for a company that makes colorful socks?"

llm = OpenAI()chat_model = ChatOpenAI()
llm.predict(text)
chat_model.predict(text)

2. 输入一个Message

from langchain.llms import OpenAIfrom langchain.chat_models import ChatOpenAI

text = "What would be a good company name for a company that makes colorful socks?"
messages = [HumanMessage(content=text)]

llm = OpenAI()
chat_model = ChatOpenAI()

llm.predict_messages(messages)
chat_model.predict_messages(messages)

Prompt Templates

一般来讲,我们不会将用户的输入或者问题直接传递给LLM应用,而是将它放到一个固定的上下文中,方便LLM应用理解提出的问题,从而给出更准确的回答,这段上下文就是我们所说在prompt templates。

例如:

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")

prompt templates的作用就是把product这个变量抽离出来,我们可以根据需要赋予它不同的值,这样就更加灵活。

prompt templates除了可以用于字符串,它还可以用于Message,例如:

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.")

上述chat_prompt相当于:

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

Output Parser

output parser的作用就是将LLMs的输出进行解析处理,最终返回给我们需要的格式,例如:

  • 将文本转换为json

  • 将Message转换为字符串

  • 将其它信息转换为字符串

下面这个例子就是将LLM返回的一个字符串转换为以逗号为分隔的列表。

from langchain.schema import BaseOutputParser

class CommaSeparatedListOutputParser(BaseOutputParser):
    """Parse the output of an LLM call to a comma-separated list."""


    def parse(self, text: str):
        """Parse the output of an LLM call."""
        return text.strip().split(", ")

CommaSeparatedListOutputParser().parse("hi, bye")

第一个LangChain应用

介绍完LangChain应用所需要的最基础的组件后,我们可以开启Hello World之旅了,开始写第一个最简单的LangChain应用。

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

class CommaSeparatedListOutputParser(BaseOutputParser):
    """Parse the output of an LLM call to a comma-separated list."""


    def parse(self, text: str):
        """Parse the output of an LLM call."""
        return text.strip().split(", ")

template = """You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.
ONLY return a comma separated list, and nothing more."""
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("fruits")

以上就是本篇的全部内容,我们下一篇再见。

 更多最新文章,请关注公众号:大白爱爬山

你可能感兴趣的:(LangChain,langchain,AI应用开发,大模型)