使用AzureOpenAI+Langchain搭建文档QA程序时GPT-4模型报错问题
解决Azure OpenAI GPT-4模型不支持补全操作的错误
问题场景
使用Azure OpenAI + LangChain搭建文档QA程序时,运行代码触发错误:
openai.error.InvalidRequestError: 指定的gpt-4模型不支持补全操作,请选择其他模型重试。
问题原因
LangChain中的AzureOpenAI类默认调用OpenAI的补全接口(Completion API),但Azure部署的GPT-4模型仅支持聊天接口(Chat Completion API),二者不兼容导致报错。
解决方案
将LLM实例从AzureOpenAI替换为AzureChatOpenAI(针对聊天接口的封装类),并确保导入对应的模块。
修改后的关键代码
- 导入
AzureChatOpenAI类:
from langchain.chat_models import AzureChatOpenAI
- 替换LLM初始化代码:
# 替换原有的AzureOpenAI初始化 llm = AzureChatOpenAI( openai_api_key=OPENAI_API_KEY, deployment_name=OPENAI_DEPLOYMENT_NAME, model_name=MODEL_NAME, temperature=0 # 可选:控制输出随机性,0表示更严谨 )
- 其余代码保持不变,
load_qa_chain可直接兼容AzureChatOpenAI实例,无需额外修改。
完整修改后代码片段(关键部分)
# 导入必要模块 from langchain.chat_models import AzureChatOpenAI from langchain.text_splitter import CharacterTextSplitter from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import FAISS from langchain.chains.question_answering import load_qa_chain from PyPDF2 import PdfReader # 初始化聊天模型(替换原AzureOpenAI) llm = AzureChatOpenAI( openai_api_key=OPENAI_API_KEY, deployment_name=OPENAI_DEPLOYMENT_NAME, model_name=MODEL_NAME, temperature=0 ) # PDF读取与文本提取 pdfReader = PdfReader('data\\borders.pdf') raw_text = '' for page in pdfReader.pages: text = page.extract_text() if text: raw_text += text # 文本分割 text_splitter = CharacterTextSplitter( separator = "\n", chunk_size = 1000, chunk_overlap = 200, length_function = len, ) pdfTexts = text_splitter.split_text(raw_text) # 嵌入生成与向量存储 embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY, deployment=OPENAI_EMBEDDING_MODEL_NAME, client="azure", chunk_size=1) pdfDocSearch = FAISS.from_texts(pdfTexts, embeddings) # 创建QA链并执行查询 chain = load_qa_chain(llm, chain_type="stuff") inquiry = "Who is the author of this book?" docs = pdfDocSearch.similarity_search(inquiry) chain.run(input_documents=docs, question=inquiry)
内容的提问来源于stack exchange,提问作者Lego Games
相关产品推荐
相关产品推荐

