吃透LangChain,我的理解像Java的Spring
概念
LangChain 是一个基于 大语言模型(LLMs, Large Language Models) 的开源框架,旨在简化构建复杂语言驱动应用的开发流程。它通过 模块化设计 和 链式调用(Chain) 机制,将自然语言处理任务拆解为可复用、可组合的组件,并支持与外部工具、数据源和记忆系统的集成。其核心目标是 降低开发门槛,使开发者能够快速构建可扩展的、上下文感知的 AI 应用。
LangChain框架图
从下至上分别是:
LangChain 库:Python 和 JavaScript 库,包含接口和集成,用于各种组件的组合,以及现成的链和代理的实现。
LangChain 模板:易于部署的各种任务的参考架构集合。
LangServe:将 LangChain 链部署为 REST API 的库。
LangSmith:开发平台,可用于调试、测试、评估和监控基于任何 LLM 框架构建的链,并与 LangChain 无缝集成。
LangChain 库介绍:
LangChain 的核心组件和能力(六大核心抽象,用于构建复杂的AI应用,同时保持了良好的扩展能力。)
Models(模型):
Chat Models(聊天模型): LangChain 提供了一个标准接口,支持聊天模型。这些模型是语言模型的变体,其接口基于消息而不是原始文本。您可以使用不同类型的消息(如 AIMessage、HumanMessage、SystemMessage 和 ChatMessage)与聊天模型进行交互。
Embeddings(嵌入): 帮助将文本转换为向量表示,以便在应用程序中进行处理。
LLMs(大型语言模型): LangChain 支持大型语言模型,例如 ChatGPT,用于各种自然语言处理任务。
Prompts(提示):
Prompt Templates(提示模板): 提供易于部署的参考架构,适用于不同任务。
Indexes(索引):
Vector Databases(向量数据库): 用于存储和检索向量表示,例如文本嵌入。
Interaction Layer Prompts(交互层提示): 用于构建用户与模型之间的交互。
Memory(记忆):
External Knowledge(外部知识): 整合外部知识源,丰富模型的知识库。
External Tools(外部工具): 与外部环境进行交互,例如通过 API 请求执行操作。
Chains(链):
LangChain提供了LCEL(LangChain Expression Language)声明式编程语言,将不同组件组合起来解决特定任务,例如在大量文本中查找信息。
Agents(代理):
使得 LLMs 能够与外部环境进行交互,例如通过 API 请求执行操作
总之,LangChain 是一个强大的工具箱,不仅涵盖了基础工具,还为个性化需求提供了自定义组件解决方案。它使开发者能够更专注于创新和优化产品功能,从原型到生产环境的转化变得更加高效。
LangChain工作流程
如上图,langChain 提供一套提示词模板Iprompt template) 管理工具,负责处理提示词,然后传递给大模型处理,最后处理大模型返回的结果。
LangChain 对大模型的封装主要包括 LLM 和 Chat Model 两种类型:
- LLM-问答模型,模型接收一个文本输入,然后返回一个文本结果。
- Chat Model-对话模型,接收一组对话消息,然后返回对话消息,类似聊天消息一样。
核心概念:
LLMS
LangChain 封装的基础模型,模型接收一个文本输入,然后返回一个文本结果。
Chat Models
聊天模型(或者成为对话模型),与LLMs不同,这些模型专为对话场景而设计。模型可以接收一组对话消息,然后返回对话消息,类似聊天消息一样。
消息(Message)
指的是聊天模型(Chat Models)的消息内容,消息类型包括包括 HumanMessage、AIMessage.
SystemMessage、FunctionMessage和ToolMessage 等多种类型的消息。
提示(prompts)
LangChain 封装了一组专门用于提示词(prompts)管理的工具类,方便我们格式化提示词(prompts)内容。
输出解析器((Output Parsers)
如上图介绍,Langchain 接受大模型(llm)返回的文本内容之后,可以使用专门的输出解析器对文本内容进行格式化,例如解析 json、或者将 lm 输出的内容转成 python 对象。
Retrievers(RAG知识库)
为方便我们将私有数据导入到大模型(LLM),提高模型回答问题的质量,LangChain 封装了检索框架(Retrievers),方便我们加载文档数据、切割文档数据、存储和检索文档数据。
向量存储(Vector stores)
为支持私有数据的语义相似搜索,langchain 支持多种向量数据库。
Agents
智能体 (Agents),通常指的是以大模型(LLM)作为决策引擎,根据用户输入的任务,自动调用外部系统、硬件设备共同完成用户的任务,是一种以大模型(LLM)为核心的应用设计模式。
应用场景
-
对话机器人:构建智能的对话助手、客服机器人、聊天机器人等。
-
知识库问答: 结合知识图谱,进行开放域问题的问答服务。
-
智能写作: 如文章写作、创意写作、文本摘要等
快速入门
安装LangChain
pip install langchain
# 阿里源
pip install langchain -i https://mirrors.aliyun.com/pypi/simple/
# 清华源
pip install langchain -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 如果一直下载不了,请检查pip版本是否太低
python.exe -m pip install --upgrade pip
不要忘记安装
pip install langchain_openai -i https://mirrors.aliyun.com/pypi/simple/
linux服务器上可以使用conda安装
初始化模型
# 引入langchain聊天场景的提示词模版
from langchain.chains.question_answering.map_rerank_prompt import output_parser
from langchain_core.prompts import ChatPromptTemplate
# 对输出进行格式化,自己尝试
from langchain_core.output_parsers import StrOutputParser
# 引入langchain openai sdk
from langchain_openai import ChatOpenAI
# 此处使用我自己的大模型
llm = ChatOpenAI(
# streaming=True,
# verbose=True,
openai_api_key="sk-XXX",
openai_api_base="http://192.168.10.106:11434/v1",
model_name="llama3.2"
)
# 根据message生成提示词
prompt = ChatPromptTemplate.from_messages([
("system", "你是世界级的技术专家"),
("user", "{input}")
])
output_parser = StrOutputParser()
# 通过langchain的链式调用,生成一个chain
chain = prompt | llm | output_parser
# 通过链路的 invoke 方法,进行链式调用,先生成提示词,在调用大模型
result = chain.invoke({"input": "帮我写一篇关于AI的文章,100字左右"})
print(result)
输出
**人工智能:未来的革命**
人工智能(Artificial Intelligence,简称AI)正在成为我们日常生活中的重要推动力。随着技术进步,AI越来越能够模仿人类的思维和行为,实现各项任务。从自行车驾驶到 intelligent assistants,AI已经变得更加接近人。然而,它仍面临着防御机制的提升以及负面的社会影响。这让我们在探索 AI 未来的局限性方面产生了新的思考。
在未来的发展中,我们要更多关注 AI 的安全性、可持久性和公众价值观。AI 的进步将带来更高效的工作和生活质量。但同时,也需要我们考虑其对人类社会的影响和合适使用方式,以确保它不会成为灾难性的技术。
**AI:未来的革命,前景不定,但也必然存在**