适用于个人开发、中小型项目的Embedding方案(配合ChromaDB)

本地模型,可离线部署(免费)

类名 模型示例 模型来源 是否开源 说明
SentenceTransformerEmbeddingFunction all-MiniLM-L6-v2 bge-small-en gte-base-zh Hugging Face(sentence-transformers) 主流免费模型,支持本地运行,无需联网。体积小,速度快,适合入门和中小型项目。
InstructorEmbeddingFunction hkunlp/instructor-xl intfloat/e5-base Hugging Face 可带指令说明,如 "query:...",提升 query 对 passage 的匹配精度,RAG 中表现优异。
自定义类(需手写 wrapper) 任意 HuggingFace 模型(如 moka-ai/m3e-baseintfloat/multilingual-e5-base) 本地量化模型 Hugging Face / 本地下载 可使用自定义代码加载模型并生成向量,适合高级用户或特殊需求,如中文多语种、跨域场景。

付费方案:

类名 服务商 模型名示例 是否联网 定价情况
OpenAIEmbeddingFunction OpenAI text-embedding-3-small``text-embedding-ada-002 按 token 计费,约 $0.0001/1K tokens(Ada)
CohereEmbeddingFunction Cohere embed-english-light-v3.0``embed-multilingual-v3.0 按请求计费,具体看订阅计划,起步免费额度后按量计费
使用 SentenceTransformerEmbeddingFunction
python 复制代码
from chromadb.utils.embedding_functions import SentenceTransformerEmbeddingFunction

# 创建一个嵌入函数实例
embedding_fn = SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2")

# 对文本进行向量化
texts = ["China is a country", "Beijing is the capital"]
vectors = embedding_fn(texts)
print(vectors)  # 输出为二维数组,每行为一个向量

  • 使用 InstructorEmbeddingFunction(支持指令式格式)
python 复制代码
from chromadb.utils.embedding_functions import InstructorEmbeddingFunction

# e5/instructor 模型要求输入带前缀,例如 query: or passage:
embedding_fn = InstructorEmbeddingFunction(model_name="hkunlp/instructor-xl")

# 示例(用于检索任务)
texts = ["query: What is the capital of China?"]
vectors = embedding_fn(texts)
  • 使用"自定义类"

适用于需要特殊处理逻辑的情况

python 复制代码
from transformers import AutoTokenizer, AutoModel
import torch
import numpy as np

class MyEmbeddingFunction:
    def __init__(self, model_name="intfloat/multilingual-e5-base"):
        self.tokenizer = AutoTokenizer.from_pretrained(model_name)
        self.model = AutoModel.from_pretrained(model_name)

    def __call__(self, texts):
        # 前缀很重要
        inputs = self.tokenizer(["query: " + t for t in texts], return_tensors="pt", padding=True, truncation=True)
        with torch.no_grad():
            outputs = self.model(**inputs)
            embeddings = outputs.last_hidden_state[:, 0, :]  # [CLS] 向量
            return embeddings.cpu().numpy()

# 使用方法
embedding_fn = MyEmbeddingFunction()
vectors = embedding_fn(["你好,世界", "中国的首都是哪里?"])

可以把这个类传给 Chroma 的 embedding_function=... 参数来完成定制化集成。

省流选择总结

方案 特点 推荐场景
SentenceTransformerEmbeddingFunction 小巧,速度快,部署简单 快速开发、中小项目、嵌入不复杂
InstructorEmbeddingFunction 检索效果佳,适合加 prefix 高质量检索、结构化问题任务
自定义类 灵活,可对接各种本地模型或量化模型 中文、多语言、自定义逻辑
相关推荐
青春不朽5127 分钟前
TensorFlow 入门指南
人工智能·python·tensorflow
bioinfomatic11 分钟前
对比学习基本原理——以DrugClip为例,从CLIP到DrugClip
人工智能·python
-To be number.wan22 分钟前
Python数据分析:英国电商销售数据实战
开发语言·python·数据分析
细节处有神明24 分钟前
开源数据之历史气象数据的获取与使用
人工智能·python·算法
小白开始进步32 分钟前
JAKA Zu12 机械臂运动学算法深度解析(含可视化方案)
python·算法·numpy
2301_7644413340 分钟前
基于Genos模型的基因序列分析应用
人工智能·python
分享牛42 分钟前
LangChain4j从入门到精通-11-结构化输出
后端·python·flask
gentle coder1 小时前
【langchain】AI应用开发框架
langchain·llm·rag
嘿嘻哈呀1 小时前
Python类型检查和文档生成
python
闻哥2 小时前
深入理解 Spring @Conditional 注解:原理与实战
java·jvm·后端·python·spring