Blame view

embeddings/CLOUD_EMBEDDING_README.md 7.63 KB
8c503501   tangwang   补充基于阿里云的embedding
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
  # 云端向量化模块 - 更新说明
  
  ## 📝 概述
  
  本次更新为 SearchEngine 项目添加了基于阿里云 DashScope API 的云端文本向量化功能,使用 `text-embedding-v4` 模型。
  
  ## 🎯 主要功能
  
  1. **CloudTextEncoder** - 云端文本向量化编码器
     - 单例模式,线程安全
     - 支持单个/批量文本向量化
     - 自动错误处理和降级
     - 生成 1024 维向量
  
  2. **测试脚本** - 使用 queries.txt 测试向量化
     - 读取前 100 条查询
     - 记录每次请求的时间和耗时
     - 统计成功率和性能指标
  
  3. **示例代码** - 展示如何使用模块
     - 单个文本向量化
     - 批量处理
     - 相似度计算
  
  ## 📁 文件结构
  
  ```
  SearchEngine/
  ├── embeddings/
  │   ├── cloud_text_encoder.py          # 云端向量化编码器(新增)
  │   ├── text_encoder.py                # 本地编码器(现有)
  │   └── ...
  ├── scripts/
  │   ├── test_cloud_embedding.py        # 测试脚本(新增)
  │   └── ...
  ├── examples/
  │   └── cloud_embedding_example.py     # 示例代码(新增)
  ├── docs/
  │   ├── cloud_embedding_usage.md       # 详细文档(新增)
  │   └── cloud_embedding_quickstart.md  # 快速入门(新增)
  ├── data_crawling/
  │   └── queries.txt                    # 测试数据
  ├── requirements.txt                    # 已添加 openai>=1.0.0
  └── CLOUD_EMBEDDING_README.md          # 本文档(新增)
  ```
  
  ## 🚀 快速开始
  
  ### 1. 安装依赖
  
  ```bash
  pip install openai
  ```
  
  或使用项目 requirements:
  ```bash
  pip install -r requirements.txt
  ```
  
  ### 2. 设置 API Key
  
  ```bash
  export DASHSCOPE_API_KEY="sk-your-api-key-here"
  ```
  
  获取 API Key:https://help.aliyun.com/zh/model-studio/get-api-key
  
  ### 3. 运行测试
  
  ```bash
  # 测试向量化(使用 queries.txt 前 100 条)
  python scripts/test_cloud_embedding.py
  
  # 运行示例代码
  python examples/cloud_embedding_example.py
  ```
  
  ## 📖 使用方法
  
  ### 基础使用
  
  ```python
  from embeddings.cloud_text_encoder import CloudTextEncoder
  
  # 初始化编码器
  encoder = CloudTextEncoder()
  
  # 单个文本向量化
  embedding = encoder.encode("衣服的质量杠杠的")
  print(embedding.shape)  # (1, 1024)
  
  # 批量向量化
  embeddings = encoder.encode(["文本1", "文本2", "文本3"])
  print(embeddings.shape)  # (3, 1024)
  ```
  
  ### 批量处理
  
  ```python
  # 大批量自动分批处理
  texts = [f"商品 {i}" for i in range(1000)]
  embeddings = encoder.encode_batch(texts, batch_size=32)
  ```
  
  ## 🧪 测试脚本
  
  测试脚本 `scripts/test_cloud_embedding.py` 功能:
  
  ✅ 读取 `data_crawling/queries.txt` 前 100 条查询  
  ✅ 逐条发送向量化请求  
  ✅ 记录每次请求的发送时间、接收时间、耗时  
  ✅ 输出向量维度和内容  
  ✅ 统计成功率、平均耗时、吞吐量  
  
  ### 测试输出示例
  
  ```
  ================================================================================
  Cloud Text Embedding Test - Aliyun DashScope API
  ================================================================================
  
  [  1/100] ✓ SUCCESS
    Query: Bohemian Maxi Dress
    Send Time:    2025-12-05 10:30:45.123
    Receive Time: 2025-12-05 10:30:45.456
    Duration:     0.333s
    Embedding Shape: (1, 1024)
  
  ...
  
  ================================================================================
  Test Summary
  ================================================================================
  Total Queries:     100
  Successful:        100
  Failed:            0
  Success Rate:      100.0%
  Total Time:        35.123s
  Total API Time:    32.456s
  Average Duration:  0.325s per query
  Throughput:        2.85 queries/second
  ================================================================================
  ```
  
  ## 📊 性能特点
  
  - **向量维度**:1024
  - **平均延迟**:300-400ms/请求
  - **吞吐量**:~2-3 queries/秒(单线程)
  - **错误处理**:自动降级到零向量
  - **批处理**:支持自动分批和速率控制
  
  ## 🔧 接口说明
  
  ### CloudTextEncoder API
  
  #### 初始化
  
  ```python
  CloudTextEncoder(api_key=None, base_url=None)
  ```
  
  参数:
  - `api_key` (str, optional): API Key,默认从环境变量读取
  - `base_url` (str, optional): API 端点,默认北京地域
  
  #### encode()
  
  ```python
  encode(sentences, normalize_embeddings=True, device='cpu', batch_size=32)
  ```
  
  参数:
  - `sentences` (str or List[str]): 单个文本或文本列表
  - `normalize_embeddings` (bool): 是否归一化(API 自动处理)
  - `device` (str): 设备参数(兼容性参数,云端 API 忽略)
  - `batch_size` (int): 批处理大小
  
  返回:
  - `np.ndarray`: 形状为 (n, 1024) 的 numpy 数组
  
  #### encode_batch()
  
  ```python
  encode_batch(texts, batch_size=32, device='cpu')
  ```
  
  参数:
  - `texts` (List[str]): 文本列表
  - `batch_size` (int): 批处理大小
  - `device` (str): 设备参数(兼容性参数)
  
  返回:
  - `np.ndarray`: 向量矩阵
  
  ## 📚 文档
  
  - **快速入门**`docs/cloud_embedding_quickstart.md`
  - **详细文档**`docs/cloud_embedding_usage.md`
  - **示例代码**`examples/cloud_embedding_example.py`
  
  ## ⚠️ 注意事项
  
  1. **API Key 管理**:妥善保管 API Key,不要提交到代码仓库
  2. **成本控制**:云端 API 按使用量计费,注意控制调用次数
  3. **速率限制**:注意 API 速率限制,测试脚本已添加延迟
  4. **网络依赖**:需要稳定的网络连接
  5. **错误处理**:API 失败时会返回零向量,请检查日志
  
  ## 🆚 对比本地编码器
  
  | 特性 | CloudTextEncoder | BgeEncoder (本地) |
  |------|------------------|-------------------|
  | 部署方式 | 云端 API | 本地服务 |
  | 初始成本 | 低 | 高(GPU/CPU) |
  | 运行成本 | 按使用付费 | 固定 |
  | 延迟 | ~300-400ms | <100ms |
  | 离线使用 | ❌ | ✅ |
  | 维护成本 | 低 | 需要维护 |
  | 扩展性 | 自动扩展 | 手动扩展 |
  
  ## 🔄 集成建议
  
  ### 选择使用场景
  
  **使用 CloudTextEncoder(云端):**
  - 初期开发和测试
  - 查询量不大的应用
  - 不需要离线支持
  - 希望降低运维成本
  
  **使用 BgeEncoder(本地):**
  - 大规模生产环境
  - 需要低延迟
  - 离线使用场景
  - 查询量非常大
  
  ### 混合使用
  
  ```python
  # 配置文件中选择编码器类型
  ENCODER_TYPE = os.getenv("ENCODER_TYPE", "local")  # local or cloud
  
  if ENCODER_TYPE == "cloud":
      from embeddings.cloud_text_encoder import CloudTextEncoder
      encoder = CloudTextEncoder()
  else:
      from embeddings.text_encoder import BgeEncoder
      encoder = BgeEncoder()
  
  # 使用统一接口
  embeddings = encoder.encode(texts)
  ```
  
  ## 🐛 故障排查
  
  ### 问题 1:API Key 未设置
  ```bash
  export DASHSCOPE_API_KEY="sk-your-key"
  ```
  
  ### 问题 2:网络连接失败
  - 检查网络连接
  - 验证 base_url 是否正确
  - 确认防火墙设置
  
  ### 问题 3:速率限制
  - 减小 batch_size
  - 增加请求间隔
  - 升级 API 套餐
  
  ### 问题 4:返回零向量
  - 检查日志中的错误信息
  - 验证 API Key 是否有效
  - 确认账户余额
  
  ## 🎓 示例代码
  
  查看 `examples/cloud_embedding_example.py` 了解完整示例:
  - 单个/批量文本向量化
  - 相似度计算
  - 错误处理
  
  ## 📞 支持
  
  - 项目文档:`docs/` 目录
  - 阿里云文档:https://help.aliyun.com/zh/model-studio/
  - API 文档:https://help.aliyun.com/zh/model-studio/getting-started/models
  
  ## ✅ 验证清单
  
  完成以下步骤确认模块正常工作:
  
  - [ ] 安装了 openai 包
  - [ ] 设置了 DASHSCOPE_API_KEY 环境变量
  - [ ] 运行测试脚本成功
  - [ ] 查看了示例代码
  - [ ] 阅读了文档
  
  ## 📅 更新日期
  
  2025-12-05
  
  ## 👨‍💻 维护
  
  如有问题或建议,请联系项目维护者。