Vercel AI SDK 提供方
Vercel AI SDK 提供方
相关源文件
本章引用的主要源码文件:
docs/integrations/vercel-ai-sdk.mdxskills/mem0-cli/LICENSEskills/mem0-cli/README.mdskills/mem0-cli/references/workflows.mdskills/mem0-vercel-ai-sdk/LICENSEskills/mem0-vercel-ai-sdk/README.mdvercel-ai-sdk/README.mdvercel-ai-sdk/package.jsonvercel-ai-sdk/pnpm-lock.yamlvercel-ai-sdk/src/index.tsvercel-ai-sdk/src/mem0-facade.tsvercel-ai-sdk/src/mem0-generic-language-model.tsvercel-ai-sdk/src/mem0-types.tsvercel-ai-sdk/src/mem0-utils.tsvercel-ai-sdk/src/provider-response-provider.tsvercel-ai-sdk/tests/generate-output.test.ts
目的与范围
本文档介绍 @mem0/vercel-ai-provider TypeScript/JavaScript 包,该包将 Mem0 的持久化记忆能力与 Vercel AI SDK v5 集成。该 Provider 使大语言模型能够通过 Mem0 的记忆平台访问和存储对话上下文,从而使 AI 应用能够维护个性化、上下文相关的对话。
如需了解 Mem0 的 Python SDK 与 Vercel AI 的集成,请参阅 Python SDK 文档 8.1。如需了解不依赖 Vercel AI 的通用 TypeScript SDK 用法,请参阅 8.2。其他框架集成请参阅 9。
包概述
Vercel AI SDK Provider 以 @mem0/vercel-ai-provider 发布在 npm 上,提供了 Vercel AI SDK 与 Mem0 记忆平台之间的无缝集成。它实现了 @ai-sdk/provider 中的 LanguageModelV2 接口,支持直接替换或包装现有的大语言模型,为其添加记忆能力。
主要功能:
- 通过系统消息自动将记忆注入提示词。
- 支持流式和非流式响应。
- 多模态内容处理(图片、PDF、Markdown)。
- 图记忆集成,提供实体-关系上下文。
- 独立的记忆工具函数,用于自定义集成。
来源:vercel-ai-sdk/package.json:1-82、docs/integrations/vercel-ai-sdk.mdx:1-327
安装
通过 npm 安装 Provider:
npm install @mem0/vercel-ai-provider
该包需要 Node.js >= 18,并且对 zod 有对等依赖,用于模式校验。
核心依赖:
ai(5.0.2) - Vercel AI SDK 核心。@ai-sdk/provider(2.0.0) - Provider 接口。@ai-sdk/openai、@ai-sdk/anthropic、@ai-sdk/google、@ai-sdk/groq、@ai-sdk/cohere- 大语言模型 Provider SDK。
来源:vercel-ai-sdk/package.json:33-45、vercel-ai-sdk/package.json:65-67
架构总览
Provider 架构:代码实体关系
来源:vercel-ai-sdk/src/index.ts:1-5、vercel-ai-sdk/src/mem0-generic-language-model.ts:20-228、vercel-ai-sdk/src/mem0-utils.ts:1-418、vercel-ai-sdk/src/provider-response-provider.ts:10-91
核心组件
Mem0GenericLanguageModel
这是实现 LanguageModelV2 接口的主要类,负责编排记忆操作和模型执行。
类定义:vercel-ai-sdk/src/mem0-generic-language-model.ts:20-37
export class Mem0GenericLanguageModel implements LanguageModelV2 {
readonly specificationVersion = "v2";
readonly defaultObjectGenerationMode = "json";
readonly supportsImageUrls = false;
readonly supportedUrls: Record<string, RegExp[]> = {
'*': [/.*/]
};
constructor(
public readonly modelId: Mem0ChatModelId,
public readonly settings: Mem0ChatSettings,
public readonly config: Mem0ChatConfig,
public readonly provider_config?: Mem0ProviderSettings
) {
this.provider = config.provider ?? "openai";
}
}
关键方法:
| 方法 | 用途 | 行号 | 描述 |
|---|---|---|---|
processMemories() | 记忆编排 | 41-106 | 检索现有记忆,异步添加新记忆,并构建系统提示词。 |
doGenerate() | 文本生成 | 108-176 | 非流式生成,带记忆注入。 |
doStream() | 流式生成 | 178-226 | 流式响应,带记忆注入。 |
记忆注入逻辑:vercel-ai-sdk/src/mem0-generic-language-model.ts:41-106
processMemories() 方法编排记忆检索和注入的流程:
- 异步添加:以"即发即忘"的 Promise 方式调用
addMemories()第 44 行。 - 检索:等待
getMemories()获取相关上下文第 52 行。 - 格式化:遍历结果,构建
memoriesText字符串第 60-77 行。 - 图支持:如果
enable_graph为 true,则提取关系并追加到提示词中第 79-82 行。 - 系统消息:在消息数组前插入一条包含格式化记忆的系统消息
第 87-95 行。
来源:vercel-ai-sdk/src/mem0-generic-language-model.ts:41-106
Mem0AITextGenerator
该组件充当 Mem0 逻辑与特定大语言模型 Provider SDK(OpenAI、Anthropic 等)之间的桥梁。
Provider 实例化流程:
来源:vercel-ai-sdk/src/provider-response-provider.ts:10-91
记忆工具函数
Provider 导出了独立的记忆函数,用于手动管理上下文。
addMemories()
从对话消息中添加新记忆到 Mem0 平台。
- 实现:将
LanguageModelV2Prompt转换为 Mem0 内部格式第 312-316 行,并向/v1/memories/发送POST请求第 344 行。
retrieveMemories()
检索记忆并将其格式化为系统提示词字符串,用于注入大语言模型。
- 实现:将提示词展平为搜索查询
第 358 行,在 Mem0 平台中搜索第 361 行,并构建包含可选图关系的格式化字符串第 366-385 行。
searchInternalMemories()
这是其他工具函数使用的核心记忆检索实现。
- 过滤:基于
user_id、app_id、agent_id和run_id构建OR过滤块第 244-266 行。 - 请求:向
/v2/memories/search/发送POST请求,包含查询和过滤条件第 297-298 行。
来源:vercel-ai-sdk/src/mem0-utils.ts:242-418
多模态内容支持
Provider 通过将 Vercel AI SDK 消息格式转换为 Mem0 兼容结构来处理多模态内容。
| 内容类型 | MIME 类型 | 转换结果 |
|---|---|---|
application/pdf | pdf_url 对象 第 89-98 行 | |
| Markdown | text/markdown | mdx_url 对象 第 99-108 行 |
| 图片 | image/* | image_url 对象 第 109-118 行 |
对于搜索查询,flattenPrompt() 会将多模态附件替换为描述性占位符(例如 [PDF document]),以在记忆检索期间保持上下文流畅 第 44-55 行。
来源:vercel-ai-sdk/src/mem0-utils.ts:29-67、vercel-ai-sdk/src/mem0-utils.ts:69-240
配置系统
Mem0ConfigSettings
该接口定义了记忆作用域和搜索参数。
| 属性 | 类型 | 描述 |
|---|---|---|
user_id | string | 用户的唯一标识符。 |
agent_id | string | 代理的唯一标识符。 |
enable_graph | boolean | 是否包含图记忆关系。 |
top_k | number | 要检索的记忆数量。 |
threshold | number | 搜索的相似度阈值。 |
来源:vercel-ai-sdk/src/mem0-types.ts:10-33
集成示例
基本文本生成
import { generateText } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";
const mem0 = createMem0();
const { text } = await generateText({
model: mem0("gpt-4-turbo", { user_id: "alice" }),
prompt: "What is my favorite car?",
});
独立检索
import { retrieveMemories } from "@mem0/vercel-ai-provider";
const systemPrompt = await retrieveMemories("Tell me about cars", {
user_id: "alice",
mem0ApiKey: "m0-xxx"
});
来源:docs/integrations/vercel-ai-sdk.mdx:83-112