LangChain + DeepSeek 实战拆解:从 LCEL 到智能体,如何真正“做出”一个可控 AI 系统?

举报
霍格沃兹测试 发表于 2026/03/17 10:36:09 2026/03/17
【摘要】 大模型很强。但如果你只是:```pythonllm.invoke("帮我写点东西")```那你做的不是系统,只是调用接口。真正的工程问题是:* 多步骤推理怎么组织?* 外部数据怎么接入?* 工具怎么安全调用?* 对话怎么长期记忆?* 结果怎么结构化输出?这才是 LangChain 解决的问题。---## 目录1. LangChain 到底解决什么问题?2. 环境搭建:DeepSeek + L...

大模型很强。

但如果你只是:

```python
llm.invoke("帮我写点东西")
```

那你做的不是系统,只是调用接口。

真正的工程问题是:

* 多步骤推理怎么组织?
* 外部数据怎么接入?
* 工具怎么安全调用?
* 对话怎么长期记忆?
* 结果怎么结构化输出?

这才是 LangChain 解决的问题。

---

## 目录

1. LangChain 到底解决什么问题?
2. 环境搭建:DeepSeek + LiteLLM
3. LCEL 新范式:Prompt | LLM | Parser
4. 流式输出如何实现?
5. RAG:检索链路如何接入?
6. 记忆机制的新写法
7. Agent 与工具调用
8. 一个完整对话系统示例
9. LangChain 在工程里的真实价值

---

## 一、LangChain 到底解决什么问题?

单独的 LLM 像一个聪明的大脑。

但它没有:

* 手(不能执行函数)
* 眼睛(不能实时查资料)
* 记忆库(上下文有限)
* 任务调度系统(不会组织复杂流程)

LangChain 的本质,是一套**可组合的 LLM 编排框架**。

它不增强模型能力,它增强:

* 可控性
* 可组合性
* 可扩展性
* 工程稳定性

---

## 二、环境搭建:DeepSeek + LiteLLM

安装:

```bash
pip install langchain langchain-openai langchain-community python-dotenv -i https://mirrors.aliyun.com/pypi/simple/
pip install -U litellm
```

`.env` 文件:

```
DEEPSEEK_API_KEY=sk-xxx
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-chat
```

初始化模型:

```python
from langchain_openai import ChatOpenAI
import os

llm = ChatOpenAI(
    model=os.getenv("DEEPSEEK_MODEL"),
    openai_api_key=os.getenv("DEEPSEEK_API_KEY"),
    openai_api_base=os.getenv("DEEPSEEK_BASE_URL"),
    temperature=0.7
)
```

这里有个工程重点:

LangChain 不直接适配所有模型,它通过 LiteLLM 做统一接口抽象。

这一步是“工程层”的关键。

---

## 三、LCEL:Prompt | LLM | Parser

旧版 LLMChain 已经被弃用。

现在的标准写法是 LCEL(LangChain Expression Language)。

核心结构:

```
Prompt → Model → OutputParser
```

代码示例:

```python
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位技术专家,用通俗语言解释概念。"),
    ("user", "{concept}")
])

chain = prompt | llm | StrOutputParser()

result = chain.invoke({"concept": "量子纠缠"})
print(result)
```

为什么必须要 Parser?

因为:

模型输出是 Message 对象
工程系统需要字符串或结构化 JSON

没有 Parser,工程不可控。

---

## 四、流式输出(Streaming)

真实应用里,你不可能等 10 秒再一次性输出。

只需要把 `.invoke()` 换成 `.stream()`:

```python
for chunk in chain.stream({"concept": "递归神经网络"}):
    print(chunk, end="", flush=True)
```

流式输出是:

* 聊天机器人
* WebSocket 应用
* 实时界面

的基础能力。

---

## 五、RAG:检索增强生成

LangChain 把 RAG 拆成清晰的流水线:

```
文档加载 → 文本切片 → 向量化 → 向量存储 → 检索器
```

示意结构:

```
DocumentLoader
     ↓
TextSplitter
     ↓
Embeddings
     ↓
VectorStore
     ↓
Retriever
     ↓
LLM
```

关键点在于:

Retriever 现在是一个“可嵌入链的组件”。

不只是数据库查询,而是可参与推理流程。

---

## 六、记忆机制的新写法

旧版 ConversationBufferMemory 已经不推荐。

现在的写法是:

* ChatMessageHistory
* RunnableWithMessageHistory

记忆不再是链的属性。

而是一个独立的存储系统,通过 session_id 区分用户。

核心代码:

```python
with_message_history = RunnableWithMessageHistory(
    chain,
    get_session_history,
    input_messages_key="question",
    history_messages_key="history",
)
```

这意味着:

记忆可以持久化到 Redis / PostgreSQL。

工程级对话系统必须这样做。

---

## 七、Agent 与工具调用

智能体的本质是:

1. LLM 判断是否需要调用工具
2. 调用工具
3. 观察结果
4. 再决定下一步

创建工具:

```python
from langchain.agents import create_tool_calling_agent

agent = create_tool_calling_agent(llm, tools, prompt)
```

核心机制是:

模型 → 决策 → Tool Call → 观察 → 最终回答

LangChain 现在推荐用 LangGraph 构建复杂 Agent。

因为多步骤推理本质是“状态机”。

---

## 八、一个完整的对话系统示例

带记忆的聊天机器人核心结构:

```python
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个乐于助人的 AI 助手。"),
    MessagesPlaceholder(variable_name="history"),
    ("human", "{question}")
])

chain = prompt | llm
```

然后通过 RunnableWithMessageHistory 管理会话。

结果就是:

AI 记得你叫小明。

这不是魔法,是工程结构。

---

## 九、LangChain 在工程里的真实价值

很多人误解 LangChain 是“封装模型”。

其实它解决的是:

* 多步骤流程编排
* 工具安全调用
* RAG 标准化接入
* 会话管理
* 可测试结构

它让你从:

“写 Prompt 的人”

变成:

“设计 AI 系统架构的人”

这才是核心。

---

## 结尾

LangChain 不是模型。

它是 LLM 应用的“操作系统”。

当你真正用 LCEL 构建:

Prompt → 检索 → 工具 → 记忆 → 输出

你会发现,大模型只是其中一层。

真正决定系统稳定性的,是结构。

而结构,才是工程能力的分水岭。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。