当前位置: 首页 > news >正文

LangChain 是一个 **大语言模型(LLM)应用开发框架**

LangChain 是一个 大语言模型(LLM)应用开发框架,核心目标是解决 LLM 与外部工具、数据、流程的“连接与协同”问题,让开发者快速构建复杂的 AI 应用(而非仅调用单轮 LLM API)。其核心价值是“模块化”和“可组合性”,将 LLM 应用的关键组件拆分为独立模块,再通过“链(Chain)”和“代理(Agent)”串联成端到端流程。

一、LangChain 核心定位

  • 解决 LLM 的原生局限:LLM 上下文有限、无法实时联网、不能直接操作外部工具(数据库、API)、缺乏长程记忆等。
  • 核心能力:连接外部资源(数据、工具)+ 编排复杂流程(多步推理、记忆管理)。
  • 适用场景:聊天机器人、问答系统(RAG)、数据分析、自动化工作流、智能代理等。

二、核心组件与核心使用场景

LangChain 的组件设计围绕“LLM 应用的全生命周期”展开,核心组件及对应使用场景如下:

1. 基础组件(必学)

组件作用常用工具/示例
模型(Models)接入 LLM(OpenAI、Anthropic、本地模型如 Llama 3)、嵌入模型(Embedding)ChatOpenAILlamaCppOpenAIEmbeddings
提示词(Prompts)管理提示词模板、动态填充变量、优化 LLM 输出PromptTemplateFewShotPromptTemplate
链(Chains)将“提示词 + 模型 + 输出处理”串联成多步流程(避免单轮调用)LLMChain(基础链)、SequentialChain(顺序链)
记忆(Memory)保存对话历史/上下文,支持多轮交互(如聊天机器人记住前文)ConversationBufferMemoryConversationSummaryMemory
工具(Tools)让 LLM 调用外部工具(API、数据库、搜索引擎、代码解释器)SerpAPI(搜索)、SQLDatabaseToolkit(数据库)、PythonREPLTool
代理(Agents)让 LLM 自主决策“调用哪些工具、按什么顺序调用”(处理未知复杂任务)AgentType.ZERO_SHOT_REACT_DESCRIPTION(零样本代理)
文档加载与处理(Document Loaders/Processors)加载外部文档(PDF、CSV、网页)、分割文本(用于 RAG)PyPDFLoaderRecursiveCharacterTextSplitter
向量存储(Vector Stores)存储文档嵌入向量,支持相似性检索(RAG 核心)Chroma(轻量本地)、Pinecone(云端)

2. 高频核心使用场景(附极简示例)

场景 1:基础 LLM 调用 + 提示词模板(告别硬编码提示词)

核心需求:固定提示词结构,动态传入变量(如“根据产品名生成营销文案”)。

from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain# 1. 初始化 LLM(需配置 OpenAI API 密钥)
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="your-api-key")# 2. 定义提示词模板({product} 为动态变量)
prompt = PromptTemplate(input_variables=["product"],template="为产品「{product}」写一段 50 字内的电商营销文案,突出性价比和实用性。"
)# 3. 构建链(串联模板 + LLM)
chain = LLMChain(llm=llm, prompt=prompt)# 4. 运行(传入变量)
result = chain.run(product="无线快充充电宝")
print(result)
# 输出示例:“20W无线快充,10000mAh大容量,小巧便携不占地!兼容多数机型,性价比拉满,出门再也不怕没电~”
场景 2:多轮对话(带记忆功能的聊天机器人)

核心需求:让 LLM 记住对话历史(如用户先问“推荐手机”,再问“它的价格”,LLM 知道“它”指推荐的手机)。

from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain# 1. 初始化 LLM 和记忆(ConversationBufferMemory 保存完整历史)
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="your-api-key")
memory = ConversationBufferMemory()# 2. 构建对话链(集成记忆)
conversation_chain = ConversationChain(llm=llm, memory=memory, verbose=True)# 3. 多轮交互
print(conversation_chain.run("推荐一款适合学生党的性价比手机"))
# 输出:推荐红米 Note 13 Pro...(略)print(conversation_chain.run("它的起售价是多少?"))
# 输出:红米 Note 13 Pro 起售价约 1799 元(8+256GB 版本),学生党预算友好...(LLM 记住了“它”指前序推荐的手机)
场景 3:检索增强生成(RAG)—— 基于私有文档问答

核心需求:让 LLM 基于你的私有数据(如公司文档、PDF)回答问题(LLM 本身没见过这些数据)。
RAG 核心流程:加载文档 → 分割文本 → 生成嵌入向量 → 存储到向量库 → 检索相关文本 → 拼接提示词 → LLM 生成答案

from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA# 1. 加载并分割文档(以 PDF 为例)
loader = PyPDFLoader("公司产品手册.pdf")  # 你的私有 PDF 路径
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)  # 分割成小块
splits = text_splitter.split_documents(documents)# 2. 生成嵌入并存储到向量库(Chroma 本地轻量向量库)
embeddings = OpenAIEmbeddings(api_key="your-api-key")
vector_db = Chroma.from_documents(documents=splits, embedding=embeddings, persist_directory="./chroma_db")
vector_db.persist()# 3. 构建检索链(检索相关文本 + LLM 回答)
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="your-api-key")
qa_chain = RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",  # 直接将检索到的文本拼接进提示词retriever=vector_db.as_retriever(k=3)  # 检索最相关的 3 个文本块
)# 4. 基于私有文档问答
result = qa_chain.run("公司这款产品的核心功能有哪些?")
print(result)
# 输出:基于 PDF 内容的核心功能总结(LLM 仅用检索到的文档信息回答,不编造)
场景 4:智能代理(Agent)—— 让 LLM 自主调用工具

