langchain中的抽象和集成

参考:

1.LangChain vs LangGraph vs Deep Agents技术对比详解

2.LangChain 核心抽象类 BaseLLM 详解

3.springboot集成langchain4j接入open AI和deepseek

4.LangChain中的向量数据库抽象基类-VectorStore

5.langchain runnables 概念指南

6.无限可能LangChain------概念指南之架构

LangChain 作为智能体框架(Agent Framework),其核心价值在于提供抽象(Abstractions)与集成(Integrations)。这两个概念是 LangChain 能够简化大模型应用开发、实现"快速上手"的关键。下面将分别详细阐述其具体所指,并结合实例进行说明。

一、抽象(Abstractions)

"抽象"指的是 LangChain 将复杂、多变的大模型应用开发模式,提炼成一系列标准化、可复用的接口和组件。它屏蔽了底层实现的复杂性,为开发者提供了统一的编程模型。其主要抽象包括:

1. 模型 I/O 抽象

这是最基础的抽象层,旨在统一不同大语言模型(LLM)和聊天模型(ChatModel)的调用方式。

  • BaseLLM / BaseChatModel :所有文本生成模型和聊天模型的基类。它们定义了如 invokestreambatch 等标准调用方法,无论底层是 OpenAI、Anthropic 还是本地部署的模型,对开发者而言调用方式都是一致的。这解决了不同供应商 API 差异大的问题。

  • PromptTemplate:提示词模板抽象。允许开发者将用户输入、上下文等信息动态地填充到预定义的提示词结构中,而无需手动拼接字符串。

  • OutputParser:输出解析器抽象。用于将模型返回的非结构化文本,解析成结构化的数据(如 JSON、Pydantic 对象),方便后续程序处理。

示例:使用统一接口调用不同模型

复制代码
from langchain.chat_models import init_chat_model
# 抽象层使得切换模型提供商只需更改参数,无需重写调用逻辑
openai_llm = init_chat_model(model="gpt-4", model_provider="openai", api_key="sk-...")
anthropic_llm = init_chat_model(model="claude-3-sonnet", model_provider="anthropic", api_key="sk-...")
deepseek_llm = init_chat_model(model="deepseek-chat", model_provider="deepseek", api_key="sk-...") # [ref_1]

# 统一的调用方式
response = openai_llm.invoke("Hello, world!")
2. Runnable 协议

这是 LangChain 最核心的架构抽象,在 langchain-core 包中定义。Runnable 接口为链(Chain)、工具(Tool)、模型(Model)甚至整个智能体(Agent)提供了统一的调用规范。

  • 价值 :任何实现了 Runnable 接口的对象,都可以用相同的方式(invokestreambatch)进行调用、组合和流式处理。这极大地增强了组件的可组合性。

  • LCEL(LangChain Expression Language) :基于 Runnable 构建的声明式组合语法,允许开发者像搭积木一样将多个 Runnable 组件连接成复杂的处理流程。

示例:使用 Runnable 和 LCEL 构建处理链

复制代码
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

prompt = ChatPromptTemplate.from_template("请将以下内容翻译成{language}: {text}")
model = init_chat_model(model="gpt-4")
parser = StrOutputParser()

# 使用 LCEL 将多个 Runnable 组件组合成一个链
chain = prompt | model | parser  # 符号 `|` 代表"接着执行"
result = chain.invoke({"language": "法语", "text": "你好,世界"})
print(result) # 输出: Bonjour, le monde
# 此链抽象了提示词构建、模型调用和结果解析的完整流程 [ref_5]
3. 智能体与工具抽象

这是构建自主决策应用的关键抽象。

  • Agent :智能体抽象。它封装了"思考-行动-观察"的循环逻辑。在 LangChain 1.0 中,核心是 create_agent 函数,它接受模型、工具和系统提示词,返回一个可执行的智能体(其底层是一个 LangGraph 状态图)。

  • Tool :工具抽象。通过 @tool 装饰器,可以将任何一个 Python 函数转化为智能体能够理解和调用的工具。智能体会根据工具的描述自动决定在何时、以何种参数调用它。

示例:创建具有工具调用能力的智能体

