适用于个人开发、中小型项目的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-base、intfloat/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 高质量检索、结构化问题任务
自定义类 灵活,可对接各种本地模型或量化模型 中文、多语言、自定义逻辑
相关推荐
ragnwang7 小时前
Notes: Python pybind11 import C++ module
开发语言·c++·python
王中阳Go7 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
weixin_307779137 小时前
RAG 面试陷阱——混合检索并非无条件优越:一个条件反转实验
人工智能·python·面试·职场和发展
云和数据.ChenGuang8 小时前
深入解析 Python 的 dir():从用法到 CPython 源码实现
开发语言·人工智能·python·langchain
荣码11 小时前
长上下文与大文档处理:200页PDF怎么喂给AI,我踩了4个坑
java·python
databook12 小时前
Pandas 与 Polars:语法、性能和资源占用方面的对比
python·数据分析·pandas
威哥爱编程12 小时前
Python 智能体开发实战 10:本地跑得好好的,一并发就崩?把它做成一个能上线的服务
python·agent
威哥爱编程12 小时前
Python 智能体开发实战 09:改了提示词,到底是变好还是变坏?搭一套能打分的离线评测
python·agent
meiying883812 小时前
多快递公司快递单号批量查询接口怎么对接?Python 聚合查询实现
java·大数据·python
Hello_Pyhx12 小时前
Deep-Live-Cam 源码配置思路:环境、模型与执行后端分开排查
python