agentic_huge_data_base / wiki
页面 Mem0 · 16.3 Embedchain 数据源·DeepWiki 中文全文译文

16.3 · Embedchain 数据源

长期记忆与上下文管理 · 聚焦本章的模块关系、源码依据与实现要点。

项目Mem0 章节16.3 状态全文译文 模块记忆与上下文、测试、发布与运维、存储与持久化、界面与交互
源码线索
  • embedchain/docs/api-reference/app/add.mdx
  • embedchain/docs/mint.json
  • embedchain/docs/use-cases/chatbots.mdx
  • embedchain/embedchain/chunkers/base_chunker.py
  • embedchain/embedchain/data_formatter/data_formatter.py
  • embedchain/embedchain/deployment/gradio.app/requirements.txt
  • embedchain/embedchain/embedchain.py
  • embedchain/embedchain/loaders/base_loader.py
  • embedchain/embedchain/loaders/web_page.py
  • embedchain/embedchain/vectordb/chroma.py
模块标签
  • 记忆与上下文
  • 测试、发布与运维
  • 存储与持久化
  • 界面与交互
  • 模型调用与提供方适配

章节正文

Embedchain 数据源

Embedchain 数据源

相关源文件

以下文件为本 Wiki 页面的生成提供了上下文:

  • embedchain/docs/api-reference/app/add.mdx
  • embedchain/docs/mint.json
  • embedchain/docs/use-cases/chatbots.mdx
  • embedchain/embedchain/chunkers/base_chunker.py
  • embedchain/embedchain/data_formatter/data_formatter.py
  • embedchain/embedchain/deployment/gradio.app/requirements.txt
  • embedchain/embedchain/embedchain.py
  • embedchain/embedchain/loaders/base_loader.py
  • embedchain/embedchain/loaders/web_page.py
  • embedchain/embedchain/vectordb/chroma.py
  • embedchain/examples/chainlit/requirements.txt
  • embedchain/examples/discord_bot/requirements.txt
  • embedchain/tests/loaders/test_web_page.py

本文档描述了旧版 Embedchain 系统中使用的数据持久化层和数据模型。内容涵盖 DataSourceChatHistory 模型、数据库模式以及数据加载和持久化机制。

有关 Embedchain 整体系统架构及其与 Mem0 关系的详细信息,请参见 Embedchain 概述。有关配置 Embedchain 应用的详细信息,请参见 Embedchain 配置

数据库模型概述

Embedchain 使用 SQLAlchemy 持久化两种主要数据类型:

  1. 数据源:跟踪添加到应用中的每个源(URL、文件路径或原始文本)。
  2. 聊天历史:记录对话交互,用于上下文感知的聊天功能。

这些模型定义在 embedchain/embedchain/core/db/models.py 中,由 EmbedChainBaseLlm 类用于管理应用状态和记忆。

实体关系图
Mem0 · 实体关系图 · 图 1
Mem0 · 实体关系图 · 图 1

来源: embedchain/embedchain/core/db/models.py:10-31, embedchain/embedchain/embedchain.py:18-18

数据加载与处理流程

当用户调用 app.add() 时,系统会通过加载器和片段切分器管线处理源数据,然后将元数据持久化到数据库,将向量持久化到向量存储。

数据处理管线
Mem0 · 数据处理管线 · 图 2
Mem0 · 数据处理管线 · 图 2

来源: embedchain/embedchain/embedchain.py:117-182, embedchain/embedchain/data_formatter/data_formatter.py:12-35, embedchain/embedchain/chunkers/base_chunker.py:18-74, embedchain/embedchain/utils/misc.py:30-30

数据源去重

BaseChunker 使用内容与源 URL 的 SHA-256 哈希值生成 doc_idchunk_id embedchain/embedchain/chunkers/base_chunker.py:42-62WebPageLoader 也会基于清洗后的内容和 URL 计算 doc_id embedchain/embedchain/loaders/web_page.py:53-53。该哈希机制与 DataSource 模型配合使用,防止对相同数据进行重复嵌入 embedchain/embedchain/core/db/models.py:14-14

DataSource 模型

DataSource 模型跟踪所有已入库数据的元数据。

模式定义
列名类型描述
id字符串UUID v4 主键 embedchain/embedchain/core/db/models.py:12-12
app_id文本特定应用实例的标识符 embedchain/embedchain/core/db/models.py:13-13
hash文本用于去重的内容哈希 embedchain/embedchain/core/db/models.py:14-14
type文本DataType(例如 WEB_PAGE、PDF_FILE) embedchain/embedchain/core/db/models.py:15-15
value文本原始源 URL 或路径 embedchain/embedchain/core/db/models.py:16-16
meta_data文本与该源关联的 JSON 编码元数据 embedchain/embedchain/core/db/models.py:17-17

来源: embedchain/embedchain/core/db/models.py:10-20

聊天历史与 Mem0 集成

Embedchain 通过两种机制管理对话状态:旧版 ChatHistory 模型和现代 Mem0 集成。

旧版聊天历史

默认情况下,对话存储在本地 SQLite 数据库中。EmbedChain 实例在初始化时通过调用 self.llm.update_history(app_id=self.config.id) 来初始化历史记录 embedchain/embedchain/embedchain.py:90-90

Mem0 记忆集成

现代 Embedchain 应用可以使用 Mem0 实现长期记忆。EmbedChain 类包含 memory_configmem0_memory 属性 embedchain/embedchain/embedchain.py:65-66

聊天中的记忆流程
Mem0 · 聊天中的记忆流程 · 图 3
Mem0 · 聊天中的记忆流程 · 图 3

来源: embedchain/embedchain/embedchain.py:65-66, embedchain/embedchain/llm/base.py:22-22

数据库管理与迁移

Embedchain 使用集中式引擎设置和 Alembic 进行模式迁移。

引擎初始化

数据库引擎通常通过 SQLAlchemyManager 初始化。对于旧版组件,BaseVectorDB(例如 ChromaDB)管理自己的持久化层。ChromaDB 默认使用名为 db 的本地目录 embedchain/embedchain/vectordb/chroma.py:57-61

向量存储持久化(ChromaDB)

元数据存储在 SQL 中,而向量则由 ChromaDB 等提供程序管理。

# embedchain/embedchain/vectordb/chroma.py
if self.config.dir is None:
    self.config.dir = "db"
self.settings.persist_directory = self.config.dir
self.settings.is_persistent = True
self.client = chromadb.Client(self.settings)

来源: embedchain/embedchain/vectordb/chroma.py:29-64, embedchain/embedchain/embedchain.py:78-83