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

Azure OpenAI结合FAISS构建向量索引报错求助

问题原因与解决方案

错误1:AttributeError: 'str' object has no attribute 'create'

核心原因是OpenAIEmbeddings初始化参数错误,以及潜在的类名与变量名冲突:

  • 初始化时使用client="azure"是错误配置,LangChain中配置Azure OpenAI Embeddings需用api_type="azure",并配合Azure专属参数,而非直接传字符串"azure"作为client。
  • 第一段代码将FAISS实例赋值给faiss变量,会覆盖导入的FAISS类(同一会话中),后续调用FAISS.from_documents时会引发逻辑混乱。

错误2:NotFoundError: 404

该错误由Azure OpenAI资源配置不正确导致:

  • base_url(Azure OpenAI端点)填写错误
  • deployment(Azure中部署的embedding模型名称)不匹配
  • api_version与Azure资源支持的版本不符

修正后的完整Azure OpenAI + FAISS文档检索示例

1. 安装依赖(未安装时执行)

pip install langchain langchain-openai faiss-cpu pypdf

注:LangChain v0.1+版本中,OpenAIEmbeddings已迁移至langchain-openai包,不再属于langchain.embeddings.openai

2. 可运行代码示例

# 导入依赖
from langchain.document_loaders import PyPDFLoader
from langchain_openai import AzureOpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 1. 加载并分割PDF文档
loader = PyPDFLoader("./data/machine_learning_yearning_by_andrew_ng.pdf")
documents = loader.load()

# 对文档分块(推荐步骤,避免单页文本过长影响嵌入效果)
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
split_docs = text_splitter.split_documents(documents)

# 2. 初始化Azure OpenAI Embeddings
embeddings = AzureOpenAIEmbeddings(
    azure_deployment="Oasis-embedding-3-small",  # Azure中部署的模型名称
    api_key="7b4xxxxxxxxxxxxxxxxx83c915553c1a",  # Azure OpenAI API密钥
    azure_endpoint="https://xxxxxxxxxx.openai.azure.com/",  # Azure OpenAI端点
    api_version="2024-02-01"  # 兼容的API版本
)

# 3. 创建FAISS向量索引
faiss_index = FAISS.from_documents(split_docs, embeddings)

# 4. 测试检索功能
query = "What is machine learning yearning about?"
results = faiss_index.similarity_search(query, k=2)

# 打印检索结果
for idx, doc in enumerate(results):
    print(f"Result {idx+1}:")
    print(doc.page_content[:300] + "..." if len(doc.page_content) > 300 else doc.page_content)
    print("---")

关键修正说明

  • 使用langchain_openai.AzureOpenAIEmbeddings替代旧版OpenAIEmbeddings,适配LangChain v0.1+标准用法
  • 移除错误的client="azure"参数,改用Azure专属配置项:azure_deployment、azure_endpoint、api_version
  • 增加文档分块步骤,提升检索精度(长文本直接嵌入易丢失细节)
  • 避免用faiss作为变量名,防止覆盖FAISS类

旧版LangChain(<0.1)兼容配置

若使用LangChain旧版本,可继续用原导入路径,但参数需调整:

from langchain.embeddings.openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",
    deployment="Oasis-embedding-3-small",
    openai_api_key="你的密钥",
    openai_api_base="https://xxxxxxxxxx.openai.azure.com/",
    openai_api_type="azure",
    openai_api_version="2024-02-01"
)

内容的提问来源于stack exchange,提问作者Saday Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:32:35