You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在本地为OpenAI模型创建嵌入向量(不调用官方嵌入API)

本地生成嵌入向量的实现方案(无需调用OpenAI Embeddings API)

一、选择适合本地运行的开源嵌入模型

优先挑选轻量、性能平衡的模型,适配企业机密文档的处理场景:

  • all-MiniLM-L6-v2:体积仅约100MB,运行速度快,文本嵌入效果接近OpenAI的text-embedding-ada-002,适合通用场景
  • bge-small-en-v1.5:对中文支持优异,生成的向量在中英文混合文档检索中表现突出
  • e5-small-v2:专为检索优化的模型,生成的向量更适配RAG(检索增强生成)场景

二、本地生成嵌入的具体实现方式

1. 基于Hugging Face Transformers直接运行模型

这是最灵活的原生方案,步骤简单且完全可控:

  • 先安装依赖:pip install transformers torch sentence-transformers
  • 示例代码:
from sentence_transformers import SentenceTransformer

# 首次运行自动下载模型到本地缓存,后续可指定本地路径离线加载
model = SentenceTransformer('all-MiniLM-L6-v2')
# 离线加载示例:model = SentenceTransformer('/your/local/model/path')

# 假设已完成机密文档的拆分处理
document_chunks = ["项目A保密条款片段...", "客户数据规范片段..."]

# 本地生成嵌入向量
embeddings = model.encode(document_chunks)

# 查看向量维度(all-MiniLM-L6-v2为384维)
print(f"向量维度:{embeddings.shape[1]}")

2. 用LangChain封装本地嵌入模型

如果已经在用LangChain搭建聊天机器人,直接集成更高效:

  • 安装依赖:pip install langchain sentence-transformers
  • 示例代码:
from langchain.embeddings import HuggingFaceEmbeddings

# 配置本地嵌入模型,支持CPU/GPU切换
embedding_model = HuggingFaceEmbeddings(
    model_name="all-MiniLM-L6-v2",
    model_kwargs={'device': 'cpu'},  # 有GPU则改为'cuda'
    encode_kwargs={'normalize_embeddings': True}
)

# 生成嵌入向量
text_chunks = ["机密文档片段1", "机密文档片段2"]
embeddings = embedding_model.embed_documents(text_chunks)

三、本地存储嵌入向量的方案

1. Chroma(轻量本地向量库)

纯Python实现,无需额外服务,适合中小规模文档:

from langchain.vectorstores import Chroma

# 将向量与文档存入本地磁盘
db = Chroma.from_texts(
    texts=document_chunks,
    embedding=embedding_model,
    persist_directory="./local_chroma_db"
)
db.persist()  # 持久化到本地

# 后续加载本地数据库
db = Chroma(persist_directory="./local_chroma_db", embedding_function=embedding_model)

2. FAISS(高效大规模向量库)

Facebook开源的检索库,适合处理大规模机密文档:

from langchain.vectorstores import FAISS

# 生成并存储向量
db = FAISS.from_texts(document_chunks, embedding_model)
# 保存到本地
db.save_local("./local_faiss_db")
# 加载本地库
db = FAISS.load_local("./local_faiss_db", embedding_model)

四、与OpenAI LLM API的整合流程

  1. 用户提问时,先从本地向量库检索相关文档片段:
user_query = "项目A的保密范围包含哪些内容?"
relevant_docs = db.similarity_search(user_query, k=3)
  1. 将检索到的文档作为上下文,构造Prompt调用OpenAI的Chat API:
from openai import OpenAI

client = OpenAI(api_key="your-api-key")

prompt = f"""
你是企业机密文档专属助手,仅依据提供的上下文回答问题:
上下文:{[doc.page_content for doc in relevant_docs]}
用户问题:{user_query}
"""

response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": prompt}]
)

print(response.choices[0].message.content)

五、安全注意事项

  • 模型文件、向量数据库必须存储在企业内部服务器或本地设备,禁止上传至外部云服务
  • 文档拆分时需遵循企业保密规范,避免敏感信息碎片化泄露
  • 若使用GPU运行模型,需确保硬件环境处于企业安全域内,不使用公共云GPU资源

内容的提问来源于stack exchange,提问作者Lance Kind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:37:47