ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DashScope Embedding工具类详解(向量转换、Milvus知识库项目实战)

DashScope Embedding工具类详解(向量转换、Milvus知识库项目实战)

一、为什么需要Embedding?

在知识库项目中,Milvus 并不能直接存储和检索文本内容,而是需要先将文本转换成向量(Vector)。
例如:

新能源汽车 动力电池 电机控制系统

经过 Embedding 模型处理后:

[ 0.123, -0.456, 0.789, ... ]

这些向量会存入 Milvus,后续用户提问时再通过向量相似度检索相关知识。
本文使用阿里云 DashScope 的 text-embedding-v3 模型实现文本向量化。

二、工具类代码

importosfromdotenvimportload_dotenvfromdashscopeimportTextEmbedding load_dotenv()classEmbeddingUtil:api_key=os.getenv("DASHSCOPE_API_KEY")@staticmethoddefembedding(text_list:list[str]):vectors=[]# 🔥 分批(关键修复)batch_size=10foriinrange(0,len(text_list),batch_size):batch=text_list[i:i+batch_size]resp=TextEmbedding.call(model="text-embedding-v3",input=batch,api_key=EmbeddingUtil.api_key)ifnotresporresp.status_code!=200:raiseException(f"Embedding失败:{resp}")foriteminresp.output["embeddings"]:vectors.append(item["embedding"])returnvectors

三、代码解析

1. 加载环境变量
load_dotenv()

项目根目录创建 .env 文件:

DASHSCOPE_API_KEY=你的API_KEY

通过:

os.getenv("DASHSCOPE_API_KEY")

读取 API Key。

2.定义 Embedding 工具类
class EmbeddingUtil:

用于统一封装向量生成逻辑。

后续项目中只需要:

EmbeddingUtil.embedding(texts)

即可获得向量结果

3. 定义静态方法
@staticmethoddefembedding(text_list:list[str]):

参数:

["新能源汽车","动力电池","电机控制系统"]

返回:

[[0.12,0.45,...],[0.78,0.91,...],[0.34,0.56,...]]
4. 分批处理
batch_size=10

如果一次性提交大量文本,可能出现:

  • 请求超时
  • 接口限流
  • 请求体过大

因此采用分批策略:

foriinrange(0,len(text_list),batch_size):

例如:

len(text_list)=25

将被拆分为:

1批:1~102批:11~203批:21~25
5. 调用 Embedding 模型
resp=TextEmbedding.call(model="text-embedding-v3",input=batch,api_key=EmbeddingUtil.api_key)

发送:

["新能源汽车","动力电池"]

返回:

{"output":{"embeddings":[{"embedding":[...]},{"embedding":[...]}]}}
返回列表