背景
快速入门的三部曲跟家里安装防盗门的步骤是类似的.
-
- 安装门
-
- 设密码
-
- 测试一下
对应到解决方案领域的快速入门的三部曲是什么?
-
- 安装 : Install
-
- 环境设置: Env
-
- 写DEMO: Demo
那对应到LangChain的快速入门上是什么呢?
前两个步骤没差异, 关键是写DEMO上.
了解本文详细内容前, 建议先看这篇通过类比, 十分钟快速掌握LangChain的架构[1], 了解了基本的架构内容后, 回头再写DEMO, 会快很多.
今日的DEMO也主要是从Model I/O的 提示模板 以及额外的LangChain表达式入手.
DEMO包含以下内容:
-
• 使用LangChain进行设置
-
• 使用LangChain最基本和最常用的组件: 提示模板、模型和输出解析器
-
• 使用LangChain表达式语言(LECL),这是LangChain构建的协议,有助于组件链接
Step1: 安装: Install
要安装LangChain,请运行:
Pip/Conda 二选一即可
- • Pip 方式
pip install langchain
- • Conda
conda install langchain -c conda-forge
官方详细安装指南[2]
Step2: 环境设置
使用LangChain通常需要与一个或多个模型提供者、数据存储、API等进行集成。本示例将使用OpenAI的模型API。
首先,我们需要安装他们的Python包:
pip install openai
访问API需要一个API密钥,你可以通过创建一个帐户并前往这里[3]来获取。当我们获得了一个密钥之后,我们需要通过运行以下命令将其设置为环境变量:
export OPENAI\_API\_KEY="..."
如果你不想设置环境变量,你可以在初始化OpenAI LLM类时直接通过openai_api_key
命名参数传递密钥:
from langchain.llms import OpenAI
llm = OpenAI(openai\_api\_key="...")
构建应用程序
LangChain提供了许多可以用来构建语言模型应用程序的模块。这些模块可以作为简单应用程序中的独立模块使用,也可以组合在一起用于更复杂的用例。
LangChain应用程序的核心构建模块是LLMChain。它结合了三个方面:
-
• LLM/ChatModel (大语言模型/聊天模型): 语言模型是核心推理引擎。要使用LangChain,您需要了解不同类型的语言模型以及如何使用它们。
-
• Prompt Templates: 提供语言模型的指令。这控制了语言模型的输出,因此了解如何构建提示和不同的提示策略至关重要。
-
• Output Parsers: 将LLM的原始响应转换为更易处理的格式,使得在下游使用输出变得容易。
在本入门中,我们将逐个介绍这三个组件,然后介绍将它们组合在一起的LLMChain。了解这些概念将使您能够很好地使用和定制LangChain应用程序。大多数LangChain应用程序允许您配置LLM和/或使用的提示,因此了解如何利用这一点将是一个很好的帮助。
LLM/ChatModel (大语言模型/聊天模型)
LangChain中有两种类型的语言模型,称为:
-
• LLM: 这是一个以字符串作为输入并返回字符串的语言模型
-
• ChatModels: 这是一个以消息列表作为输入并返回消息的语言模型
LLM的输入/输出简单易懂 - 都是字符串。但是ChatModels呢?这里的***输入是一个Message
列表,输出是一个单独的Message
***。
什么是Message
? 基础的Message的接口的定义是BaseMessage
. 他有两个必需的属性:
-
•
content
: 消息的内容。 -
•
role
:BaseMessage
的消息的角色。
LangChain提供了几个对象,用于方便地区分不同的角色:
-
•
HumanMessage
: 来自人类/用户的BaseMessage
。 -
•
AIMessage
: 来自AI/助手的BaseMessage
。 -
•
SystemMessage
: 来自系统的BaseMessage
。 -
•
FunctionMessage
/ToolMessage
: 来自函数调用的BaseMessage
。
如果这些角色都不合适,还可以使用ChatMessage
类手动指定角色。LangChain为两者提供了一个标准接口 .invoke()
,所有LangChain表达式语言 (LCEL) 对象的通用同步调用方法:
-
•
LLM.invoke
: 接受一个字符串,返回一个字符串 -
•
ChatModel.invoke
: 接受一个BaseMessage
列表,返回一个BaseMessage
。
让我们看看如何使用这些不同类型的模型和不同类型的输入。首先,让我们导入LLM和ChatModel。
from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
llm = OpenAI()
chat_model = ChatOpenAI()
text = "What would be a good company name for a company that makes colorful socks?"
messages = [HumanMessage(content=text)]
llm.invoke(text)
# >> Feetful of Fun
chat_model.invoke(messages)
# >> AIMessage(content="Socks O'Color")
OpenAI
和ChatOpenAI
对象基本上只是配置对象。您可以使用诸如temperature
等参数对其进行初始化,并将其传递给其他对象。
Prompt template(提示模板)
大多数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?
然而,使用这些而不是原始字符串格式化的优势有几个。您可以“部分”出变量 - 例如,您可以一次只格式化某些变量。您可以将它们组合在一起,轻松地将不同的模板组合成一个单独的提示。有关这些功能的说明,请参阅提示部分[4]以获取更多详细信息。
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.", additional\_kwargs={}),
HumanMessage(content="I love programming.")
]
除了ChatMessageTemplate之外,ChatPromptTemplates还可以包括其他内容 - 有关更多详细信息,请参阅提示部分[5]。
Output parser(输出解析器)
OutputParsers将LLM的原始输出转换为可以在下游使用的格式。输出解析器有几种主要类型,包括:
-
• 将LLM的文本转换为结构化信息(例如JSON)
-
• 将ChatMessage转换为字符串
-
• 将除消息之外的其他信息(如OpenAI函数调用)转换为字符串。
有关此方面的详细信息,请参阅输出解析器部分[6]
在本入门指南中,我们将编写自己的输出解析器 - 将逗号分隔的列表转换为列表。
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")
# >> ['hi', 'bye']
用LECL进行链式调用(Composing with LCEL)
现在,我们可以将所有这些组合成一个链组件(LangChain的命名中, Chain的由来)。这个链组件将接收输入变量,将其传递给提示模板以创建提示,将提示传递给LLM,然后通过一个(可选的)输出解析器将输出传递出去。这是一种方便地将模块化逻辑捆绑在一起的方式。让我们看看它的作用!
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("colors")
# >> ['red', 'blue', 'green', 'yellow', 'orange']
如何学习AI大模型 ?
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
😝有需要的小伙伴,可以VX扫描下方二维码免费领取🆓
👉1.大模型入门学习思维导图👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
👉2.AGI大模型配套视频👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。
👉3.大模型实际应用报告合集👈
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)
👉4.大模型落地应用案例PPT👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)
👉5.大模型经典学习电子书👈
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
👉6.大模型面试题&答案👈
截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习
这份完整版的 AI 大模型学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓
