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_keyos.getenv(DASHSCOPE_API_KEY)staticmethoddefembedding(text_list:list[str]):vectors[]# 分批关键修复batch_size10foriinrange(0,len(text_list),batch_size):batchtext_list[i:ibatch_size]respTextEmbedding.call(modeltext-embedding-v3,inputbatch,api_keyEmbeddingUtil.api_key)ifnotresporresp.status_code!200:raiseException(fEmbedding失败:{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_size10如果一次性提交大量文本可能出现请求超时接口限流请求体过大因此采用分批策略foriinrange(0,len(text_list),batch_size):例如len(text_list)25将被拆分为第1批1~10第2批11~20第3批21~255. 调用 Embedding 模型respTextEmbedding.call(modeltext-embedding-v3,inputbatch,api_keyEmbeddingUtil.api_key)发送[新能源汽车,动力电池]返回{output:{embeddings:[{embedding:[...]},{embedding:[...]}]}}