| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- """
- 向量化工具
- 使用豆包的 doubao-embedding-vision-251215 模型生成向量嵌入
- """
- from typing import List
- from openai import OpenAI
- from ..core.ark_client import get_client
- class EmbeddingService:
- def __init__(self):
- self.embedding_model = "doubao-embedding-vision-251215"
- def generate_embeddings(self, texts: List[str], app_name: str) -> List[List[float]]:
- """
- 批量生成文本的向量嵌入
- :param texts: 文本列表
- :param app_name: 租户的appName(用于获取对应的API客户端)
- :return: 向量列表
- """
- if not texts:
- return []
- try:
- client = get_client(app_name)
- # 调用豆包的 Embeddings API
- response = client.embeddings.create(
- model=self.embedding_model,
- input=texts
- )
- # 提取向量
- embeddings = [item.embedding for item in response.data]
- return embeddings
- except Exception as e:
- print(f"向量化失败: {str(e)}")
- return []
- def generate_single_embedding(self, text: str, app_name: str) -> List[float]:
- """
- 生成单个文本的向量嵌入
- :param text: 文本内容
- :param app_name: 租户的appName
- :return: 向量
- """
- embeddings = self.generate_embeddings([text], app_name)
- return embeddings[0] if embeddings else []
- # 全局单例
- _embedding_service = None
- def get_embedding_service() -> EmbeddingService:
- """获取向量化服务单例"""
- global _embedding_service
- if _embedding_service is None:
- _embedding_service = EmbeddingService()
- return _embedding_service
|