使用Azure LLM+Chroma构建LLM RAG Agent时遇functions参数错误求助
解决Azure LLM结合LangChain对话式检索Agent的"Unrecognized request argument supplied: functions"错误
环境信息
- langchain: 0.0.327
- langchain-community: 0.0.2
- langchain-core: 0.1.0
- 模型:Azure OpenAI gpt-35-turbo
- 向量库:Chroma(替代FAISS)
错误详情
运行代码时触发以下错误:
Entering new AgentExecutor chain... Traceback (most recent call last): File "RAGWithAgent.py", line 54, in <module> result = agent_executor({"input": "hi, im bob"}) File "\lib\site-packages\langchain\chains\base.py", line 310, in __call__ raise e File "\lib\site-packages\langchain\chains\base.py", line 304, in __call__ self._call(inputs, run_manager=run_manager) File "\lib\site-packages\langchain\agents\agent.py", line 1146, in _call next_step_output = self._take_next_step( File "\lib\site-packages\langchain\agents\agent.py", line 933, in _take_next_step output = self.agent.plan( File "\lib\site-packages\langchain\agents\openai_functions_agent\base.py", line 104, in plan predicted_message = self.llm.predict_messages( File "\lib\site-packages\langchain\chat_models\base.py", line 650, in predict_messages return self(messages, stop=_stop, **kwargs) File "\lib\site-packages\langchain\chat_models\base.py", line 600, in __call__ generation = self.generate( File "\lib\site-packages\langchain\chat_models\base.py", line 349, in generate raise e File "\lib\site-packages\langchain\chat_models\base.py", line 339, in generate self._generate_with_cache( File "\lib\site-packages\langchain\chat_models\base.py", line 492, in _generate_with_cache return self._generate( File "\lib\site-packages\langchain\chat_models\openai.py", line 357, in _generate return _generate_from_stream(stream_iter) File "\lib\site-packages\langchain\chat_models\base.py", line 57, in _generate_from_stream for chunk in stream: File "\lib\site-packages\langchain\chat_models\openai.py", line 326, in _stream for chunk in self.completion_with_retry( File "\lib\site-packages\langchain\chat_models\openai.py", line 299, in completion_with_retry return _completion_with_retry(**kwargs) File "\lib\site-packages\tenacity\__init__.py", line 289, in wrapped_f return self(f, *args, **kw) File "\lib\site-packages\tenacity\__init__.py", line 379, in __call__ do = self.iter(retry_state=retry_state) File "\lib\site-packages\tenacity\__init__.py", line 314, in iter return fut.result() File "D:\Program Files\Python38\lib\concurrent\futures\_base.py", line 432, in result return self.__get_result() File "D:\Program Files\Python38\lib\concurrent\futures\_base.py", line 388, in __get_result raise self._exception File "\lib\site-packages\tenacity\__init__.py", line 382, in __call__ result = fn(*args, **kwargs) File "\lib\site-packages\langchain\chat_models\openai.py", line 297, in _completion_with_retry return self.client.create(**kwargs) File "\lib\site-packages\openai\api_resources\chat_completion.py", line 25, in create return super().create(*args, **kwargs) File "\lib\site-packages\openai\api_resources\abstract\engine_api_resource.py", line 155, in create response, _, api_key = requestor.request( File "\lib\site-packages\openai\api_requestor.py", line 299, in request resp, got_stream = self._interpret_response(result, stream) File "\lib\site-packages\openai\api_requestor.py", line 710, in _interpret_response self._interpret_response_line( File "\lib\site-packages\openai\api_requestor.py", line 775, in _interpret_response_line raise self.handle_error_response( openai.error.InvalidRequestError: Unrecognized request argument supplied: functions Process finished with exit code 1
问题代码
from langchain.text_splitter import CharacterTextSplitter from langchain.document_loaders import TextLoader from langchain.agents.agent_toolkits import create_retriever_tool from langchain.agents.agent_toolkits import create_conversational_retrieval_agent from langchain.chat_models import AzureChatOpenAI from langchain.vectorstores import Chroma from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings import os AZURE_OPENAI_API_KEY = "" os.environ["OPENAI_API_KEY"] = AZURE_OPENAI_API_KEY loader = TextLoader(r"Toward a Knowledge Graph of Cybersecurity Countermeasures.txt") documents = loader.load() text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) chunks = text_splitter.split_documents(documents) # create the open-source embedding function embedding_function = SentenceTransformerEmbeddings(model_name="all-mpnet-base-v2") current_directory = os.path.dirname("__file__") # load it into Chroma and save it to disk db = Chroma.from_documents(chunks, embedding_function, collection_name="groups_collection", persist_directory=r"\rag_with_agent_chroma_db") retriever = db.as_retriever(search_kwargs={"k": 5}) tool = create_retriever_tool( retriever, "search_state_of_union", "Searches and returns documents regarding the state-of-the-union.", ) tools = [tool] llm = AzureChatOpenAI( deployment_name='gtp35turbo', model_name='gpt-35-turbo', openai_api_key=AZURE_OPENAI_API_KEY, openai_api_version='2023-03-15-preview', openai_api_base='https://azureft.openai.azure.com/', openai_api_type='azure', streaming=True, verbose=True ) agent_executor = create_conversational_retrieval_agent(llm, tools, verbose=True, remember_intermediate_steps=True, memory_key="chat_history") result = agent_executor({"input": "hi, im bob"}) print(result["output"])
解决方案
原因分析
create_conversational_retrieval_agent默认使用OpenAI Functions Agent,会向LLM API发送functions参数,但你配置的Azure OpenAI API版本2023-03-15-preview不支持该参数,因此触发错误。
方案1:升级Azure OpenAI API版本
将Azure API版本升级到支持函数调用的版本(如2023-10-01-preview或更高),修改AzureChatOpenAI的参数:
llm = AzureChatOpenAI( deployment_name='gtp35turbo', model_name='gpt-35-turbo', openai_api_key=AZURE_OPENAI_API_KEY, openai_api_version='2023-10-01-preview', # 修改此处 openai_api_base='https://azureft.openai.azure.com/', openai_api_type='azure', streaming=True, verbose=True )
方案2:切换到兼容旧API的Agent类型
如果无法升级API版本,使用STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION类型的Agent,它使用旧版工具调用格式,不依赖functions参数。修改后的完整代码如下:
from langchain.text_splitter import CharacterTextSplitter from langchain.document_loaders import TextLoader from langchain.agents.agent_toolkits import create_retriever_tool from langchain.chat_models import AzureChatOpenAI from langchain.vectorstores import Chroma from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings # 新增导入 from langchain.agents import initialize_agent, AgentType from langchain.memory import ConversationBufferMemory import os AZURE_OPENAI_API_KEY = "" os.environ["OPENAI_API_KEY"] = AZURE_OPENAI_API_KEY loader = TextLoader(r"Toward a Knowledge Graph of Cybersecurity Countermeasures.txt") documents = loader.load() text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) chunks = text_splitter.split_documents(documents) embedding_function = SentenceTransformerEmbeddings(model_name="all-mpnet-base-v2") db = Chroma.from_documents(chunks, embedding_function, collection_name="groups_collection", persist_directory=r"\rag_with_agent_chroma_db") retriever = db.as_retriever(search_kwargs={"k": 5}) tool = create_retriever_tool( retriever, "search_state_of_union", "Searches and returns documents regarding the state-of-the-union.", ) tools = [tool] llm = AzureChatOpenAI( deployment_name='gtp35turbo', model_name='gpt-35-turbo', openai_api_key=AZURE_OPENAI_API_KEY, openai_api_version='2023-03-15-preview', openai_api_base='https://azureft.openai.azure.com/', openai_api_type='azure', streaming=True, verbose=True ) # 创建对话记忆 memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) # 初始化结构化对话Agent agent_executor = initialize_agent( tools, llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True, memory=memory ) result = agent_executor({"input": "hi, im bob"}) print(result["output"])
内容的提问来源于stack exchange,提问作者Ameya
相关产品推荐
相关产品推荐

