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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:29:55