1.2K
项目: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-small | 1536 | ❌ 已弃用(需修改) |
| BAAI/bge-m3 | 1024 | ✅ 新默认 |
| BAAI/bge-large-zh-v1.5 | 1024 | ✅ 兼容 |
| sentence-transformers/all-MiniLM-L6-v2 | 384 | ⚠️ 需单独配置 |
| 文件 | 行号 | 修改内容 |
|---|---|---|
src/config.py | 683 | VECTOR_DIMENSIONS 默认值 1536 → 1024 |
src/config.py | 1178-1184 | VectorStoreSettings.DIMENSIONS 默认值 1536 → 1024 |
src/config.py | 1273-1279 | 验证逻辑强制 1536 → 强制 1024 |
src/models.py | 281 | MessageEmbedding.embedding Vector(1536) → Vector(1024) |
src/models.py | 389 | Document.embedding Vector(1536) → Vector(1024) |
src/dreamer/surprisal.py | 362 | 文档字符串 (N, 1536) → (N, 1024) |
| 文件 | 修改内容 |
|---|---|
migrations/versions/a1b2c3d4e5f6_initial_schema.py | CREATE TABLE documents: Vector(1536) → Vector(1024) |
migrations/versions/917195d9b5e9_add_messageembedding_table.py | CREATE TABLE message_embeddings: Vector(1536) → Vector(1024) |
migrations/versions/119a52b73c60_support_external_embeddings.py | ALTER COLUMN embedding: Vector(1536) → Vector(1024) |
| 文件 | 修改内容 |
|---|---|
.env.template | EMBEDDING_VECTOR_DIMENSIONS=1024 |
config.toml.example | VECTOR_DIMENSIONS = 1024, DIMENSIONS = 1024 |
| 文件 | 修改内容 |
|---|---|
docs/v1/getting-started/architecture.mdx | 架构图中向量维度 1536 → 1024 |
docs/v3/contributing/configuration.mdx | 配置说明中所有维度引用 |
# 基础配置
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
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"
如果你已有 1536 维的向量数据,需要执行以下步骤:
-- 1. 卸载扩展(如果存在)
DROP EXTENSION IF EXISTS vector CASCADE;
-- 2. 重新安装
CREATE EXTENSION vector;
-- 3. 重新运行迁移
alembic upgrade head
-- 警告:此操作不可逆,请备份!
-- 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;
测试文件中的 1536 故意保留,用于验证迁移前行为。在开发环境中:
# 测试前确保配置正确
EMBEDDING_VECTOR_DIMENSIONS=1024 uv run pytest tests/
| 存储类型 | 维度更改友好度 | 说明 |
|---|---|---|
| LanceDB | ✅ 高 | 本地嵌入式,支持动态维度 |
| pgvector | ⚠️ 中 | 需要 ALTER TABLE 操作 |
| Turbopuffer | ❓ 未知 | 云端服务,需检查 API |
# 启动应用后检查
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
from src.embedding_client import get_embedding_client
client = get_embedding_client()
embedding = client.embed("test")
print(f"Embedding shape: {len(embedding)}") # 预期:1024
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。
迁移完成! 如遇问题,请检查日志或查看备份文件对比。
Content type
Image
Digest
sha256:70f4788ab…
Size
744.4 MB
Last updated
5 months ago
docker pull netvn/honcho-bge-m3