Blame view

embeddings/README.md 4.56 KB
42e3aea6   tangwang   tidy
1
2
3
  # Embeddings 模块
  
  **请求示例**`docs/QUICKSTART.md` §3.3。
bc089b43   tangwang   refactor(reranker...
4
5
6
  **专项文档**
  - `../docs/TEI_SERVICE说明文档.md`
  - `../docs/CNCLIP_SERVICE说明文档.md`
42e3aea6   tangwang   tidy
7
8
  
  ---
7bfb9946   tangwang   向量化模块
9
10
11
12
  
  这个目录是一个完整的“向量化模块”,包含:
  
  - **HTTP 客户端**`text_encoder.py` / `image_encoder.py`(供搜索/索引模块调用)
77516841   tangwang   tidy embeddings
13
  - **本地模型实现**`text_embedding_sentence_transformers.py` / `clip_model.py`
c10f90fe   tangwang   cnclip
14
  - **clip-as-service 客户端**`clip_as_service_encoder.py`(图片向量,推荐)
7bfb9946   tangwang   向量化模块
15
16
  - **向量化服务(FastAPI)**`server.py`
  - **统一配置**`config.py`
200fdddf   tangwang   embed norm
17
  - **接口契约**`protocols.ImageEncoderProtocol`(图片编码统一为 `encode_image_urls(urls, batch_size, normalize_embeddings)`,本地 CN-CLIP 与 clip-as-service 均实现该接口)
7bfb9946   tangwang   向量化模块
18
  
af03fdef   tangwang   embedding模块代码整理
19
  说明:历史上的云端 embedding 试验实现(DashScope)已从主仓库移除。当前默认部署为**文本服务 6005****图片服务 6008** 两条独立链路;`all` 模式仅作为单进程调试入口。
950a640e   tangwang   embeddings
20
21
22
  
  ### 文本向量后端(默认)
  
07cf5a93   tangwang   START_EMBEDDING=...
23
24
25
26
  - 6005 文本向量服务默认后端:`TEI`(Text Embeddings Inference)
  - 默认模型:`Qwen/Qwen3-Embedding-0.6B`
  - 后端配置来源:`config/config.yaml -> services.embedding.backend/backends`
  - 环境变量覆盖:`EMBEDDING_BACKEND`、`TEI_BASE_URL`、`TEI_TIMEOUT_SEC`
950a640e   tangwang   embeddings
27
  
7bfb9946   tangwang   向量化模块
28
29
  ### 服务接口
  
5bac9649   tangwang   文本 embedding 与图片 ...
30
31
  - 文本服务(默认 `6005`
    - `POST /embed/text`
af03fdef   tangwang   embedding模块代码整理
32
33
34
35
    - 请求体:`["文本1", "文本2", ...]`
    - 可选 query 参数:`normalize=true|false`
    - 返回:`[[...], [...], ...]`
    - 健康接口:`GET /health`、`GET /ready`
5bac9649   tangwang   文本 embedding 与图片 ...
36
37
  - 图片服务(默认 `6008`
    - `POST /embed/image`
af03fdef   tangwang   embedding模块代码整理
38
39
40
41
    - 请求体:`["url或本地路径1", ...]`
    - 可选 query 参数:`normalize=true|false`
    - 返回:`[[...], [...], ...]`
    - 健康接口:`GET /health`、`GET /ready`
7bfb9946   tangwang   向量化模块
42
  
5bac9649   tangwang   文本 embedding 与图片 ...
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  ### Redis 向量缓存
  
  - Value 格式没有变化,仍然是 **BF16 bytes**
    - 写入:`float32 -> BF16 -> bytes`
    - 读取:`bytes -> BF16 -> float32`
  - 现在是**双层缓存**
    - client 侧:`text_encoder.py` / `image_encoder.py`
    - service 侧:`server.py`
  - 当前主 key 格式:
    - 文本:`embedding:embed:norm{0|1}:{text}`
    - 图片:`embedding:image:embed:norm{0|1}:{url_or_path}`
  - 当前实现不再兼容历史 key 规则,只保留这一套格式,减少代码路径和缓存歧义。
  
  ### 压力隔离与拒绝策略
  
  - 文本与图片各自有独立 admission control:
    - `TEXT_MAX_INFLIGHT`
    - `IMAGE_MAX_INFLIGHT`
  - 图片服务可以配置得比文本更严格。
  - 请求若是 full-cache-hit,会在服务端直接返回,不占用模型并发槽位。
  - 超过处理能力时直接拒绝,比无限排队更稳定。
  
c10f90fe   tangwang   cnclip
65
66
67
68
  ### 图片向量:clip-as-service(推荐)
  
  默认使用 `third-party/clip-as-service` 的 Jina CLIP 服务生成图片向量。
  
07cf5a93   tangwang   START_EMBEDDING=...
69
  1. **安装 embedding 专用环境**(首次使用):
c10f90fe   tangwang   cnclip
70
     ```bash
07cf5a93   tangwang   START_EMBEDDING=...
71
72
73
74
75
     ./scripts/setup_embedding_venv.sh
     ```
     如需使用本地 `local_st` 文本后端,再执行:
     ```bash
     INSTALL_LOCAL_ST=1 ./scripts/setup_embedding_venv.sh
c10f90fe   tangwang   cnclip
76
77
     ```
  
bc089b43   tangwang   refactor(reranker...
78
  2. **启动 CN-CLIP 服务**(独立 gRPC 服务,默认端口 51000,详见 `../docs/CNCLIP_SERVICE说明文档.md`):
c10f90fe   tangwang   cnclip
79
80
81
82
83
84
85
     ```bash
     ./scripts/start_cnclip_service.sh
     ```
  
  3. **配置**`embeddings/config.py` 或环境变量):
     - `USE_CLIP_AS_SERVICE=true`(默认)
     - `CLIP_AS_SERVICE_SERVER=grpc://127.0.0.1:51000`
4747e2f4   tangwang   embedding perform...
86
87
     - `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` 临时覆盖
c10f90fe   tangwang   cnclip
88
  
7bfb9946   tangwang   向量化模块
89
90
  ### 启动服务
  
5bac9649   tangwang   文本 embedding 与图片 ...
91
  使用仓库脚本启动:
7bfb9946   tangwang   向量化模块
92
93
  
  ```bash
07cf5a93   tangwang   START_EMBEDDING=...
94
  # GPU(需 nvidia-container-toolkit)
af7ee060   tangwang   service_ctl 简化为“显...
95
  TEI_DEVICE=cuda ./scripts/start_tei_service.sh
07cf5a93   tangwang   START_EMBEDDING=...
96
97
  
  # CPU
af7ee060   tangwang   service_ctl 简化为“显...
98
  TEI_DEVICE=cpu ./scripts/start_tei_service.sh
07cf5a93   tangwang   START_EMBEDDING=...
99
  
5bac9649   tangwang   文本 embedding 与图片 ...
100
101
  ./scripts/start_embedding_text_service.sh
  ./scripts/start_embedding_image_service.sh
7bfb9946   tangwang   向量化模块
102
103
104
105
106
107
  ```
  
  ### 修改配置
  
  编辑 `embeddings/config.py`
  
af03fdef   tangwang   embedding模块代码整理
108
  - `PORT`: `all` 模式单进程端口(默认 6005)
950a640e   tangwang   embeddings
109
  - `TEXT_MODEL_ID`, `TEXT_DEVICE`, `TEXT_BATCH_SIZE`, `TEXT_NORMALIZE_EMBEDDINGS`
200fdddf   tangwang   embed norm
110
  - `IMAGE_NORMALIZE_EMBEDDINGS`(默认 true)
4747e2f4   tangwang   embedding perform...
111
  - `USE_CLIP_AS_SERVICE`, `CLIP_AS_SERVICE_SERVER`, `CLIP_AS_SERVICE_MODEL_NAME`:图片向量(clip-as-service)
c10f90fe   tangwang   cnclip
112
  - `IMAGE_MODEL_NAME`, `IMAGE_DEVICE`:本地 CN-CLIP(当 `USE_CLIP_AS_SERVICE=false` 时)
af7ee060   tangwang   service_ctl 简化为“显...
113
  - TEI 相关:`TEI_DEVICE`、`TEI_VERSION`、`TEI_MAX_BATCH_TOKENS`、`TEI_MAX_CLIENT_BATCH_SIZE`、`TEI_HEALTH_TIMEOUT_SEC`
5bac9649   tangwang   文本 embedding 与图片 ...
114
115
116
117
118
119
  - 分流/限流相关:
    - `EMBEDDING_SERVICE_KIND=all|text|image`
    - `EMBEDDING_TEXT_PORT`
    - `EMBEDDING_IMAGE_PORT`
    - `TEXT_MAX_INFLIGHT`
    - `IMAGE_MAX_INFLIGHT`