介绍
大家好,博主又来给大家分享知识了!从今天开始,博主给大家分享如何使用LangChain进行大模型应用开发。
LangChain是一个用于开发基于大语言模型(LLM)应用程序的开源框架,支持Python和JavaScript/TypeScript。目前市面上很多公司都在使用LangChain进行大模型应用开发,也有很多小伙伴在学习和研究如何使用LangChain。
在这样的背景下,博主把自己的心得分享出来,希望对大家有所帮助。好了,那么我们直接进入正题。
LangChain
LangChain是一个开源的Python Al应用开发框架,它提供了构建基于大模型的AI应用所需的模块和工具。通过LangChain, 开发者可以轻松地与大模型(LLM)集成,完成文本生成、问答、翻译、对话等任务。LangChain降低了AI应用开发的门槛,让任何人都可以基于LLM构建属于自己的创意应用。
LangChain特性
- LLM和Prompt:大模型和提示词。LangChain对所有LLM大模型进行了API抽象,统一了大模型访问API,同时提供了Prompt提示模板管理机制。
- Chain: 链。Langchain对一些常见的场景封装了一些现成的模块,例如:基于上下文信息的问答系统,自然语言生成SQL查询等等,因为实现这些任务的过程就像工作流一样,一步一步的执行,所以叫链(Chain)。
- LangChain Expression Language:简称LCEL。langchain新版本的核心特性,用于解决工作流编排问题,通过LCEL表达式,我们可以灵活的自定义AI任务处理流程,也就是灵活自定义链(Chain)。
- RAG:Retrieval Augmented Generation检索增强生成。因为大模型(LLM)不了解新的信息,无法回答新的问题,所以我们可以将新的信息导入到LLM,用于增强LLM生成内容的质量,这种模式叫做RAG模式(Retrieval Augmented Generation)。
- Agents:智能体。是一种基于大模型(LLM)的应用设计模式,利用LLM的自然语言理解和推理能力(LLM作为大脑),根据用户的需求自动调用外部系统、设备共同去完成任务。例如:用户输入“明天需要请假一天”,大模型(LLM)会自动调用请假系统,发起一个请假申请。
- Memory:模型记忆。让大模型(LLM)记住之前的对话内容,这种能力成为模型记忆(Memory)。
LangChain架构组成
LangChain框架由几个部分组成,包括:
- LangChain库:Python和JavaScript库。包含接口和集成多种组件的运行时基础,以及现成的链和代理的实现。
- LangChain模板:Langchain官方提供的一些 AI 任务模板。
- LangServe:基于FastAPI可以将Langchain定义的链(Chain),发布成为REST API。
- LangSmith:开发平台,是个云服务,支持Langchain debug、任务监控。
LangChain库(Libraries)
LangChain框架由多个开源库组成。
- langchain-core:聊天模型及其他组件的基础抽象概念。
- 集成包(例如langchain-openai、langchain-anthropic等):重要的集成功能已被拆分到轻量级的软件包中,这些软件包由LangChain团队和负责集成的开发人员共同维护。
- langchain:由链、智能体以及检索策略组成,它们构成了应用程序的认知架构。
- langchain-community:由社区维护的第三方集成功能。
- langgraph:编排框架,用于将LangChain的各个组件组合成具备持久性、流式传输及其他关键特性的、可投入生产环境的应用程序。
LangChain任务处理流程
如上图展示了LangChain的Model I/O流程。先通过提示词模板(如 “Does {x} like {y}, and why?” 这种形式)对输入(x = "foo", y = "bar" )进行格式化处理形成具体提示词 “Does foo like bar, and why?” ,接着传递给大模型(LLM 或 Chat Model),最后将大模型返回的文本结果解析成结构化数据(如 {"likes": True, "reason": "Because ..."} )。
LangChain对大模型的封装主要包括LLM和Chat Model两种类型。
- LLM-问答模型:模型接收一个文本输入,然后返回一个文本结果。
- Chat Model-对话模型:接收一组对话消息,然后返回对话消息,类似聊天消息一样。
LangChain核心概念
1. LLMs
- Large Language Models即大语言模型,LangChain封装的基础模型,模型接收一个文本输入,然后返回一个文本结果。
2. Chat Models
- 聊天模型(或者称为对话模型),与 LLMs不同,这些模型专为对话场景而设计。模型可以接收一组对话消息,然后返回对话消息,类似聊天消息一样。
3. Message
- 消息。指的是聊天模型(Chat Models)的消息内容,消息类型包括HumanMessage、 AlMessage、SystemMessage、FunctionMessage和ToolMessage等多种类型的消息。
4. Prompts
- 提示词。LangChain封装了一组专门用于提示词(Prompts)管理的工具类,方便我们格式化提示词 (Prompts)的内容。
5. Output Parsers
- 输出解析器。如上图介绍,Langchain接受大模型(LLM)返回的文本内容之后,可以使用专门的输出解析器对文本内容进行格式化。例如解析JSON、或者将LLM输出的内容转成Python对象。
6. Retrievers
- 检索器。为方便我们将私有数据导入到大模型(LLM),提高模型回答问题的质量,LangChain封装了检索器(Retrievers),方便我们加载文档数据、切割文档数据、存储和检索文档数据。
7. Vector stores
- 向量存储。为支持私有数据的语义相似搜索,LangChain支持多种向量数据库。向量存储是一种专门用于存储和检索向量数据的数据存储系统,在人工智能和机器学习领域,尤其是自然语言处理(NLP)中有着重要应用。
8. Agents
- 智能体。通常指的是以大模型(LLM)作为决策引擎,根据用户输入的任务,自动调用外部系统、硬件设备共同完成用户的任务,是一种以大模型(LLM)为核心的应用设计模式。
LangChain应用场景
LangChain是一个强大的框架,能够简化基于大语言模型(LLMs)的应用开发过程,其应用场景广泛,涵盖了多个领域:
- 智能问答系统:利用LangChain可以快速搭建智能问答系统。它能够连接大语言模型,并通过检索器(Retrievers)从各种数据源(如文档、数据库)中提取相关信息,辅助大语言模型生成更准确、更有依据的答案。例如企业内部的知识库问答系统,员工可以输入问题,系统借助LangChain调用相关知识文档并结合大语言模型给出解答;还有在线客服问答系统,为用户提供常见问题的准确回复。
- 聊天机器人:适用于开发各种聊天机器人,无论是面向客户服务的客服机器人,还是用于娱乐的闲聊机器人。LangChain的聊天模型(Chat Models)和消息管理功能(Message)可以处理对话逻辑,并且可以集成外部工具和知识源,使聊天机器人能够理解上下文并提供更智能、个性化的回复。比如智能客服机器人,能够根据用户的咨询,调用相关业务知识和对话策略进行准确回复。
- 内容创作与生成:在内容创作领域,如文章写作、故事生成、诗歌创作等方面有广泛应用。通过LangChain对提示词(Prompts)的管理和优化,可以引导大语言模型生成符合特定要求和风格的内容。例如,营销人员可以使用它来生成产品描述、广告文案;创作者可以借助其生成小说情节、剧本大纲等。
- 文档分析与处理:可以对各类文档(如学术论文、法律文件、商业报告等)进行分析和处理。通过Retrievers加载和处理文档数据,结合大语言模型对文档内容进行总结、提取关键信息、进行情感分析等。比如律师可以利用LangChain对法律文档进行分析,快速提取关键条款和案例要点;研究人员可以使用它对学术文献进行总结和分类。
- 知识图谱应用:与知识图谱相结合,LangChain能够增强知识图谱的查询和推理能力。它可以将用户的查询转化为大语言模型能够理解的形式,并从知识图谱中检索相关信息,然后通过大语言模型进行进一步的推理和解释,为用户提供更深入、更全面的知识服务。
- 教育领域应用:在教育领域,可用于开发智能辅导系统。根据学生的问题和学习情况,LangChain调用相关的学习资料和教学策略,结合大语言模型为学生提供个性化的辅导和解答;还可以用于生成练习题、评估学生作业等。
- 代码生成与辅助编程:可以辅助开发人员进行代码生成和编程。通过输入自然语言描述的编程需求,LangChain借助大语言模型生成相应的代码片段,并可以根据开发人员的反馈进行调整和优化。例如,快速生成特定功能的代码框架,或者为代码添加注释和文档说明。
- 多模态应用:随着多模态技术的发展,LangChain可以与图像、音频等其他模态的数据处理技术相结合。例如,在智能交互系统中,用户可以通过语音输入问题,系统利用LangChain处理语音转文字后的文本,并结合图像识别等技术提供更丰富的回答和交互体验。
LangChain快速入门
LangChain安装
要安装LangChain,可以使用pip命令进行安装。以下是安装LangChain的步骤:
pip install langchain
如果要使用OpenAI的LLM,安装命令为(pip不仅会安装LangChain库的核心部分,还会安装与使用OpenAI模型相关的所有必需依赖项):
pip install langchain[openai]
注意:请大家确保安装的Python版本为3.10或更高版本。我们可以从Python官网地址:Welcome to Python.org下载并安装。
若使用OpenAI的LLM,必须要设置OpenAI API Key,否则运行代码会报错。
第一种方式为:在环境变量->系统变量->新建系统变量,变量名称为OPENAI_API_KEY,变量值为你自己的OpenAI API Key。操作完成后要重启电脑,该环境变量才能生效。
第二种方式为:在上述Pyhon代码中将os.environ["OPENAI_API_KEY"]这行代码取消注释,等号右边输入你的OpenAI API Key。
虽然两种方法都可行,但是博主并不推荐第二种方式,因为当别人获取到你的代码就知道你的OpenAI API Key是多少了。
上述步骤安装完成后,使用代码进行测试:
测试代码
import os
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage
# os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY" # 如果已设置OPENAI_API_KEY环境变量,此步骤可跳过。
chat_model = ChatOpenAI(model_name="gpt-3.5-turbo")
# 创建一个HumanMessage
message = HumanMessage(content="请写一个关于春天的短诗")
# 使用模型预测并获取回复
response = chat_model.invoke([message])
print(response.content)
运行结果
春天来了,鸟语花香,
百花盛开,春雨润长。
阳光明媚,春风拂面,
大地一片生机勃勃的景象。
柳枝垂垂,燕子飞舞,
万物复苏,一派生机。
春天的美丽,无处不在,
让我们心旷神怡,享受这份美好。
进程已结束,退出代码为 0
LangChain快速入门示例
我们使用ChatOpenAI(它是LangChain中一个非常重要的类,充当了与OpenAI的聊天模型进行交互的接口)来帮助我们回答问题。使用该类回答问题时,需创建并实例化一个对象,传入使用的 OpenAI大模型名称(如gpt-3.5-turbo等),并且可根据需求设置temperature、max_tokens等其他相关参数,以实现与相应大模型的交互并获取回答。
此外,我们还可以通过提示词模板(Prompt Template)生成提示词,然后再向大模型发送指令。下面演示如何创建一个简单LLM的链(Chain):
完整代码
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
# 如果已设置OPENAI_API_KEY环境变量,此步骤可跳过。
# os.environ["OPENAI_API_KEY"] = "你的OPENAI_API_KEY"
# 实例化ChatOpenAI类,创建一个聊天模型对象
# model_name参数指定使用的OpenAI模型名称,这里使用的是gpt-3.5-turbo
chat_model = ChatOpenAI(model_name="gpt-3.5-turbo")
# 使用ChatPromptTemplate的from_messages方法创建一个对话提示模板
# 传入的列表中包含两个元组,分别代表系统消息和用户消息
# 系统消息用于向模型提供一些基本的指令或上下文信息,这里告知模型它是专业的微信公众号写作助手
# 用户消息使用占位符{input},表示后续可以动态传入具体的用户输入内容
prompt = ChatPromptTemplate.from_messages([
("system", "你是专业的微信公众号写作助手"),
("user", "{input}")
])
# 实例化StrOutputParser类,创建一个输出解析器对象
# 该解析器用于将模型的输出结果解析为字符串类型
output_parser = StrOutputParser()
# 使用管道操作符|将提示模板、聊天模型和输出解析器连接起来,形成一个处理链
# 这个链的作用是: 先根据提示模板生成输入消息,然后将消息传递给聊天模型进行处理,最后将模型的输出进行解析
chain = prompt | chat_model | output_parser
# 调用链的invoke方法,传入一个字典作为参数
# 字典中的键"input"对应提示模板中的占位符{input},值为具体的用户需求
# 这里要求模型帮写一篇关于人工智能的微信公众号文章,字数要求100字
result = chain.invoke({"input": "帮我写一篇关于内容关于人工智能的微信公众号,要求100个字"})
# 打印模型生成的结果
print(result)
运行结果
当代科技领域的热门话题——人工智能,让我们走进未来的世界。在这个微信公众号中,我们将探讨人工智能在各个领域的应用,介绍最新的技术进展和研究成果,让读者了解人工智能对社会、经济和生活的影响。同时,我们也将分享人工智能的发展历程、伦理道德的讨论以及未来发展的趋势。让我们一起探讨人工智能的无限可能性!
进程已结束,退出代码为 0
我们看到上述代码中,实例化了一个StrOutputParser对象,并应用到了Chain里。使用了StrOutputParser后,就可以直接得到干净的文本内容了,如上运行结果所示。假如没有使用StrOutputParser,result得到的结果是一个包含多种信息的复杂对象。如不使用StrOutputParser则运行结果如下所示:
不使用StrOutputParser运行结果
content='当今高度发达的人工智能技术改变着我们的生活与工作方式。本公众号将为您详细解读人工智能在各领域的应用,带您了解最新的AI技术发展和趋势。无论您是对人工智能感兴趣的新手还是专业人士,我们将为您提供有趣且深入的内容,让您深入了解这个神奇的领域。敬请关注!#人工智能# #AI#' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 156, 'prompt_tokens': 57, 'total_tokens': 213, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': 'fp_0165350fbb', 'finish_reason': 'stop', 'logprobs': None} id='run-8a3e48c1-1bd0-474e-8010-f628b746ab29-0' usage_metadata={'input_tokens': 57, 'output_tokens': 156, 'total_tokens': 213, 'input_token_details': {}, 'output_token_details': {}}
进程已结束,退出代码为 0
结束
好了,以上就是本次分享的全部内容了。不知道大家有没有理解并掌握我今天所讲的要点。
如果大家之前看过我分享的关于微软AutoGen的内容,应该能发现,LangChain和微软AutoGen在不少方面存在着相似性。由于今天只对LangChain进行快速入门的讲解,所以这里就不列举出它们的相似性和区别了(博主担心一些对LangChain新入门的小伙伴不理解)。
最后博主还是那句话:请大家多去大胆的尝试和使用,成功总是在不断的失败中试验出来的,敢于尝试就已经成功了一半。那么这次分享就到这了,如果大家对博主分享的内容感兴趣或有帮助,请点赞和关注。大家的点赞和关注是博主持续分享的动力🤭,博主也希望让更多的人学习到新的知识。