LLM 大模型技术实战:入门大模型开发框架 LangChain
LangChain 是一个专为 LLM 应用设计的开源框架,通过模块化组件简化开发。核心组件包括模型(Model)、提示(Prompt)、链(Chain)、代理(Agent)和记忆(Memory)。文章介绍了 LangChain 的工作原理、与向量存储的结合方式以及与其他框架的对比,并提供了基于 Python 的代码示例,帮助开发者快速构建大模型应用。

LangChain 是一个专为 LLM 应用设计的开源框架,通过模块化组件简化开发。核心组件包括模型(Model)、提示(Prompt)、链(Chain)、代理(Agent)和记忆(Memory)。文章介绍了 LangChain 的工作原理、与向量存储的结合方式以及与其他框架的对比,并提供了基于 Python 的代码示例,帮助开发者快速构建大模型应用。

LangChain 是一个专门为 LLM(Large Language Model)应用开发设计的开源框架,旨在简化 LLM 应用的开发难度。它将 LLM 的各个组件进行封装和链接,提供了一个统一的开发环境,让开发者可以更加便捷地进行 LLM 应用的开发。从某种程度上来说,LangChain 类似于 Java 开发中的 Spring 或 SpringBoot 框架,为开发者提供了丰富的工具和库,帮助快速构建功能强大的 LLM 应用。
简单来说,LangChain 就是把大量的数据组合起来,让 LLM 能够尽可能少地消耗计算力就能轻松地引用。它的工作原理是把一个大的数据源(比如一个 PDF 文件),分成一块一块的,然后把它们嵌入到一个向量存储(Vector Store)里。
创建向量存储后,我们可以用它和 LLM 一起工作,只检索我们需要引用的信息,来创建一个提示 - 完成(prompt-completion)对。当我们把一个提示输入到聊天机器人里,LangChain 就会在向量存储里查询相关的信息。一旦找到了相关的信息,我们就用它和提示一起喂给 LLM,生成我们的答案。
LangChain 还可以让你创建一些可以执行动作的应用程序,比如上网、发邮件、完成其他 API 相关的任务。这样的应用程序有很多可能的用途,例如个人 AI 邮件助手、AI 学习伙伴、AI 数据分析、定制公司客服聊天机器人等。
LangChain 由前 Robust Intelligence 的机器学习工程师 Chase Harrison 在 2022 年 10 月底推出,是一个封装了大量大语言模型(LLM)应用开发逻辑和工具集成的开源 Python 库。
Model 模块主要包含了大语言模型(LLM)。借助 LangChain,与 LLM 的交互将变得更加便捷。LangChain 提供的接口和功能有助于将 LLM 的强大能力轻松集成到工作应用程序中。它还支持异步调用,能够满足同时并发调用多个 LLM 的场景。
Prompt 是向 LLM 提供的输入。LangChain 提供了完备的管理和优化 prompt 的功能。最基础的功能是 prompt template(提示模板),模板指的是我们希望获得答案的具体格式或蓝图。LangChain 支持通过提示模板单独定义 prompt 的输入输出格式,其输出解析器可以将 LLM 的输出解析为所需要的格式。
Chain 提供了将各种组件合并成一个统一应用程序的方式。通过链式结构可以实现多个模型的序列调用,也能集成提示模板对用户输入进行格式化。LangChain 提供了多种基础链式结构,包含简单的单向序列 SimpleSequentialChain、可以让 LLM 查询 API 的 API Chain、图谱检索查询的 GraphQAChain 等。
Agent 是 LangChain 最强大的功能模块之一。Agent 将 LLM 作为推理引擎,只要给它提供文本或其他信息源,它就会利用互联网上学习到的背景知识或你提供的新信息,来回答问题、推理内容或决定下一步的操作。Agent 可以访问多种工具比如搜索引擎、数据库等,根据用户的输入,Agent 能决定是否调用这些工具,并确定调用时的输入。
一般在与 LLM 的交互过程中,模型是无法记住之前对话的历史消息的。LangChain 提供了多种不同的记忆形式,开发者可以选择存储完整记忆、仅保留最后几轮对话记忆或是限制存储的 token 数等。除此之外,开发者也可以选择将对话历史存储在向量数据库中,或是将某些特定实体的信息记忆起来。
一个 LangChain 应用程序通常由 5 个主要部分组成:模型(LLM 包装器)、提示、链、嵌入和向量存储、代理。
首先安装必要的库:
pip install langchain python-dotenv pinecone-client
加载环境变量:
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())
实例化一个 OpenAI 的 GPT 模型的包装器:
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage
chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.3)
messages = [
SystemMessage(content="你是一个专业的数据科学家"),
HumanMessage(content="写一个 Python 脚本,用模拟数据训练一个神经网络")
]
response = chat(messages)
print(response.content)
使用 PromptTemplates 允许你可以根据用户输入动态地更改提示:
from langchain import PromptTemplate
template = """
您是一位专业的数据科学家,擅长构建深度学习模型。
用几行话解释{concept}的概念
"""
prompt = PromptTemplate(
input_variables=["concept"],
template=template,
)
llm(prompt.format(concept="autoencoder"))
链可以让你在简单的提示模板上面构建功能,本质上像复合函数:
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
print(chain.run("autoencoder"))
也可以把链连起来,创建更大的组合:
from langchain.chains import SimpleSequentialChain
second_prompt = PromptTemplate(
input_variables=["ml_concept"],
template="把{ml_concept}的概念描述转换成用 500 字向我解释,就像我是一个五岁的孩子一样",
)
chain_two = LLMChain(llm=llm, prompt=second_prompt)
overall_chain = SimpleSequentialChain(chains=[chain, chain_two], verbose=True)
explanation = overall_chain.run("autoencoder")
print(explanation)
结合 LangChain 进行自定义数据存储。将大数据分成小块,并存储起来:
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=100,
chunk_overlap=0,
)
texts = text_splitter.create_documents([explanation])
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model_name="ada")
query_result = embeddings.embed_query(texts[0].page_content)
import os
import pinecone
from langchain.vectorstores import Pinecone
pinecone.init(
api_key=os.getenv('PINECONE_API_KEY'),
environment=os.getenv('PINECONE_ENV')
)
index_name = "langchain-quickstart"
search = Pinecone.from_documents(texts, embeddings, index_name=index_name)
result = search.similarity_search("What is magical about an autoencoder?")
print(result)
智能代理是一个能够自主行动的 AI,它可以根据输入,依次完成一系列的任务:
from langchain.agents.agent_toolkits import create_python_agent
from langchain.tools.python.tool import PythonREPLTool
from langchain.python import PythonREPL
from langchain.llms.openai import OpenAI
agent_executor = create_python_agent(
llm=OpenAI(temperature=0, max_tokens=1000),
tool=PythonREPLTool(),
verbose=True
)
agent_executor.run("找到二次函数 3 * x ** 2 + 2 * x - 1 的根(零点)。")
以下是四种框架(LangChain, LlamaIndex, Haystack, Hugging Face)的详细对比:
| 框架 | 优势 | 劣势 | 理想用例 |
|---|---|---|---|
| LangChain | 灵活性和扩展性高,可扩展性强,开源 | 学习曲线较陡,用户界面不够友好 | 研究项目,高性能应用 |
| LlamaIndex | 搜索和检索效率高,易用性好,与 Hugging Face 无缝集成 | 功能有限,黑箱性质 | 信息检索,个性化内容生成 |
| Haystack | 全面的 NLP 流水线,灵活性和定制性,开源和社区驱动 | 设置更复杂,资源密集型 | 信息提取,问题回答,情感分析 |
| Hugging Face | 丰富的模型库,用户友好平台,协作开发,开源 | 功能有限,成本 | 模型训练和微调,模型评估和比较,协作研究 |
LangChain 通过模块化设计降低了 LLM 应用开发的门槛,使得开发者能够快速构建基于大模型的应用程序。无论是简单的问答机器人还是复杂的智能代理,LangChain 都提供了相应的组件支持。随着生态的不断完善,LangChain 已成为 LLM 应用开发者选择中间件时的优先选择之一。对于希望深入探索大模型应用开发的开发者而言,掌握 LangChain 的核心概念和组件是至关重要的第一步。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online