一.LangChain基础概念
1.什么是LLM
大语言模型(LLM)是基于海量文本训练的深度学习模型,能够理解和生成自然语言。其核心是通过Transformer架构捕捉上下文依赖关系,实现文本生成、问答、翻译等任务。典型代表如GPT-4、Claude、DeepSeek-V4-Pro等。
2.为什么需要LangChain
直接调用LLM存在以下痛点:
- 功能单一:模型仅完成基础文本生成,缺乏工具调用、记忆等能力。
- 流程复杂:需手动拼接提示词、解析输出、处理错误等。
- 可维护性差:业务逻辑与模型调用代码高度耦合。
3.LangChain是什么
LangChain是一个框架(降低你上手大模型的难度),通过编排层(Orchestration Layer)增强LLM能力,提供以下核心功能:
- 工具集成:绑定外部API、数据库等扩展模型能力。
- 工作流编排:通过流水线组合多步骤任务。
- 状态管理:支持对话历史、短期记忆等上下文维护。
4.LangChain与LLM的关系
- 能力层(LLM):提供基础文本生成能力,如DeepSeek-V4-Pro。
- 编排层(LangChain):通过工具、记忆、流程控制扩展LLM应用场景。
二.LangChain模块
这里介绍下组件的概念:
1.LangChain 组件的概念
在 LangChain 中,组件(Component)是指构成一个 LLM 应用的各种标准化、可复用、可组合的功能模块。每个组件都实现了统一的Runnable接口,使得它们能够像“乐高积木”一样被轻松连接起来,形成复杂的处理流水线(LCEL)。
2.核心抽象:Runnable与LCEL
Runnable:一切皆可执行
所有组件(模型、工具、解析器)均实现Runnable接口,支持统一调用方式:
# 所有这些都是 Runnable,而且 DeepSeek 和 OpenAI 都能使用 from langchain_core.runnables import Runnable # 1. 模型相关 - ChatModel # 聊天模型 ✅ - LLM # 传统大语言模型 ✅ - Embeddings # 嵌入模型 ✅ # 2. 提示词相关 - PromptTemplate # 提示模板 ✅ - ChatPromptTemplate # 聊天提示模板 ✅ - FewShotPromptTemplate # 少样本模板 ✅ # 3. 解析器相关 - StrOutputParser # 字符串输出 ✅ - JsonOutputParser # JSON输出 ✅ - PydanticOutputParser # Pydantic输出 ✅ # 4. 检索器相关 - VectorStoreRetriever # 向量检索器 ✅ - MultiVectorRetriever # 多向量检索器 ✅ - ParentDocumentRetriever # 父文档检索器 ✅ # 5. 工具相关 - Tool # 工具 ✅ - StructuredTool # 结构化工具 ✅ # 6. 链相关 - LLMChain # LLM链 ✅ - ConversationChain # 对话链 ✅ - RetrievalQA # 检索问答链 ✅ # 7. 其他 Runnable - RunnableLambda # 自定义函数 ✅ - RunnableParallel # 并行执行 ✅ - RunnableBranch # 条件分支 ✅ - RunnablePassthrough # 透传 ✅ - RunnableBinding # 绑定参数 ✅ - RunnableConfigurable # 可配置 ✅LCEL(LangChain表达式语言)
用|运算符连接组件形成流水线:
chain = prompt | model | output_parser数据流动示例:输入 → 提示词模板 → 模型 → 输出解析 → 结构化结果
3.聊天模型
1.定义并调用DeepSeek-V4-Pro模型
可以先在系统环境变量里填入Key
变量名:DEEPSEEK_API_KEY这样
变量值:Key值
方式一:ChatDeepSeek类(包含OpenAI原生方法)
import os from langchain_core.messages import SystemMessage, HumanMessage from langchain_deepseek import ChatDeepSeek from pyexpat.errors import messages # 聊天模型组件 # LangChain DeepSeek 包下载:pip install -U langchain langchain-core langchain-deepseek python-dotenv # 1. 定义 DeepSeek 模型(关键:必须填 base_url 和 api_key) DeepSeek = ChatDeepSeek( model="deepseek-v4-pro", base_url="https://api.deepseek.com/v1", # DeepSeek 官方接口地址 api_key=os.getenv("DEEPSEEK_API_KEY"), # 你必须填自己的密钥 temperature=0.7, # 可选参数 ) # 2.定义数据 messages = [ SystemMessage(content="你是一名专业的翻译官"), HumanMessage(content="帮我翻译Hello World!"), ] # 3. 调用模型 response = DeepSeek.invoke(messages) print(response.content) # import os # from langchain_core.messages import SystemMessage, HumanMessage # from langchain_openai import ChatOpenAI # 改用 OpenAI # # # 1. 定义 OpenAI 模型(通常只需 model 和 api_key) # chatgpt = ChatOpenAI( # model="gpt-4o-mini", # 或 "gpt-3.5-turbo" # api_key=os.getenv("OPENAI_API_KEY"), # 你的 OpenAI API 密钥 # temperature=0.7, # ) # # # 2. 定义消息(完全相同) # messages = [ # SystemMessage(content="你是一名专业的翻译官"), # HumanMessage(content="帮我翻译Hello World!"), # ] # # # 3. 调用模型 # response = chatgpt.invoke(messages) # print(response.content)方式二:init_chat_model统一入口
# DeepSeek deepseek = init_chat_model( model="deepseek-v4-pro",#模型 model_provider="deepseek", #供应商 api_key=os.getenv("DEEPSEEK_API_KEY"),#从系统中自动读取KEY base_url="https://api.deepseek.com", # DeepSeek 需要 base_url ) # OpenAI openai = init_chat_model( model="gpt-4o-mini", model_provider="openai", api_key=os.getenv("OPENAI_API_KEY"), # OpenAI 不需要 base_url(有默认值) ) # Anthropic Claude claude = init_chat_model( model="claude-3-haiku-20240307", model_provider="anthropic", api_key=os.getenv("ANTHROPIC_API_KEY"), ) #需要显示定义供应商的场景 # 场景1:模型名称有歧义或无法识别 model = init_chat_model( model="claude-3-haiku", # 可能无法自动识别是 anthropic 还是其他 model_provider="anthropic" # 需要显式指定 ) # 场景2:你想覆盖默认的提供商绑定(极少见) model = init_chat_model( model="gpt-4o-mini", model_provider="azure" # 强制使用 Azure OpenAI 而非标准 OpenAI )2.为模型装上“手脚”:工具定义与绑定
工具定义
使用@tool装饰器创建自定义工具:
from langchain.tools import tool @tool def search_news(query: str) -> str: """实时新闻搜索工具""" return fetch_news_api(query)工具绑定与调用
model_with_tools = model.bind_tools([search_news]) response = model_with_tools.invoke("今天有哪些AI新闻?") tool_calls = response.tool_calls # 解析模型触发的工具调用实战工具:Tavily网络搜索
Tavily简介
专为AI优化的搜索引擎API,提供:
- 高质量结果过滤
- 自动摘要生成
- 免费额度支持
集成示例
from langchain_community.tools import TavilySearchResults search = TavilySearchResults() chain = prompt | model.bind_tools([search]) | process_tool_calls结构化返回:输出解析方案
方案对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| Pydantic | 类型校验完善 | 需预先定义模型 |
| JSON Schema | 动态灵活 | 校验能力较弱 |
| TypedDict | Python原生支持 | 无运行时类型检查 |
Pydantic解析示例
from pydantic import BaseModel class NewsItem(BaseModel): title: str summary: str parser = PydanticOutputParser(pydantic_object=NewsItem) chain = prompt | model | parser # 输出自动转为NewsItem对象流式传输实现方案
同步流式
for chunk in model.stream("讲个故事"): print(chunk.content, end="")异步流式(SSE集成)
async for chunk in model.astream("生成报告"): send_sse_event(chunk) # 推送到前端进阶能力预告
- Agent:动态决策工具调用路径
- Memory:短期/长期对话记忆管理
- RAG:结合外部知识库增强回答准确性
学习资源
- 官方文档:https://python.langchain.com
- 代码仓库:https://github.com/langchain-ai/langchain
- DeepSeek集成指南:https://platform.deepseek.com/docs