Debian12(Python3.11)无法安装sentence transformers,求SentenceTransformerEmbeddings替代方案
以下是几个无需依赖sentence-transformers的LangChain嵌入方案,均可在Python 3.11的Debian GNU/Linux 12环境部署:
1. OpenAIEmbeddings
若能调用OpenAI API,这是最省心的选择,无需本地部署模型,直接通过API生成嵌入:
from langchain.embeddings import OpenAIEmbeddings embeddings = OpenAIEmbeddings(openai_api_key="你的API密钥")
仅需安装依赖包:pip install langchain openai,完全绕开torch与sentence-transformers的安装问题。
2. 基于transformers库的HuggingFaceEmbeddings
不用sentence-transformers包,直接用底层transformers库加载模型,可手动控制torch安装(需本地模型时适用):
先安装依赖:pip install langchain transformers torch
代码初始化示例:
from langchain.embeddings import HuggingFaceEmbeddings model_name = "all-MiniLM-L6-v2" embeddings = HuggingFaceEmbeddings( model_name=model_name, model_kwargs={"device": "cpu"}, # 无GPU服务器可指定CPU encode_kwargs={"normalize_embeddings": True} )
若torch安装仍有问题,可尝试指定CPU版本安装:pip install torch --index-url https://download.pytorch.org/whl/cpu,避免手动查找适配whl文件。
3. CohereEmbeddings
与OpenAI逻辑类似,调用Cohere API生成嵌入,无需本地模型:
from langchain.embeddings import CohereEmbeddings embeddings = CohereEmbeddings(cohere_api_key="你的API密钥")
安装依赖:pip install langchain cohere
4. 纯transformers库实现本地嵌入
若必须用本地模型且不想依赖sentence-transformers,可直接用transformers库单独加载嵌入模型编码器,再封装为LangChain的Embeddings子类:
from transformers import AutoTokenizer, AutoModel import torch from langchain.embeddings.base import Embeddings from typing import List class CustomLocalEmbeddings(Embeddings): def __init__(self, model_name: str = "all-MiniLM-L6-v2"): self.tokenizer = AutoTokenizer.from_pretrained(model_name) self.model = AutoModel.from_pretrained(model_name) def embed_documents(self, texts: List[str]) -> List[List[float]]: inputs = self.tokenizer(texts, return_tensors="pt", padding=True, truncation=True) with torch.no_grad(): outputs = self.model(**inputs) embeddings = outputs.last_hidden_state.mean(dim=1).numpy() return embeddings.tolist() def embed_query(self, text: str) -> List[float]: return self.embed_documents([text])[0] # 使用示例 embeddings = CustomLocalEmbeddings()
此方案仅依赖transformers与torch,完全脱离sentence-transformers包。
内容的提问来源于stack exchange,提问作者Adam Gajewski

