Name Last Update
..
README.md Loading commit data...
__init__.py Loading commit data...
bf16.py Loading commit data...
clip_as_service_encoder.py Loading commit data...
clip_model.py Loading commit data...
config.py Loading commit data...
image_encoder.py Loading commit data...
protocols.py Loading commit data...
redis_embedding_cache.py Loading commit data...
server.py Loading commit data...
text_embedding_sentence_transformers.py Loading commit data...
text_embedding_tei.py Loading commit data...
text_encoder.py Loading commit data...

README.md

Embeddings 模块

请求示例docs/QUICKSTART.md §3.3。 专项文档

  • ../docs/TEI_SERVICE说明文档.md
  • ../docs/CNCLIP_SERVICE说明文档.md

这个目录是一个完整的“向量化模块”,包含:

  • HTTP 客户端text_encoder.py / image_encoder.py(供搜索/索引模块调用)
  • 本地模型实现text_embedding_sentence_transformers.py / clip_model.py
  • clip-as-service 客户端clip_as_service_encoder.py(图片向量,推荐)
  • 向量化服务(FastAPI)server.py
  • 统一配置config.py
  • 接口契约protocols.ImageEncoderProtocol(图片编码统一为 encode_image_urls(urls, batch_size, normalize_embeddings),本地 CN-CLIP 与 clip-as-service 均实现该接口)

说明:历史上的云端 embedding 试验实现(DashScope)已从主仓库移除,当前仅维护 6005 这条统一向量服务链路。

文本向量后端(默认)

  • 6005 文本向量服务默认后端:TEI(Text Embeddings Inference)
  • 默认模型:Qwen/Qwen3-Embedding-0.6B
  • 后端配置来源:config/config.yaml -> services.embedding.backend/backends
  • 环境变量覆盖:EMBEDDING_BACKENDTEI_BASE_URLTEI_TIMEOUT_SEC

服务接口

  • POST /embed/text

    • 入参:["文本1", "文本2", ...]
    • 可选 query 参数:normalize=true|false(不传则使用服务端默认)
    • 出参:[[...], [...], ...](与输入按 index 对齐,失败直接报错)
  • POST /embed/image

    • 入参:["url或本地路径1", ...]
    • 可选 query 参数:normalize=true|false(不传则使用服务端默认)
    • 出参:[[...], [...], ...](与输入按 index 对齐,失败直接报错)

图片向量:clip-as-service(推荐)

默认使用 third-party/clip-as-service 的 Jina CLIP 服务生成图片向量。

  1. 安装 embedding 专用环境(首次使用):

    ./scripts/setup_embedding_venv.sh
    

    如需使用本地 local_st 文本后端,再执行:

    INSTALL_LOCAL_ST=1 ./scripts/setup_embedding_venv.sh
    
  2. 启动 CN-CLIP 服务(独立 gRPC 服务,默认端口 51000,详见 ../docs/CNCLIP_SERVICE说明文档.md):

    ./scripts/start_cnclip_service.sh
    
  3. 配置embeddings/config.py 或环境变量):

    • USE_CLIP_AS_SERVICE=true(默认)
    • CLIP_AS_SERVICE_SERVER=grpc://127.0.0.1:51000
    • CLIP_AS_SERVICE_MODEL_NAME=CN-CLIP/ViT-L-14
    • scripts/start_cnclip_service.sh 默认会读取同一个 CLIP_AS_SERVICE_MODEL_NAME,也可用 CNCLIP_MODEL_NAME--model-name 临时覆盖

启动服务

使用仓库脚本启动(默认端口 6005):

# GPU(需 nvidia-container-toolkit)
TEI_DEVICE=cuda ./scripts/start_tei_service.sh

# CPU
TEI_DEVICE=cpu ./scripts/start_tei_service.sh

./scripts/start_embedding_service.sh

修改配置

编辑 embeddings/config.py

  • PORT: 服务端口(默认 6005)
  • TEXT_MODEL_ID, TEXT_DEVICE, TEXT_BATCH_SIZE, TEXT_NORMALIZE_EMBEDDINGS
  • IMAGE_NORMALIZE_EMBEDDINGS(默认 true)
  • USE_CLIP_AS_SERVICE, CLIP_AS_SERVICE_SERVER, CLIP_AS_SERVICE_MODEL_NAME:图片向量(clip-as-service)
  • IMAGE_MODEL_NAME, IMAGE_DEVICE:本地 CN-CLIP(当 USE_CLIP_AS_SERVICE=false 时)
  • TEI 相关:TEI_DEVICETEI_VERSIONTEI_MAX_BATCH_TOKENSTEI_MAX_CLIENT_BATCH_SIZETEI_HEALTH_TIMEOUT_SEC