96SEO 2026-08-06 14:35 25
使用者痛点:每次调用大语言模型时都像一次全新的 HTTP 请求。模型不记得上一次对话的内容,导致使用者体验极差。

当我们调用大语言模型的 API 时每次请求本质上和 HTTP 请求一样,都是无状态的。怎么说呢,模型不会记住你上一轮说了什么也不会知道你的名字、喜好等上下文信息。
// index.js 中的无状态调用示例
const res = await model.invoke;console.log,// 模型可能回答:“你好陈昊,很高兴认识你...”
const res2 = await model.invoke;console.log,// 模型会茫然回答:“抱歉,我不知道你的名字。”
这就带来了一个主要问题:如何让 LLM 拥有记忆?
最朴素的方法就是维护一个对话历史记录每次调用 LLM 时都将历史记录带上。就像下面这样:
messages =
但这种方法有一个明显的副作用:历史记录会像滚雪球一样越滚越大,Token 开销会急剧增加而且每次请求都要重复发送完整的历史消息,效率低下。
LangChain 作为 LLM 应用开发的主流框架,提供了一套方案。下面通过两个完整的代码示例,看看如何使用 LangChain 为 DeepSeek 模型添加记忆能力。
使用者痛点:环境配置繁琐、依赖不明确导致项目难以启动。
需要安装必要的依赖:
pnpm add @langchain/core @langchain/deepseek dotenv langchain
项目结建立议如下:
.
├── index.js # 无状态调用示例
├── memory.js # 带记忆的多轮对话示例
├── readme.md # 学习笔记
├── package.json
└── .env # 存放 DEEPSEEK_API_KEY
在 .env 中配置你的 DeepSeek API Key:
DEEPSEEK_API_KEY=sk-xxxxxxxx
使用者痛点:没有记忆导致连续提问时模型“失忆”,使用者体验极差。
// . 导入 ChatDeepSeek 类
import { ChatDeepSeek } from '@langchain/deepseek';// . 导入 dotenv 读取环境变量
import 'dotenv/config';// . 创建模型实例
const model = new ChatDeepSeek({
model这方面。'deepseek-chat',temperature: 0 // 输出更确定
});// . 第一次调用:告诉模型自己的名字和爱好
const res = await model.invoke;console.log,console.log;// . 第二次调用:询问自己的名字
const res2 = await model.invoke;console.log,
dotenv 用于读取环境变量。ChatDeepSeek 包含模型名称和;怎么说呢,温度设为 0` 可获得更确定性的答案。运行结果:
我叫张三,喜欢喝白兰地?
按理说,很高兴认识你,张三!
白兰地是一种很优雅的饮品。-----------------
抱歉,我不知道你的名字。如果你愿意告诉我,我会很高兴记住它。按理说,
可以看到第二次回答时模型已经完全“失忆”。这正是 **无状态 API** 的典型表现,也是多数使用者在实际使用中遇到的最大痛点。
使用者痛点:#1 手动管理对话历史繁琐;按理说,#2 难以统一不同存储实现;#3 易忘记在每轮结束后追加记录。
| 组件 | 作用 | 说明 |
|---|---|---|
| 抽象基类 定义保存/读取/清除消息的标准接口 | |
| 内存实现 适合开发调试 | |
| Pipelined Runnable 包装器 | 自动加载历史、注入 Prompt、并在结束后追加新消息 |
| PROMPT 模板 | {history} 占位符用于插入历史消息 |
`RunnableWithMessageHistory` 是 LangChain 实现记忆的
运行结果示例 :
关键收获:
五、记忆模式:memory.js 逐行解析
代码全景
import { ChatDeepSeek } from '@langchain/deepseek';import { ChatPromptTemplate } from '@langchain/core/prompts';import { RunnableWithMessageHistory } from '@langchain/core/runnables';import { InMemoryChatMessageHistory } from '@langchain/core/chat_history';import 'dotenv/config';// 创建模型实例
const model = new ChatDeepSeek({
至于model。'deepseek-chat',temperature: 0,});// 定义 Prompt。其中 {history} 会被自动替换为历史消息数组
const prompt = ChatPromptTemplate.fromMessages(,]);// 建立 Runnable 管道:Prompt → 调试节点 → Model
const runnable = prompt
.pipe => {
console.log");console.log);return input;})
.pipe,老实说,// 创建内存中的消息历史对象
const messageHistory = new InMemoryChatMessageHistory;// 用 RunnableWithMessageHistory 包装,使其具备自动记忆能力
const chain = new RunnableWithMessageHistory({
runnable。getMessageHistory: async => messageHistory,inputMessagesKey: 'input',historyMessagesKey: 'history',});// ------------------- 第一轮对话 -------------------
const res1 = await chain.invoke(
{ input: '我叫张三。喜欢喝白兰地' },{ configurable: { sessionId: 'makefriend' } }
);console.log,怎么说呢,// ------------------- 第二轮对话 -------------------
const res2 = await chain.invoke(
{ input: '我叫什么名字' }。{ configurable: { sessionId: 'makefriend' } }
);console.log,
逐行详细说明
. 导入模块
. 创建模型实例
. 定义 Prompt 模板
. 建立 Runnable 管道
. 创建消息历史存储
import { RedisChatMessageHistory } from '@langchain/redis';话说回来,const messageHistory = new RedisChatMessageHistory;同一套代码无需改动,即可切换到 PostgreSQL、MongoDB 或文件程序实现。
. 包装为带记忆链路
者无需手动管理任何「addUserMessage / addAIMessage」细节。
. 第一轮对话
chain.invoke;- 第一个参数提供本轮使用者输入;- 第二个参数携带 *sessionId*,用于区分不同会话。
. 第二轮对话)
>> 最终传给模型的信息
{
"messages":,]
}
好的 张三。我记住了你喜欢喝白兰地,>> 最终传给模型的信息
{
"messages":。]
}
你叫张三,你喜欢喝白兰地。<
/ code>
RunnableWithMessageHistory 即可自动管理;sessionId 可同时维护多条独立对话;
| 方法 | 功能 | 返回类型 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
addUserMessage | 添加一条来自使用者的信息 | /Promise |
LangChain 官方提供多种实现。只需替换构造函数就可以完成迁移:
| # 实现类\<\/th\>\ | # 存储后端\<\/th\>\ | # 推荐场景\<\/th\>\<\/tr\>\<\/ad\>\ |
|---|---|---|
| \ |
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback