Vercel AI SDK 提供方(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/mem0ai/mem0/8.3-vercel-ai-sdk-provider
翻译时间:2026-05-27T08:45:14.991Z
翻译模型:deepseek-chat
原文字符数:15514
项目:Mem0 (mem0)
---
Vercel AI SDK 提供方
相关源文件
以下文件作为生成此 Wiki 页面的上下文:
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 架构:代码实体关系
graph TB
subgraph "应用代码"
App["用户应用"]
VercelSDK["Vercel AI SDK<br/>generateText(), streamText()"]
end
subgraph "公共 API (src/index.ts:1-5)"
createMem0Export["export createMem0"]
mem0Export["export mem0"]
addMemoriesExport["export addMemories"]
retrieveMemoriesExport["export retrieveMemories"]
getMemoriesExport["export getMemories"]
searchMemoriesExport["export searchMemories"]
end
subgraph "Provider 实现 (src/mem0-provider.ts)"
createMem0Fn["createMem0(config)<br/>创建 Mem0 实例"]
mem0Fn["mem0(modelId, settings)<br/>创建模型包装器"]
Mem0Provider["Mem0Provider 类"]
end
subgraph "外观模式 (src/mem0-facade.ts:7-42)"
Mem0Class["class Mem0<br/>baseURL, headers"]
chatMethod["chat(modelId, settings)"]
completionMethod["completion(modelId, settings)"]
end
subgraph "语言模型 (src/mem0-generic-language-model.ts:20-228)"
GenericLM["class Mem0GenericLanguageModel<br/>implements LanguageModelV2"]
processMemoriesFn["processMemories(messages, config)<br/>第 41-106 行"]
doGenerateFn["doGenerate(options)<br/>第 108-176 行"]
doStreamFn["doStream(options)<br/>第 178-226 行"]
end
subgraph "记忆工具函数 (src/mem0-utils.ts)"
addMemoriesFn["addMemories(messages, config)<br/>第 310-324 行"]
updateMemoriesFn["updateMemories(messages, config)<br/>第 326-354 行"]
retrieveMemoriesFn["retrieveMemories(prompt, config)<br/>第 356-390 行"]
getMemoriesFn["getMemories(prompt, config)<br/>第 392-405 行"]
searchMemoriesFn["searchMemories(prompt, config)<br/>第 407-416 行"]
searchInternalFn["searchInternalMemories(query, config, top_k)<br/>第 242-308 行"]
flattenPromptFn["flattenPrompt(prompt)<br/>第 29-67 行"]
convertFormatFn["convertToMem0Format(messages)<br/>第 69-240 行"]
end
subgraph "Provider 选择器 (src/mem0-provider-selector.ts)"
Mem0ClassSelector["class Mem0ClassSelector"]
createProviderFn["createProvider()"]
end
subgraph "Provider 包装器 (src/provider-response-provider.ts:10-91)"
Mem0AITextGenerator["class Mem0AITextGenerator<br/>implements LanguageModelV2"]
languageModelField["private languageModel: any"]
textGenDoGenerate["doGenerate(options)<br/>第 78-81 行"]
textGenDoStream["doStream(options)<br/>第 83-86 行"]
end
subgraph "AI SDK Providers"
openaiSDK["@ai-sdk/openai<br/>createOpenAI()"]
anthropicSDK["@ai-sdk/anthropic<br/>createAnthropic()"]
googleSDK["@ai-sdk/google<br/>createGoogleGenerativeAI()"]
groqSDK["@ai-sdk/groq<br/>createGroq()"]
cohereSDK["@ai-sdk/cohere<br/>createCohere()"]
end
App --> VercelSDK
VercelSDK --> createMem0Export
VercelSDK --> addMemoriesExport
VercelSDK --> retrieveMemoriesExport
createMem0Export --> createMem0Fn
mem0Export --> mem0Fn
addMemoriesExport --> addMemoriesFn
retrieveMemoriesExport --> retrieveMemoriesFn
getMemoriesExport --> getMemoriesFn
searchMemoriesExport --> searchMemoriesFn
createMem0Fn --> Mem0Provider
mem0Fn --> Mem0Class
Mem0Class --> chatMethod
Mem0Class --> completionMethod
chatMethod --> GenericLM
completionMethod --> GenericLM
GenericLM --> processMemoriesFn
GenericLM --> doGenerateFn
GenericLM --> doStreamFn
processMemoriesFn --> addMemoriesFn
processMemoriesFn --> getMemoriesFn
doGenerateFn --> Mem0ClassSelector
doStreamFn --> Mem0ClassSelector
Mem0ClassSelector --> createProviderFn
createProviderFn --> Mem0AITextGenerator
Mem0AITextGenerator --> languageModelField
languageModelField --> openaiSDK
languageModelField --> anthropicSDK
languageModelField --> googleSDK
languageModelField --> groqSDK
languageModelField --> cohereSDK
addMemoriesFn --> convertFormatFn
addMemoriesFn --> updateMemoriesFn
updateMemoriesFn --> addAPI
retrieveMemoriesFn --> flattenPromptFn
retrieveMemoriesFn --> searchInternalFn
getMemoriesFn --> flattenPromptFn
getMemoriesFn --> searchInternalFn
searchMemoriesFn --> searchInternalFn
来源: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 实例化流程:
graph TB
Input["Mem0ProviderSettings config<br/>{provider, apiKey, modelType}"]
Constructor["constructor(modelId, config, provider_config)<br/>第 21 行"]
Switch["switch (config.provider)<br/>第 24 行"]
subgraph "Provider 分支处理"
OpenAICase["case 'openai' - 第 25-42 行"]
CohereCase["case 'cohere' - 第 43-47 行"]
AnthropicCase["case 'anthropic' - 第 49-53 行"]
GroqCase["case 'groq' - 第 55-59 行"]
GoogleCase["case 'google' 或 'gemini' - 第 61-72 行"]
DefaultCase["default - 抛出 Error - 第 73-74 行"]
end
subgraph "OpenAI 路径决策"
CheckModelType{"if (config?.modelType)"}
CompletionPath["createOpenAI({apiKey, ...provider_config})<br/>.completion(modelId)<br/>第 27-30 行"]
ChatPath["createOpenAI({apiKey, ...provider_config})<br/>.chat(modelId)<br/>第 31-35 行"]
LanguageModelPath["createOpenAI({apiKey, ...provider_config})<br/>.languageModel(modelId)<br/>第 37-40 行"]
end
subgraph "其他 Provider 实例化"
CohereCreate["createCohere({apiKey, ...provider_config})<br/>(modelId)<br/>第 44-47 行"]
AnthropicCreate["createAnthropic({apiKey, ...provider_config})<br/>.languageModel(modelId)<br/>第 50-53 行"]
GroqCreate["createGroq({apiKey, ...provider_config})<br/>(modelId)<br/>第 56-59 行"]
GoogleCreate["createGoogleGenerativeAI({apiKey, ...provider_config})<br/>(modelId)<br/>第 62-65 行, 第 68-71 行"]
end
Assignment["this.languageModel = 创建的实例<br/>第 19 行 private 字段"]
Input --> Constructor
Constructor --> Switch
Switch --> OpenAICase
Switch --> CohereCase
Switch --> AnthropicCase
Switch --> GroqCase
Switch --> GoogleCase
Switch --> DefaultCase
OpenAICase --> CheckModelType
CheckModelType -->|"'completion'"| CompletionPath
CheckModelType -->|"'chat'"| ChatPath
CheckModelType -->|undefined| LanguageModelPath
CohereCase --> CohereCreate
AnthropicCase --> AnthropicCreate
GroqCase --> GroqCreate
GoogleCase --> GoogleCreate
CompletionPath --> Assignment
ChatPath --> Assignment
LanguageModelPath --> Assignment
CohereCreate --> Assignment
AnthropicCreate --> Assignment
GroqCreate --> Assignment
GoogleCreate --> Assignment
来源: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