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`
|