跳到主要内容LLM 大模型技术实战:入门大模型开发框架 LangChain | 极客日志PythonAI算法
LLM 大模型技术实战:入门大模型开发框架 LangChain
本文介绍了 LangChain 框架的核心概念、工作原理及实战应用。内容涵盖 LangChain 的模块化设计、五大核心组件(Model、Prompt、Chain、Agent、Memory)详解,以及基于 Python 的代码示例。文章详细演示了如何搭建环境、使用 LLM 包装器、构建提示模板、组合链、处理向量存储与嵌入,以及创建智能代理。最后对比了 LangChain 与 LlamaIndex、Haystack 等框架的差异,并总结了构建 RAG 问答机器人的完整流程,为开发者入门大模型开发提供实用指南。
LLM 大模型技术实战:入门大模型开发框架 LangChain
前言
近年来,人工智能应用层出不穷。许多 AI 工具(如 ChatPDF)能够帮助用户快速从文档中提取信息,无需人工翻阅。这些应用的背后,往往使用了一个名为 LangChain 的开源框架。
01 LangChain 简介
LangChain 是专为 LLM(Large Language Model)应用开发设计的框架,旨在简化开发难度。它将 LLM 的各个组件进行封装和链接,提供统一的开发环境。类似于 Java 中的 Spring 框架,LangChain 为开发者提供了丰富的工具和库,帮助快速构建功能强大的 LLM 应用。
核心特点
- 模块化设计:将 LLM 应用组件拆分为独立模块,便于开发和维护。
- 易用性强:提供丰富的 API 和文档,包含详细教程和示例代码。
- 高性能:底层经过优化,保证应用性能,让开发者专注于业务逻辑。
02 LangChain 工作原理
简单来说,LangChain 通过组合大量数据,使 LLM 能以较低计算成本引用信息。其核心原理是将大文档(如 PDF)分块,嵌入到向量存储(Vector Store)中。
当用户输入提示时,LangChain 在向量存储中检索相关信息,将其与提示结合喂给 LLM,生成答案。这相当于为文档服务的小型搜索引擎。
此外,LangChain 支持创建可执行动作的应用程序(Agent),例如上网、发邮件或调用其他 API。
03 LangChain 框架架构
LangChain 由前 Robust Intelligence 机器学习工程师 Chase Harrison 于 2022 年 10 月推出。它是一个封装了大量 LLM 应用开发逻辑和工具集成的开源 Python 库。
核心组件
-
Model(模型)
主要包含大语言模型(LLM)。LangChain 提供接口将 LLM 能力集成到应用中,支持异步并发调用,并允许编写自定义 LLM 包装器。
-
Prompt(提示)
向 LLM 提供的输入。LangChain 提供完备的 Prompt 管理功能,包括 PromptTemplate(提示模板),支持定义输入输出格式及输出解析器。
-
Chain(链)
将各种组件合并成统一应用程序的方式。支持多种基础链式结构,如 SimpleSequentialChain(简单序列链)、API Chain 等。可将多个 Chain 与其他组件集成生成复杂结构。
-
Agent(代理)
将 LLM 作为推理引擎。Agent 可根据文本或信息源回答问题、推理内容或决定下一步操作。它可以访问多种工具(如搜索引擎、数据库),根据用户输入决定是否调用工具,直到完成任务。
-
Memory(记忆)
解决 LLM 无法记住历史对话的问题。LangChain 提供多种记忆形式,如存储完整记忆、保留最近几轮对话、限制 Token 数,或将历史存储在向量数据库中。
与 ChatGPT Plugin 的关系
LangChain 与 ChatGPT Plugin 并非竞争关系。LangChain 在插件推出后迅速更新支持。在复杂的 B2B 应用场景中,LangChain 在底层大模型和上层应用之间提供业务逻辑抽象,满足复杂业务快速部署需求。
04 LangChain 应用实战
1. AI 应用开发步骤
- 环境搭建:安装 Python、PyTorch 等依赖库,配置 LangChain 框架。
- 模型选择:根据场景选择 LLM(如 GPT-3.5, GPT-4, BERT 等)。
- 模型调优:调整参数和策略,优化模型表现。
- 应用开发:利用 LangChain API 实现具体功能。
2. 核心模块代码示例
一个完整的 LangChain 应用程序通常包含以下部分:模型包装器、提示、链、嵌入和向量存储、代理。
2.1 环境设置
pip install -r requirements.txt
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())
2.2 模型(LLM 包装器)
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.3)
messages = [
SystemMessage(content="你是一个专业的数据科学家"),
HumanMessage(content="写一个 Python 脚本,用模拟数据训练一个神经网络")
]
response = chat(messages)
print(response.content)
2.3 提示(Prompt Templates)
使用 PromptTemplate 动态更改提示:
from langchain import PromptTemplate
template = """
您是一位专业的数据科学家,擅长构建深度学习模型。
用几行话解释{concept}的概念
"""
prompt = PromptTemplate(
input_variables=["concept"],
template=template,
)
llm(prompt.format(concept="autoencoder"))
2.4 链(Chains)
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)
2.5 嵌入和向量存储
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)
query = "What is magical about an autoencoder?"
result = search.similarity_search(query)
print(result)
2.6 代理(Agents)
智能代理可自主行动,调用 API 完成任务。例如使用 Python REPL 求解方程:
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 的根(零点)。")
2.7 整合应用:构建 RAG 问答机器人
- 加载文档并分割。
- 生成 Embedding 并存入 Vector Store。
- 查询时检索相关片段。
- 将片段与用户问题结合形成 Prompt。
- 发送给 LLM 生成最终回答。
05 与其他框架对比
| 框架 | 优势 | 劣势 | 理想用例 |
|---|
| LangChain | 灵活性和扩展性高,可扩展性强,开源 | 学习曲线较陡,用户界面不够友好 | 研究项目,高性能应用 |
| LlamaIndex | 搜索和检索效率高,易用性好,与 Hugging Face 无缝集成 | 功能有限,黑箱性质 | 信息检索,个性化内容生成 |
| Haystack | 全面的 NLP 流水线,灵活性和定制性,开源和社区驱动 | 设置更复杂,资源密集型 | 信息提取,问题回答,情感分析 |
| Hugging Face | 丰富的模型库,用户友好平台,协作开发,开源 | 功能有限,成本 | 模型训练和微调,模型评估和比较 |
06 总结
LangChain 通过模块化设计降低了 LLM 应用开发的门槛。它涵盖了从模型交互、提示工程、链式调用到记忆管理和代理执行的全流程。对于希望快速构建企业级 AI 应用的开发者而言,LangChain 提供了坚实的基础设施。随着生态系统的完善,其在 RAG(检索增强生成)和 Agent 领域的应用将更加广泛。
在实际开发中,建议关注官方文档的最新更新,并根据具体业务场景选择合适的组件组合。同时,注意数据隐私和模型调用的成本控制。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online