关于 mem0-vercel-ai-sdk
Mem0 Vercel AI SDK Provider 为 Vercel AI SDK 调用加入 Mem0 记忆检索与存储,面向构建 AI 应用的开发者。它可包装模型自动处理记忆,也提供独立工具以便自行控制流程。
主要功能
- 01模型调用时自动检索和存储记忆
- 02将检索到的记忆注入提示
- 03支持文本生成与流式生成
- 04提供独立记忆操作工具
- 05支持多种模型提供方
适用场景
- 01为 AI 对话加入持久记忆
- 02在生成前手动检索并注入记忆
- 03通过独立工具控制记忆读写
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mem0ai/ mem0 --skill mem0-vercel-ai-sdk安装后在 Claude Code 中输入/mem0-vercel-ai-sdk确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEREADME.mdreferences/memory-utilities.mdprovider-api.mdusage-patterns.md详细介绍
Mem0 Vercel AI SDK Provider
适用于 Vercel AI SDK 的记忆增强型 AI 提供方。在大模型调用期间自动检索和存储记忆。
步骤 1:安装
npm install @mem0/vercel-ai-provider ai@^6
ai 和 @ai-sdk/* 提供方包都是 @mem0/vercel-ai-provider 的常规依赖,因此无需安装其他内容。唯一的对等依赖是 zod(可选,^3.0.0)。
步骤 2:设置环境变量
export MEM0_API_KEY="m0-xxx"
export OPENAI_API_KEY="sk-xxx" # or ANTHROPIC_API_KEY, GOOGLE_API_KEY, etc.
在此获取 Mem0 API 密钥:https://app.mem0.ai/dashboard/api-keys?utm_source=oss&utm_medium=skill-mem0-vercel-ai-sdk
模式 1:封装模型
封装模型的方式最简单。createMem0 会返回一个提供方,用于封装任何受支持的大模型,并自动检索和存储记忆。
import { generateText } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";
const mem0 = createMem0();
const { text } = await generateText({
model: mem0("gpt-5-mini", { user_id: "alice" }),
prompt: "Recommend a restaurant",
});
其内部工作流程如下:
- 将提示词存储到 Mem0(
POST /v3/memories/add/),并在大模型调用前等待完成(写入失败时会记录日志并忽略) - 将提示词发送到 Mem0 搜索接口(
POST /v3/memories/search/),以检索相关记忆 - 如果找到记忆,则将其作为系统消息注入提示词开头
- 底层大模型(例如 OpenAI gpt-5-mini)使用增强后的提示词生成回复
对于 generateText,检索到的记忆还会作为来源附加到结果中:
const { text, sources } = await generateText({
model: mem0("gpt-5-mini", { user_id: "alice" }),
prompt: "Recommend a restaurant",
});
console.log(sources.find((s) => s.title === "Mem0 Memories")?.providerMetadata?.mem0);
该来源的 title: "Mem0 Memories",且 providerMetadata.mem0 包含 memories(记忆对象数组)和 memoriesText。仅当检索到至少一条记忆时才会包含该来源。
模式 2:独立工具函数
如果你想完全控制记忆的检索和存储流程,或者想使用已单独配置的提供方,请使用独立工具函数。
import { openai } from "@ai-sdk/openai";
import { generateText } from "ai";
import { retrieveMemories, addMemories } from "@mem0/vercel-ai-provider";
const prompt = "Recommend a restaurant";
// Retrieve memories -- returns a formatted system prompt string
const memories = await retrieveMemories(prompt, {
user_id: "alice",
mem0ApiKey: "m0-xxx",
});
// Generate using any provider with injected memories
const { text } = await generateText({
model: openai("gpt-5-mini"),
prompt,
system: memories,
});
// Optionally store the conversation back
await addMemories(
[
{ role: "user", content: [{ type: "text", text: prompt }] },
{ role: "assistant", content: [{ type: "text", text }] },
],
{ user_id: "alice", mem0ApiKey: "m0-xxx" }
);
模式 3:流式输出
使用 streamText 生成经记忆增强的流式回复:
import { streamText } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";
const mem0 = createMem0();
const result = streamText({
model: mem0("gpt-5-mini", { user_id: "alice" }),
prompt: "What should I cook for dinner?",
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk);
}
封装模型会在流式输出开始前存储对话并检索记忆。
支持的提供方
| 提供方 | 配置值 | 必需的环境变量 |
|---|---|---|
| OpenAI(默认) | "openai" | OPENAI_API_KEY |
| Anthropic | "anthropic" | ANTHROPIC_API_KEY |
"google"(别名为 "gemini") | GOOGLE_GENERATIVE_AI_API_KEY | |
| Groq | "groq" | GROQ_API_KEY |
| Cohere | "cohere" | COHERE_API_KEY |
创建 Mem0 实例时选择提供方:
const mem0 = createMem0({ provider: "anthropic" });
const { text } = await generateText({
model: mem0("claude-sonnet-4-20250514", { user_id: "alice" }),
prompt: "Hello!",
});
内部工作原理
封装模型流程
User prompt
--> processMemories: addMemories (POST /v3/memories/add/, awaited)
--> processMemories: getMemories (POST /v3/memories/search/)
--> memories (if any) injected as system message at start of prompt
--> underlying LLM generates response (doGenerate or doStream)
--> response returned to caller (doGenerate also attaches a "Mem0 Memories" source)
独立流程
User controls each step:
1. retrieveMemories / getMemories / searchMemories -> fetch memories
2. inject into system prompt manually
3. call generateText / streamText with any provider
4. addMemories -> store new conversation to Mem0
4 个工具函数的主要区别
| 函数 | 返回值 | 适用场景 |
|---|---|---|
retrieveMemories | 格式化的系统提示词字符串 | 直接注入 system 参数 |
getMemories | 原始记忆数组 | 以编程方式处理记忆 |
searchMemories | 原始搜索响应(与 API 返回内容相同) | 需要分数和完整元数据 |
addMemories | API 响应 | 向 Mem0 存储新消息 |
retrieveMemories、getMemories 和 searchMemories 将 LanguageModelV3Prompt | string 作为第一个参数;addMemories 的类型为 LanguageModelV3Prompt(运行时也支持字符串)。这 4 个函数都将可选的 Mem0ConfigSettings 作为第二个参数。
常见边缘情况和提示
- 始终提供
user_id(或agent_id/app_id/run_id),以确保一致地检索记忆。搜索端点要求在filters中至少包含一个实体 ID;提供方会为你将这些 ID 放入其中。 - 独立工具需要显式提供 API 密钥:在配置对象中传入
mem0ApiKey,或设置MEM0_API_KEY环境变量。 - 此工具使用 Vercel AI SDK v6(LanguageModelV3 / ProviderV3 接口,
@mem0/vercel-ai-provider3.x)。Provider 2.x 面向 AI SDK v5。它与 AI SDK v4 或更早版本不兼容。 processMemories会先等待addMemories完成,然后再搜索并调用大模型,因此每次封装后的调用都包含一次记忆写入和一次记忆搜索。如果其中任一请求失败,系统会记录错误,并在不使用记忆的情况下继续调用大模型。"google"和"gemini"均可接受,且都会映射到@ai-sdk/google。- 在 3.0.0 中移除:
org_id、project_id、org_name、project_name、output_format、filter_memories、async_mode、enable_graph、version、api_version。图记忆现在是 Mem0 Platform 的项目设置,而非提供方选项。 - 默认
top_k为 10。 仅在设置threshold和rerank时才会发送它们(API 中rerank的默认值为false;threshold是服务端截断阈值,并非返回分数的下限)。 - 自定义主机:在配置中设置
host,以指向其他 Mem0 API 端点(默认值:https://api.mem0.ai)。
参考资料
| 主题 | 文件 |
|---|---|
提供方 API(createMem0、Mem0Provider、类型) | 本地 / GitHub |
记忆工具(addMemories、retrieveMemories 等) | 本地 / GitHub |
| 用法模式和示例 | 本地 / GitHub |
相关 Mem0 技能
| 技能 | 适用场景 | 链接 |
|---|---|---|
| mem0 | Python/TypeScript SDK、REST API、框架集成 | 本地 / GitHub |
| mem0-cli | 终端命令、脚本、CI/CD、Agent 工具循环 | 本地 / GitHub |