适用于个人开发、中小型项目的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 高质量检索、结构化问题任务
自定义类 灵活,可对接各种本地模型或量化模型 中文、多语言、自定义逻辑
相关推荐
TS的美梦2 小时前
scanpy单细胞转录组python教程(四):单样本数据分析之降维聚类及细胞注释
python·数据分析·聚类·单细胞转录组·scanpy
一涯3 小时前
用python写一个抓取股市关键词的程序
前端·python
yanxing.D4 小时前
OpenCV轻松入门_面向python(第三章图像运算)
人工智能·python·opencv
Ai财富密码5 小时前
Python 爬虫:Selenium 自动化控制(Headless 模式 / 无痕浏览)
爬虫·python·selenium
小五1276 小时前
数据科学与计算实例应用
开发语言·python
站大爷IP6 小时前
Python类型注解:让代码“开口说话”的隐形助手
python
站大爷IP7 小时前
Python多态实战:从基础到高阶的“魔法”应用指南
python
码界筑梦坊7 小时前
108-基于Python的中国古诗词数据可视化分析系统
python·信息可视化·数据分析·django·毕业设计·numpy
紫金修道7 小时前
python安装部署rknn-toolkit2(ModuleNotFoundError: No module named ‘rknn_toolkit2‘)
开发语言·python