使用 MCP 为 Vercel AI SDK 智能体添加持久化内存
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
在使用 Vercel AI SDK 构建自主 AI 代理(Agent)时,开发者面临的最大挑战之一就是大语言模型(LLM)的无状态特性。在默认情况下,每次对话交互都是完全独立的,智能体无法直接跨会话记住用户偏好、历史选择或上下文知识。传统解决方案通常需要手动引入复杂的向量数据库、自定义 Embedding 流水线以及繁琐的提示词拼接工程。
随着 Anthropic 提出 Model Context Protocol (MCP) 这一开放标准,Vercel AI SDK 实现了对 MCP 客户端的原生支持。借助 npm 上即用型的 bluecolumn-mcp 服务,开发者无需安装额外 SDK 或搭建复杂基础设施,仅需 3个步骤即可为任何 Vercel AI SDK 智能体注入长期持久化内存。同时,结合 n1n.ai 提供的极速多模型 API 聚合服务,可以确保智能体在调用 Claude 3.5 Sonnet、OpenAI o3 或 DeepSeek-V3 时获得低延迟且高可靠的基座支持。
什么是 Model Context Protocol (MCP)?
Model Context Protocol (MCP) 是用于标准化大语言模型与外部数据源及工具交互的统一协议。在 MCP 架构下,模型不再需要针对每个数据库编写专属的代码适配器,而是通过标准的工具声明与调用规范来访问外部能力。
Vercel AI SDK 官方提供了 ai/mcp-stdio 和 ai/mcp-http 扩展包。通过集成 bluecolumn-mcp,智能体会自动获取以下三种标准记忆工具:
remember:用于立即存储长期事实、用户偏好与实体属性。recall:在回答依赖历史上下文的问题前,执行语义向量搜索。note:记录非结构化的临时对话笔记以供日后索引。
3 步实现持久化内存智能体
下面展示如何在 Next.js App Router 的 API 路由(app/api/chat/route.ts)中完成持久化内存的集成。
第一步:配置环境变量
首先,确保项目安装了 ai 核心包。获取 BlueColumn 内存 API 密钥以及 n1n.ai 的多模型服务密钥,并将其写入 .env.local 文件:
BLUECOLUMN_API_KEY=bc_live_your_api_key_here
N1N_API_KEY=sk-n1n-your-api-key-here
通过 n1n.ai 统一接入 API,开发者可以免去管理多个模型供应商账号的繁琐流程,实现毫秒级响应。
第二步:编写 API 路由处理函数
在 app/api/chat/route.ts 中使用 Experimental_StdioMCPTransport 启动 MCP 客户端。借助 npx 指令,Node.js 运行时会自动拉取并运行 bluecolumn-mcp 镜像,无需手动管理依赖。
import { streamText, experimental_createMCPClient as createMCPClient } from 'ai';
import { Experimental_StdioMCPTransport as StdioMCPTransport } from 'ai/mcp-stdio';
import { createOpenAI } from '@ai-sdk/openai';
// 通过 n1n.ai 高性能网关初始化 OpenAI 兼容客户端
const n1nProvider = createOpenAI({
baseURL: 'https://api.n1n.ai/v1',
apiKey: process.env.N1N_API_KEY,
});
export async function POST(req: Request) {
const { messages } = await req.json();
// 创建基于 Stdio 传输的 MCP 客户端
const mcpClient = await createMCPClient({
transport: new StdioMCPTransport({
command: 'npx',
args: ['-y', 'bluecolumn-mcp@latest'],
env: {
BLUECOLUMN_API_KEY: process.env.BLUECOLUMN_API_KEY!
},
}),
});
try {
// 动态获取记忆工具集(remember, recall, note)
const tools = await mcpClient.tools();
const result = streamText({
model: n1nProvider('gpt-4o'),
system: `你是一个具备长期记忆能力的智能助手。
- 当发现重要的持久事实时,立即使用 remember 工具进行存储。
- 在回答需要历史上下文的问题之前,务必先使用 recall 工具搜索过往记忆。
- 确保记忆条目准确无冗余。`,
messages,
tools,
});
return result.toDataStreamResponse();
} finally {
// 确保请求完成后及时关闭进程客户端
await mcpClient.close();
}
}
第三步:系统提示词优化与引用溯源
为了保证模型能正确触发内存工具,必须在系统提示词(System Prompt)中明确说明逻辑约束。
当智能体调用 recall 时,系统将返回包含语义相关度得分及原始出处的数据结构。前端界面可以直接将这些引用来源展示给终端用户,从而实现记忆溯源与可验证性。
// recall 工具返回的 JSON 结构示例
\{
"query": "用户偏好的编程语言