复制代码
from langchain.agents import create_agent
from langchain_core.tools import tool

@tool
def get_current_temperature(city: str) -> str:
    """获取指定城市的当前温度。"""
    # 这里可以连接真实的天气API
    return f"{city}的温度是22摄氏度。"

agent = create_agent(
    model=llm,
    tools=[get_current_temperature], # 工具被抽象为智能体可用的"技能"
    system_prompt="你是一个天气助手,可以查询温度。",
)
# 智能体抽象了何时调用工具、如何解析模型输出以选择工具的复杂逻辑 [ref_1]
4. 记忆(Memory)抽象

用于管理智能体与用户对话的历史上下文,包括对话缓冲区、摘要记忆、向量存储记忆等多种模式,提供了统一的读写接口。

5. 检索器(Retriever)与向量存储(VectorStore)抽象
  • VectorStore :向量数据库的抽象基类。它定义了如 add_textssimilarity_search 等标准方法,使得 LangChain 可以对接 Chroma、Pinecone、Weaviate 等多种向量数据库,而业务代码无需改动。

  • Retriever:检索器抽象。它是一个返回与查询相关文档的接口,其背后可以是基于向量存储的检索,也可以是关键词检索或其他算法。

二、集成(Integrations)

"集成"指的是 LangChain 与外部丰富的生态系统进行连接的能力。它预置了与数百种第三方服务、API、数据库和工具的连接器,让开发者可以"开箱即用"。

1. 大模型提供商集成

这是最核心的集成。LangChain 集成了几乎所有主流和新兴的 LLM 服务,包括:

  • 云服务:OpenAI, Anthropic (Claude), Google (Gemini), Cohere, DeepSeek, 百度文心一言,阿里通义千问等。

  • 开源模型 :通过 ollama, vllm, huggingface 等集成本地或自托管模型。

  • 统一方式 :无论集成谁,都通过类似 init_chat_model 的标准化接口调用,只需更换 model_providermodel 参数。

2. 工具与API集成

LangChain-community 包集成了海量的现成工具,涵盖搜索、计算、代码执行、文件操作等各个方面。例如:

  • 搜索引擎:SerpAPI, Google Search, DuckDuckGo。

  • 代码执行:Python REPL, Bash。

  • 办公软件:Google Drive, Notion, Slack。

  • 数据工具:SQL 数据库, Pandas DataFrame。

3. 向量数据库与检索系统集成

如前所述,通过 VectorStore 抽象,集成了 Chroma, Pinecone, Weaviate, Qdrant, Milvus, Elasticsearch 等数十种向量数据库和检索系统。

4. 其他中间件与基础设施集成
  • LangServe:用于将任何 LangChain 链或智能体快速部署为 REST API 的服务。

  • LangSmith:集成 LangChain 官方的调试、监控、测试和评估平台,帮助开发者追踪调用链、分析性能和质量。

  • LangGraph:深度集成其作为底层的智能体运行时,为复杂、有状态的工作流提供持久化执行能力。

总结:抽象与集成的关系

维度 抽象(Abstractions) 集成(Integrations)
核心目标 标准化与简化。定义统一的接口和模式,降低开发复杂度。 连接与扩展。提供丰富的即插即用组件,连接外部世界。
关注点 "怎么做"(How)。提供构建应用的标准方法和组件。 "用什么做"(With What)。提供可用的具体服务和数据源。
举例 Runnable 协议、Agent 循环、Tool 接口。 OpenAI API 连接器、Chroma 向量库客户端、Google Search 工具。
关系 抽象定义接口,集成实现接口 。例如,VectorStore 是一个抽象,而 Chroma 类是该抽象的一个具体集成实现。

最终价值 :正是通过这种"上层抽象定义规范,下层集成提供实现 "的架构,LangChain 让开发者能够专注于业务逻辑本身,而非陷入适配不同API、调试底层通信的琐碎工作中。开发者利用抽象 来编写核心、稳定的业务链(如 prompt -> llm -> parser),同时利用集成 来灵活地切换底层组件(如将 llm 从 GPT-4 换成 Claude,或将向量存储从 Pinecone 换成 Milvus),从而实现高效、可维护的大模型应用开发。