语音与多模态
语音与多模态
相关源文件
本章引用的主要源码文件:
docs/cookbooks/companions/travel-assistant.mdxdocs/cookbooks/integrations/aws-bedrock.mdxdocs/integrations/agentops.mdxdocs/integrations/agno.mdxdocs/integrations/autogen.mdxdocs/integrations/aws-bedrock.mdxdocs/integrations/elevenlabs.mdxdocs/integrations/google-ai-adk.mdxdocs/integrations/keywords.mdxdocs/integrations/langchain.mdxdocs/integrations/langgraph.mdxdocs/integrations/livekit.mdxdocs/integrations/llama-index.mdxdocs/integrations/openai-agents-sdk.mdxdocs/integrations/pipecat.mdxdocs/open-source/features/custom-instructions.mdxdocs/open-source/features/metadata-filtering.mdxdocs/open-source/features/reranker-search.mdxdocs/open-source/node-quickstart.mdx
本文档记录了 Mem0 对语音代理集成和多模态记忆能力的支持。内容涵盖如何将 Mem0 与 LiveKit 和 PipeCat 等实时语音平台集成,以及如何存储和检索包含文本与图像的多模态记忆。
多模态记忆支持
Mem0 支持在记忆中存储多模态内容,允许你保存和检索包含文本和图像的对话。这对于处理视觉信息与自然语言相结合的 AI 应用尤为有用。
多模态消息格式
消息可以包含纯文本或结构化的多模态内容。与 Agno 等框架的集成使代理能够处理和存储这些丰富的交互。
标题:多模态实体关系
来源:docs/integrations/agno.mdx:104-121, docs/integrations/agno.mdx:173-180
使用 Agno 实现
Agno 集成演示了如何将本地图像转换为 base64 格式,并将其作为 image_url 数据存储在 Mem0 中。
import base64
from mem0 import MemoryClient
client = MemoryClient()
def store_multimodal_interaction(image_path, user_input, user_id):
with open(image_path, "rb") as image_file:
base64_image = base64.b64encode(image_file.read()).decode("utf-8")
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": user_input},
{
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}
}
]
}
]
client.add(messages, user_id=user_id)
来源:docs/integrations/agno.mdx:99-125
语音代理集成
Mem0 与实时语音平台集成,为语音代理提供对话记忆能力。这些集成使代理能够在语音交互中记住上下文。
标题:语音集成组件图
来源:docs/integrations/livekit.mdx:51-62, docs/integrations/pipecat.mdx:31-46, docs/integrations/elevenlabs.mdx:106-109
LiveKit 集成
LiveKit 使用异步代理模型。MemoryEnabledAgent 类扩展了标准的 LiveKit Agent,用于拦截用户轮次并将 Mem0 的检索增强生成(RAG)上下文注入其中。
标题:LiveKit 记忆逻辑流程
来源:docs/integrations/livekit.mdx:78-140
关键组件:
AsyncMemoryClient:用于实时语音流中的非阻塞 I/O 操作docs/integrations/livekit.mdx:51-51。on_user_turn_completed:用于持久化用户消息和检索上下文的钩子docs/integrations/livekit.mdx:101-139。
Pipecat 集成
Pipecat 提供了一个专门的 Mem0MemoryService,作为语音管线中的中间件。它通常位于 UserContextAggregator 和 LLMService 之间。
管线配置
Mem0MemoryService 管理基于 user_id、agent_id 和 run_id 的自动记忆检索。
from pipecat.services.mem0 import Mem0MemoryService
memory = Mem0MemoryService(
api_key=os.getenv("MEM0_API_KEY"),
user_id="unique_user_id",
params={
"search_limit": 10,
"add_as_system_message": True,
"position": 1
}
)
来源:docs/integrations/pipecat.mdx:30-46
ElevenLabs 集成
ElevenLabs Conversational AI 允许将 Mem0 函数注册为 ClientTools。这使得语音代理能够通过函数调用自主决定何时存储或检索记忆。
记忆工具注册:
add_memories:注册为addMemories工具docs/integrations/elevenlabs.mdx:122-129。retrieve_memories:注册为retrieveMemories工具docs/integrations/elevenlabs.mdx:131-151。
client_tools = ClientTools()
client_tools.register("addMemories", add_memories, is_async=True)
client_tools.register("retrieveMemories", retrieve_memories, is_async=True)
来源:docs/integrations/elevenlabs.mdx:174-177
技术数据流
记忆检索与注入
在多模态和语音场景中,记忆会被检索并格式化到系统提示或对话历史中,以提供上下文。
| 平台 | 注入方法 | 关键函数/类 |
|---|---|---|
| Agno | 手动构建提示 | MemoryClient.search(...) docs/integrations/agno.mdx:129-130 |
| LiveKit | turn_ctx.add_message | AsyncMemoryClient.search(...) docs/integrations/livekit.mdx:116-134 |
| Pipecat | 管线中间件 | Mem0MemoryService docs/integrations/pipecat.mdx:53-63 |
| ElevenLabs | 函数工具输出 | retrieve_memories docs/integrations/elevenlabs.mdx:131-151 |
记忆持久化模式
对于语音代理,持久化通常在用户说完话或助手响应后执行,以确保捕获完整的上下文。
- 用户轮次持久化:LiveKit 在用户轮次完成时立即通过
mem0_client.add捕获用户消息docs/integrations/livekit.mdx:101-112。 - 交互持久化:Agno 和 Pipecat 存储
user和assistant消息对,以保留提示与响应之间的关系docs/integrations/agno.mdx:153-155,docs/integrations/pipecat.mdx:165-171。
语音与多模态最佳实践
1. 延迟管理
在语音环境(LiveKit、ElevenLabs)中使用 AsyncMemoryClient,以防止记忆操作阻塞音频流处理 docs/integrations/livekit.mdx:51-51, docs/integrations/elevenlabs.mdx:47-47。
2. 上下文过滤
在搜索时始终应用 filters={"user_id": user_id},以确保语音代理不会在不同用户之间泄漏记忆 docs/integrations/livekit.mdx:118-118, docs/integrations/agno.mdx:129-129。
3. 元数据利用
在元数据中存储模态信息(例如 {"category": "movie_recommendations"} 或 {"type": "preference"}),以支持过滤检索或分析 docs/open-source/node-quickstart.mdx:40-40, docs/integrations/agentops.mdx:97-97。
4. 语义阈值
在语音交互中,由于转录可能不完美(语音转文字错误),应调整搜索配置,以确保即使存在轻微的口语变化也能找到相关记忆 docs/integrations/pipecat.mdx:40-40。
来源:docs/integrations/agno.mdx:1-207, docs/integrations/livekit.mdx:1-184, docs/integrations/pipecat.mdx:1-213, docs/integrations/elevenlabs.mdx:1-215, docs/integrations/agentops.mdx:82-128, docs/open-source/node-quickstart.mdx:31-66