核心需求:让 LLM 自主决策处理复杂任务(如“查询今天北京的气温,再计算它与昨天的温差”—— 需要先调用搜索工具查气温,再做计算)。

from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, Tool
from langchain.tools import SerpAPIWrapper  # 搜索引擎工具(需 SerpAPI 密钥)# 1. 配置工具(这里用搜索引擎工具,可替换为数据库、API 等)
serp_api_key = "your-serpapi-key"  # 从 SerpAPI 官网申请
search = SerpAPIWrapper(serpapi_api_key=serp_api_key)
tools = [Tool(name="Search",func=search.run,description="用于查询实时信息(如天气、新闻、股价等)")
]# 2. 初始化 LLM 和代理
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="your-api-key")
agent = initialize_agent(tools=tools,llm=llm,agent="zero-shot-react-description",  # 零样本代理(无需示例,仅靠描述决策)verbose=True  # 打印思考过程(便于调试)
)# 3. 运行复杂任务
agent.run("查询今天北京的最高气温,再查昨天的最高气温,计算两者的温差")
# 代理思考过程:
# 1. 需要先查今天北京最高气温 → 调用 Search 工具
# 2. 再查昨天北京最高气温 → 调用 Search 工具
# 3. 计算温差 → 直接计算(无需工具)
# 输出:今天北京最高气温 25℃,昨天 20℃,温差为 5℃。

三、LangChain 关键优势

  1. 生态丰富:支持主流 LLM(OpenAI、Anthropic、Google Gemini)、向量库(Chroma、Pinecone)、工具(SerpAPI、SQL、Slack)。
  2. 降低开发成本:无需从零实现记忆、检索、工具调用逻辑,直接组合组件。
  3. 可扩展性强:支持自定义组件(如自定义工具、提示词模板),适配复杂场景。
  4. 支持多语言:核心是 Python 库,也有 JavaScript/TypeScript 版本(LangChain.js)。

四、学习与实践建议

  1. 入门顺序:先掌握「Prompt + LLM + Chain」→ 再学「Memory」(对话场景)→ 重点突破「RAG」(企业常用)→ 最后学「Agent」(复杂任务)。
  2. 环境准备
    • 安装核心库:pip install langchain langchain-openai chromadb pypdf(根据场景安装依赖)
    • 申请 API 密钥:OpenAI API、SerpAPI(搜索引擎)、Pinecone(云端向量库,可选)。
  3. 避坑点
    • Agent 稳定性:复杂任务中 Agent 可能决策失误,需通过「提示词优化」「工具限制」「多轮校验」提升可靠性。
    • RAG 效果:文本分割粒度、嵌入模型、检索策略会影响问答准确性,需调试优化。
    • 成本控制:LLM API 和向量库存储有费用,测试时注意限制请求量。

总结

LangChain 不是替代 LLM,而是让 LLM “更有用”—— 它把 LLM 从“单轮文本生成工具”升级为“能联网、能操作工具、能记忆、能处理复杂流程的 AI 应用核心”。无论是快速搭建一个聊天机器人,还是开发企业级的私有文档问答系统,LangChain 都是目前最主流的选择之一。

http://www.dtcms.com/a/596466.html

相关文章:

  • 从RAM/ROM到Redis:项目架构设计的存储智慧
  • 高中课程免费教学网站网页塔防游戏排行榜
  • Access导出带图表的 HTML 报表:技术实现详解
  • 郑州上海做网站的公司嘉兴网站建设有前途吗
  • 学习JavaScript进阶记录(二)
  • 优化用户体验的小点:乐观更新链路 双数据库查询
  • C++—list:list的使用及模拟实现
  • EasyExcel 与 Apache POI 版本冲突导致的 `NoSuchMethodError` 异常
  • WebServer04
  • 品牌网站建设技术网站搜索引擎优化诊断
  • 优秀企业网站设计WordPress评论楼层
  • 卡索(CASO)汽车调查:新能源时代如何精准度量用户体验?
  • 手动模拟Spring(简易版)
  • 蓝牙钥匙 第88次 蓝牙钥匙未来发展趋势篇:用户体验未来趋势深度解析
  • jmeter集群压测配置方法和注意事项
  • [笔记]SolidWorks转URDF 在rviz2中显示
  • 抖音商城店铺用户体验优化研究(开题报告)
  • 北京网站推广公司排名永久免费的cms系统带商城
  • STM32外设学习--USART串口协议--学习笔记。
  • 汉狮做网站公司郑州苏州建设网站的网络公司
  • 【C#-sqlSugar-sqlite】在Windows从源码编译构建System.Data.SQLite.dll的方法
  • 【WPF】WrapPanel的用法
  • wpf 控件中Margin属性如何设置绑定?
  • 【管综】考研199管理类联考真题试卷及答案解析PDF电子版(2009-2025年)
  • UDP/TCP接收/转发/广播服务端
  • WPF 获取鼠标相对于控件的坐标信息,控制控件锚点放缩
  • 面试题—linux
  • 福田皇岗社区做网站网页制作怎么收费
  • 236. Java 集合 - 使用索引访问 List 元素
  • 天河网站建设哪家强华为企业邮箱