LangChain是一个开源的Python AI应用开发框架,它提供了构建基于大模型的AI应用所需的模块和工具。
通过LangChain,开发者可以轻松地与大模型(LLM)集成,完成文本生成、问答、翻译、对话等任务。
LangChain降低了AI应用开发的门槛,让任何人都可以基于LLM构建属于自己的创意应用。
快速入门:https://www.alang.ai/langchain/101/
参考教程:https://liaokong.gitbook.io/llm-kai-fa-jiao-cheng
发展版本:https://github.com/langchain-ai/langchain/releases
官方文档:https://python.langchain.com/v0.2/docs/how_to/
LangChain特性
LLM和提示(Prompt):
LangChain对所有LLM大模型进行了API抽象,统一了大模型访问API,同时提供了Prompt提示模板管理机制。
链(Chain):
LangChain对一些常见的场景封装了一些现成的模块。
例如:基于上下文信息的问答系统,自然语言生成SQL查询等等。
- 因为实现这些任务的过程就像工作流一样,一步一步的执行,所以叫链(Chain)。
LCEL:
LangChain Expression Language(LCEL),LangChain新版本的核心特性,用于解决工作流编排问题。
通过LCEL表达式,我们可以灵活的自定义AI任务处理流程,也就是灵活自定义链(Chain)。
数据增强生成(RAG):
因为大模型(LLM)不了解新的信息,无法回答新的问题,所以可以将新的信息导入到LLM,用于增强LLM生成内容的质量。
这种模式叫做RAG(Retrieval Augmented Generation)。
Agents:
是一种基于大模型(LLM)的应用设计模式,利用LLM的自然语言理解和推理能力(LLM作为大脑)。
- 根据用于的需求自动调用外部系统、设备共同去完成任务。
例如:用户输入明天请假一天,大模型(LLM)自动调用请假系统,发起一个请假申请。
模型记忆(Memory):
让大模型记住之前的对话内容,这种能力成为模型记忆(Memory)。
LangChain任务处理流程
LangChain提供一套提示词模板管理工具,负责处理提示词,然后传递给大模型处理,最后处理大模型返回的结果。
LangChan对大模型的封装主要包括 LLM 和 Chat Model 两张类型:
- LLM:问答模型,模型接收一个文本输入,然后返回一个文本结果。
- Chat Model:对话模型,接受一组对话消息,然后返回对话消息,类似聊天一样。
安装LangChain
pip install langchain
pip install langchain-openai
使用LLM
使用LLM来回答问题非常简单,可以直接调用LLM的
invoke
方法,并传入问题作为参数。此外,还可以通过提示词模板(Prompt Template)生成提示词,用于向模型(LLM)发送指令。
下面演示了如何构建一个简单的LLM链。
# 引入langchain聊天专用提示词模板
from langchain_core.prompts import ChatPromptTemplate
# 引入langchain openai sdk
from langchain_openai import ChatOpenAI
# 如果是官方URL,使用以下即可
llm = ChatOpenAI()
# 根据message 定义提示词模板
# 这里以对话模型的消息格式为例子,不熟悉openai对话模型的话,可以参考官方文档
# 下面消息模板,定义两条消息,system消息告诉模型扮演什么角色,user消息代表用户输入的问题
prompt = ChatPromptTemplate.from_messages([
("system", "你是世界级的技术专家"),
("user", "{input}")
])
# 通过langchain的链式调用,生成一个chain
# 基于LCEL表达式构建LLM链,lcel语法类似linux的pipeline语法,从左到右顺序执行
# 下面编排了一个简单的工作流,首先执行prompt完成提示词模板(prompt template)格式化处理,然后将格式化后的结果传递给llm模型
chain = prompt | llm
result = chain.invoke({"input": "帮我写一篇关于AI的技术文章,100字"})
print(result)
输出转换
LLM的输出通常是一条信息,为了更方便处理结果,可以将消息转换为字符串。
下面展示如何将LLM的输出消息转换为字符串。
# 字符串输出解析器
from langchain_core.output_parsers import StrOutputParser
# 引入langchain聊天专用提示词模板
from langchain_core.prompts import ChatPromptTemplate
# 引入langchain openai sdk
from langchain_openai import ChatOpenAI
llm = ChatOpenAI()
# 根据message 定义提示词模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是世界级的技术专家"),
("user", "{input}")
])
# 创建一个字符串输出解析器
out_parse = StrOutputParser()
# 将输出解析器添加到LLM链中,跟前面的例子区别就是工作流编排,最后一步将LLM模型输出的结果传递给out_parse
chain = prompt | llm | out_parse
result = chain.invoke({"input": "帮我写一篇关于AI的技术文章,100字"})
print(result)