基于大型语言模型(LLM)的应用程序开发新手教程:快速上手 Langchain

介绍

我们生活在一个大型语言模型(LLM)正在崛起的时代。现在,当我们听到 LLM 时,首先想到的是 OpenAI 的 ChatGPT。现在,您是否知道 ChatGPT 不完全是一个 LLM,而是一个在 GPT 3.5 和 GPT 4 等 LLM 模型上运行的应用程序?我们可以通过提示 LLM 来非常快速地开发 AI 应用程序。但是,有一个限制。应用程序可能需要在 LLM 上多次提示,这涉及多次编写粘附代码。这个限制可以通过使用 LangChain 轻松克服。

这篇文章是关于 LangChain 及其应用的。我假设您对 ChatGPT 作为一个应用程序有一定的了解。 

基于大型语言模型(LLM)的应用程序开发新手教程:快速上手 Langchain_第1张图片

什么是 LangChain?

由 Harrison Chase 创建的 LangChain 是一个开源框架,支持由语言模型驱动的应用程序开发。有两个包,即。Python 和 JavaScript(TypeScript),专注于组合和模块化。

为什么使用 LangChain?

当我们使用 ChatGPT 时,LLM 会在内部直接调用 OpenAI 的 API。通过 LangChain 进行的 API 调用是使用提示、模型和输出解析器等组件进行的。LangChain 简化了使用 AI 模型工作和构建的艰巨任务。它通过两种方式执行此操作:

  1. 集成:文件、API 数据和其他应用程序等外部数据正在被带到 LLM。

  2. 机构:通过决策促进 LLM 与其环境之间的互动。

通过组件、定制链、速度和社区,LangChain 有助于在构建复杂的基于 LLM 的应用程序时避免摩擦点。

LangChain 的组件

LangChain 有3个主要组件。

  1. 语言模型:公共接口用于调用语言模型。LangChain 为以下类型的模型提供集成:

    ● LLM:在这里,模型将文本字符串作为输入并返回文本字符串。

    ● 聊天模型:在这里,模型将聊天消息列表作为输入并返回聊天消息。语言模型支持这些类型的模型。

  2. 提示:帮助构建模板,并启用模型输入的动态选择和管理。它是用户传递的一组指令,用于指导模型生成一致的基于语言的输出,例如回答问题、完成句子、编写摘要等。

  3. 输出解析器:从模型输出中取出信息。它有助于获取更多结构化的信息,而不仅仅是文本作为输出。 

    基于大型语言模型(LLM)的应用程序开发新手教程:快速上手 Langchain_第2张图片

LangChain 的实际应用

让我们在 LangChain 的帮助下开始使用 LLM。

openai_api_key='sk-MyAPIKey'

现在,我们将使用 LLM 的具体细节来理解 LangChain 的基本原理。 聊天消息将在开始时讨论。它具有系统、人类和 AI 的消息类型。其中每个角色都是:

  1. 系统 – 指导 AI 的有用背景上下文。
  2. 人员 – 代表用户的消息。
  3. AI – 显示 AI 响应的消息。
#Importing necessary packages

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage, AIMessage
chat = ChatOpenAI(temperature=.5, openai_api_key=openai_api_key)
#temperature controls output randomness (0 = deterministic, 1 = random) 

我们已经导入了 ChatOpenAI,HumanMessage,SystemMessage 和 AIMessage。温度是定义输出随机程度的参数,范围介于 0 和 1 之间。如果温度设置为 1,则生成的输出将是高度随机的,而如果设置为 0,则输出将是最小随机的。我们将其设置为 .5。

# Creating a Chat Model

chat(
 [
 SystemMessage(content="You are a nice AI bot that helps a user figure out 
                        what to eat in one short sentence"),
 HumanMessage(content="I like Bengali food, what should I eat?")
 ]
)

在上面的代码行中,我们创建了一个聊天模型。然后,我们输入了两条消息:一条是系统消息,它将在一个简短的句子中弄清楚该吃什么,另一条是人类消息,询问用户应该吃什么孟加拉食物。AI 消息是: 

我们可以传递更多带有AI响应的聊天记录。

# Passing chat history

chat(
 [
 SystemMessage(content="You are a nice AI bot that helps a user figure out
                        where to travel in one short sentence"),
 HumanMessage(content="I like the spirtual places, where should I go?"),
 AIMessage(content="You should go to Madurai, Rameswaram"),
 HumanMessage(content="What are the places I should visit there?")
 ]
)

在上面的例子中,我们说人工智能机器人在一个简短的句子中建议旅行的地方。用户说他喜欢参观精神场所。这会向 AI 发送一条消息,表明用户打算访问马杜赖和拉梅斯瓦拉姆。然后,用户询问那里要参观的地方是什么。 

值得注意的是,它还没有告诉我去过的模特。相反,它参考历史记录以找出用户去了哪里并完美响应。

LangChain 的组件是如何工作的?

让我们看看前面讨论的 LangChain 的三个组件如何使 LLM 工作。

语言模型

第一个组件是语言模型。一组不同的模型以不同的功能支持 OpenAI API。所有这些型号都可以针对特定应用进行定制。

# Importing OpenAI and creating a model

from langchain.llms import OpenAI
llm = OpenAI(model_name="text-ada-001", openai_api_key=openai_api_key)

模型已从默认值更改为文本 ada-001。它是最快的型号是 GPT-3 系列,并且已被证明成本最低。现在,我们将向语言模型传递一个简单的字符串。

# Passing regular string into the language model

llm("What day comes after Saturday?") 

因此,我们获得了所需的输出。

下一个组件是语言模型的扩展,即聊天模型。聊天模型接收一系列消息并返回消息输出。

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage, AIMessage
chat = ChatOpenAI(temperature=1, openai_api_key=openai_api_key)

我们将温度设置为 1,以使模型更加随机。

# Passing series of messages to the model 

chat(
    [
        SystemMessage(content="You are an unhelpful AI bot that makes a joke at 
                                whatever the user says"),
        HumanMessage(content="I would like to eat South Indian food, what are some 
                                good South Indian food I can try?")
    ]
)

在这里,系统传递的信息是 AI 机器人是一个无益的机器人,并且无论用户说什么,都会开玩笑。用户正在寻求一些好的南印度食物建议。让我们看看输出。 

在这里,我们看到它在开始时抛出了一些笑话,但它确实也暗示了一些美味的南印度食物。

提示

第二个组件是提示。它充当模型的输入,很少进行硬编码。多个组件构造一个提示,一个提示模板负责构造此输入。LangChain 有助于使提示工作更容易。

# Instructional Prompt

from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003", openai_api_key=openai_api_key)

prompt = """
Today is Monday, tomorrow is Wednesday.
What is wrong with that statement?
"""

llm(prompt)

上述提示为说明型提示。让我们看看输出 

因此,它正确地拾取了错误。 提示模板类似于为 LLM 生成提示的预定义配方。说明、少数镜头示例以及给定任务的特定上下文和问题构成了模板的一部分。

from langchain.llms import OpenAI
from langchain import PromptTemplate

llm = OpenAI(model_name="text-davinci-003", openai_api_key=openai_api_key)

# Notice "location" below, that is a placeholder for another value later  

template = """
I really want to travel to {location}. What should I do there?
Respond in one short sentence
"""

prompt = PromptTemplate(
 input_variables=["location"],
 template=template,
)
final_prompt = prompt.format(location='Kanyakumari')

print (f"Final Prompt: {final_prompt}")
print ("-----------")
print (f"LLM Output: {llm(final_prompt)}")

因此,我们从一开始就导入了包。我们在这里使用的模型是 text-DaVinci-003,与 Curie,Babbage 或 Ada 相比,它可以以更好的质量,更长的输出和一致的指令完成任何语言任务。所以,现在我们已经创建了一个模板。输入变量是位置,值是 Kanyakumari。 

基于大型语言模型(LLM)的应用程序开发新手教程:快速上手 Langchain_第3张图片

输出解析器

第三个组件是输出解析器,它支持模型输出的格式。解析器是一种将模型文本输出提取为所需格式的方法。

from langchain.output_parsers import StructuredOutputParser, ResponseSchema
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003", openai_api_key=openai_api_key)
# How you would like your response structured. This is basically a fancy prompt template
response_schemas = [
    ResponseSchema(name="bad_string", description="This a poorly formatted user input string"),
    ResponseSchema(name="good_string", description="This is your response, a reformatted response") 
]

# How you would like to parse your output
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
# See the prompt template you created for formatting 

format_instructions = output_parser.get_format_instructions()
print (format_instructions)

基于大型语言模型(LLM)的应用程序开发新手教程:快速上手 Langchain_第4张图片

template = """
You will be given a poorly formatted string from a user.
Reformat it and make sure all the words are spelled correctly

{format_instructions}

% USER INPUT:
{user_input}

YOUR RESPONSE:
"""

prompt = PromptTemplate(
    input_variables=["user_input"],
    partial_variables={"format_instructions": format_instructions},
    template=template 
)

promptValue = prompt.format(user_input="welcom to Gugrat!") 

print(promptValue)
llm_output = llm(promptValue)
llm_output

output_parser.parse(llm_output)

语言模型只会返回一个字符串,但如果我们需要一个 JSON 对象,我们需要解析该字符串。在上面的响应模式中,我们可以看到有 2 个字段对象,即好字符串和坏字符串。然后,我们创建了一个提示模板。

结论

在本文中,我们简要研究了 LangChain 的关键组件及其应用。一开始,我们了解了 LangChain 是什么,以及它如何简化使用 AI 模型工作和构建的艰巨任务。我们还了解了 LangChain 的关键组件,即提示(用户传递的一组指令,用于指导模型产生一致的输出)、语言模型(有助于提供所需输出的基础)和输出解析器(能够获得比文本更结构化的信息作为输出)。通过了解这些关键组件,我们为构建定制应用程序奠定了坚实的基础。

关键要点

● LLM 拥有彻底改变人工智能的能力。它为信息寻求者提供了大量机会,因为任何事情都可以被问到和回答。

● 虽然基本的 ChatGPT 提示工程预示着许多目的,但基于LangChain的LLM应用程序开发要快得多。

● 与各种AI平台的高度集成有助于更好地利用 LLM。

常见问题

问题 1.LangChain的两个软件包是什么?

Python和JavaScript是LangChain的两个包。

问题 2.什么是温度?

答:温度是定义输出随机程度的参数。其值范围为 0 到 1。

问题 3.GPT-3 系列中最快的型号是哪个?

Text-ada-001是GPT-3系列中最快的型号。

问题 4.什么是解析器?

答:解析器是一种将模型的文本输出提取为所需格式的方法。
 


非常感谢大家的阅读,小Mo在这里祝你在末来的 Python 学习职业生涯中一切顺利!

后续小Mo会不定期更新书籍、视频等学习资源,以上这些书籍资料也可通过关注微信公众号免费获取哦!

欢迎关注我们的微信公众号:MomodelAl

同时,欢迎使用「Mo A编程」微信小程序

以及登录官网,了解更多信息:Mo 人工智能教育实训平台

Mo,发现意外,创造可能

注:部分资源来源于互联网,若有侵权,请直接联系作者删除。

你可能感兴趣的:(chatgpt)