DocsGPT数据库设计:MongoDB与向量存储集成
1. MongoDB基础配置
MongoDB在DocsGPT中作为核心数据存储,负责管理用户数据、文档元信息和系统配置。其配置位于application/core/mongo_db.py,通过单例模式实现数据库连接池管理:
class MongoDB:
_client = None
@classmethod
def get_client(cls):
if cls._client is None:
cls._client = MongoClient(settings.MONGO_URI)
return cls._client
系统通过读取settings.MONGO_URI环境变量实现灵活部署,支持本地开发与云服务部署的无缝切换。
2. 向量存储集成架构
DocsGPT创新性地将MongoDB与向量检索结合,实现文档语义搜索功能。核心实现位于application/vectorstore/mongodb.py,其架构如下:
3. 核心实现细节
3.1 向量搜索实现
MongoDB向量搜索通过$vectorSearch聚合管道实现,关键代码:
pipeline = [
{
"$vectorSearch": {
"queryVector": query_vector,
"path": self._embedding_key,
"limit": k,
"numCandidates": k * 10,
"index": self._index_name,
"filter": {"source_id": {"$eq": self._source_id}},
}
}
]
3.2 批量插入优化
系统采用批量插入策略提升性能,默认批次大小为100条:
batch_size = 100
for i, (text, metadata) in enumerate(zip(texts, _metadatas)):
texts_batch.append(text)
metadatas_batch.append(metadata)
if (i + 1) % batch_size == 0:
result_ids.extend(self._insert_texts(texts_batch, metadatas_batch))
texts_batch = []
metadatas_batch = []
4. 索引设计
MongoDB向量索引定义示例:
index_mongo = {
"fields": [{
"type": "vector",
"path": self._embedding_key,
"numDimensions": dims,
"similarity": "cosine",
},
{
"type": "filter",
"path": "store"
}]
}
该设计同时支持向量相似度搜索和元数据过滤,显著提升检索效率。
5. 数据操作API
MongoDB向量存储提供完整的CRUD接口:
- 添加文档块:
add_chunk(text, metadata) - 获取文档块:
get_chunks() - 删除文档块:
delete_chunk(chunk_id) - 批量添加:
add_texts(texts, metadatas)
6. 系统集成要点
- 向量维度自动适配不同嵌入模型
- 支持多数据源隔离(通过
source_id过滤) - 错误处理与日志记录完善
- 与系统配置模块无缝集成
7. 使用场景
MongoDB向量存储在DocsGPT中主要支持:
- 文档语义搜索
- 上下文感知问答
- 相关文档推荐
- 知识库管理
通过这种设计,DocsGPT实现了高效、准确的文档检索功能,为开发者提供流畅的文档查询体验。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



