Sign inSign up

netvn/honcho-bge-m3

By netvn

•Updated 5 months ago

Image
API management
Machine learning & AI
Databases & storage
0

1.2K

netvn/honcho-bge-m3 repository overview

⁠BGE-M3 1024 维度迁移指南

项目:Honcho
迁移版本:1536 维 (OpenAI) → 1024 维 (BGE-M3)
日期:2025-04-28
作者:NetVN


⁠📋 迁移概述

本次迁移将 Honcho 项目的默认向量嵌入维度从 1536(OpenAI text-embedding-3-small)更改为 1024(BAAI/bge-m3),以便支持本地化的 BGE-M3 模型使用。

⁠兼容性对照
模型维度状态
OpenAI text-embedding-3-small1536❌ 已弃用(需修改)
BAAI/bge-m31024✅ 新默认
BAAI/bge-large-zh-v1.51024✅ 兼容
sentence-transformers/all-MiniLM-L6-v2384⚠️ 需单独配置

⁠🗂️ 修改文件清单

⁠1. 核心配置 (src/)
文件行号修改内容
src/config.py683VECTOR_DIMENSIONS 默认值 1536 → 1024
src/config.py1178-1184VectorStoreSettings.DIMENSIONS 默认值 1536 → 1024
src/config.py1273-1279验证逻辑强制 1536 → 强制 1024
src/models.py281MessageEmbedding.embedding Vector(1536) → Vector(1024)
src/models.py389Document.embedding Vector(1536) → Vector(1024)
src/dreamer/surprisal.py362文档字符串 (N, 1536) → (N, 1024)
⁠2. 数据库迁移 (migrations/)
文件修改内容
migrations/versions/a1b2c3d4e5f6_initial_schema.pyCREATE TABLE documents: Vector(1536) → Vector(1024)
migrations/versions/917195d9b5e9_add_messageembedding_table.pyCREATE TABLE message_embeddings: Vector(1536) → Vector(1024)
migrations/versions/119a52b73c60_support_external_embeddings.pyALTER COLUMN embedding: Vector(1536) → Vector(1024)
⁠3. 配置文件示例
文件修改内容
.env.templateEMBEDDING_VECTOR_DIMENSIONS=1024
config.toml.exampleVECTOR_DIMENSIONS = 1024, DIMENSIONS = 1024
⁠4. 文档
文件修改内容
docs/v1/getting-started/architecture.mdx架构图中向量维度 1536 → 1024
docs/v3/contributing/configuration.mdx配置说明中所有维度引用

⁠🚀 使用方法

⁠环境配置(.env 或环境变量)
# 基础配置
EMBEDDING_TRANSPORT=openai
EMBEDDING_MODEL=BAAI/bge-m3
EMBEDDING_VECTOR_DIMENSIONS=1024

# 如果使用 Ollama 或本地服务
EMBEDDING_BASE_URL=http://localhost:11434/v1
EMBEDDING_API_KEY=ollama

# 向量存储配置(必须与 EMBEDDING_VECTOR_DIMENSIONS 一致)
VECTOR_STORE_TYPE=lancedb          # 推荐:LanceDB(支持维度更改)
# 或
VECTOR_STORE_TYPE=pgvector        # PostgreSQL(需要数据库迁移)
VECTOR_STORE_DIMENSIONS=1024
⁠使用 Docker(推荐)
services:
  honcho:
    image: plasticlabs/honcho:latest
    environment:
      - EMBEDDING_TRANSPORT=openai
      - EMBEDDING_MODEL=BAAI/bge-m3
      - EMBEDDING_VECTOR_DIMENSIONS=1024
      - VECTOR_STORE_TYPE=lancedb
    ports:
      - "8000:8000"

⁠⚠️ 重要注意事项

⁠1. 现有数据库迁移

如果你已有 1536 维的向量数据,需要执行以下步骤:

⁠方案 A:完全重新初始化(推荐,干净)
-- 1. 卸载扩展(如果存在)
DROP EXTENSION IF EXISTS vector CASCADE;

-- 2. 重新安装
CREATE EXTENSION vector;

-- 3. 重新运行迁移
alembic upgrade head
⁠方案 B:维度转换(复杂,仅参考)
-- 警告:此操作不可逆,请备份!
-- 1. 添加新列
ALTER TABLE documents ADD COLUMN embedding_1024 vector(1024);

-- 2. 重新计算嵌入(需要应用层支持)
-- 使用新的 1024 维模型重新生成

-- 3. 删除旧列
ALTER TABLE documents DROP COLUMN embedding;
ALTER TABLE documents RENAME COLUMN embedding_1024 TO embedding;
⁠2. 测试文件未修改

测试文件中的 1536 故意保留,用于验证迁移前行为。在开发环境中:

# 测试前确保配置正确
EMBEDDING_VECTOR_DIMENSIONS=1024 uv run pytest tests/
⁠3. 向量存储类型选择
存储类型维度更改友好度说明
LanceDB✅ 高本地嵌入式,支持动态维度
pgvector⚠️ 中需要 ALTER TABLE 操作
Turbopuffer❓ 未知云端服务,需检查 API

⁠✅ 验证步骤

⁠1. 检查配置加载
# 启动应用后检查
from src.config import settings
print(f"Vector Dimensions: {settings.EMBEDDING.VECTOR_DIMENSIONS}")
print(f"Vector Store Dims: {settings.VECTOR_STORE.DIMENSIONS}")
# 预期输出:
# Vector Dimensions: 1024
# Vector Store Dims: 1024
⁠2. 测试嵌入生成
from src.embedding_client import get_embedding_client

client = get_embedding_client()
embedding = client.embed("test")
print(f"Embedding shape: {len(embedding)}")  # 预期:1024
⁠3. 检查数据库 schema
SELECT 
    column_name, 
    data_type, 
    udt_name 
FROM information_schema.columns 
WHERE table_name IN ('documents', 'message_embeddings') 
  AND column_name = 'embedding';

预期输出:vector(1024)


⁠📝 迁移回退

如果出现问题,使用备份文件还原:

# 还原配置
cp src/config.py.bak.* src/config.py
cp src/models.py.bak.* src/models.py

# 还原迁移文件
cd migrations/versions/
for f in *.py.bak.*; do
    base=$(echo $f | sed 's/\.bak\..*//')
    cp "$f" "$base"
done

# 重新运行迁移
alembic downgrade -1
alembic upgrade head

⁠🔧 常见问题

Q: 为什么选择 1024 而不是其他值?
A: BGE-M3 是开源社区广泛使用的高质量嵌入模型,1024 维度在性能和精度之间取得平衡,支持多语言。

Q: 能同时支持 1536 和 1024 两种维度吗?
A: 不能。数据库 schema 固定为一种维度。混合使用需要分库或使用外部向量库。

Q: 修改后 uv run fastapi dev 报错怎么办?
A: 检查 EMBEDDING_VECTOR_DIMENSIONS 和 VECTOR_STORE_DIMENSIONS 是否均为 1024。


⁠📚 参考资源


迁移完成! 如遇问题,请检查日志或查看备份文件对比。

Tag summary

Content type

Image

Digest

sha256:70f4788ab…

Size

744.4 MB

Last updated

5 months ago

docker pull netvn/honcho-bge-m3