适用于个人开发、中小型项目的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 高质量检索、结构化问题任务
自定义类 灵活,可对接各种本地模型或量化模型 中文、多语言、自定义逻辑
相关推荐
biter down11 小时前
从 0 到 1 搭建 Python 接口自动化测试框架(博客系统实战)
开发语言·python
肖永威13 小时前
Python多业务并行计算框架插件化演进:从硬编码到动态注册
python·插件化·并行计算·动态注册
yz_aiks13 小时前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
不知名的老吴13 小时前
线程的生命周期之线程“插队“
java·开发语言·python
xsc69967514 小时前
从零搭建大模型与智能体平台 - 完整技术详解
python
无风听海15 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask
CTA终结者16 小时前
期货量化主力换月程序怎么移仓:天勤 underlying_symbol 与任务切换
python·区块链
马士兵教育16 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
KaMeidebaby16 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
Cloud_Shy61816 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法