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

基于LangChain与Llama Index构建Agentic RAG的函数调用错误排查

解决LangChain + Llama Index构建Agentic RAG的两类错误

错误1:AttributeError: 'LangChainLLM' object has no attribute 'model'

原因

Llama Index的FunctionCallingAgentWorker初始化时会检查LLM的model属性和metadata.is_function_calling_model标记,但LangChainLLM并未暴露内部LangChain模型的model属性,且传入的metadata未被正确映射到LangChainLLM的metadata中。

解决方案

手动给LangChainLLM实例补充model属性,并确保其metadata包含is_function_calling_model=True:

llm = LangChainLLM(llm=lc_llm_35)
# 绑定内部LangChain模型的model名称
llm.model = lc_llm_35.model
# 传递模型元数据标记
llm.metadata = lc_llm_35.metadata

错误2:bind_functions后提示"llm must be instance of LangChain BaseLanguageModel"

原因

bind_functions返回的是LangChain的Runnable对象,而非BaseLanguageModel子类,不符合LangChainLLM的输入类型要求。Llama Index的FunctionCallingAgentWorker会自行处理函数调用逻辑,无需在LangChain层提前绑定函数。

解决方案

移除bind_functions调用,直接使用原始AzureChatOpenAI实例传给LangChainLLM,由Llama Index负责函数调用的绑定与执行。

完整修正代码

主代码修改

from llama_index.core.agent import FunctionCallingAgentWorker
from llama_index.core.agent import AgentRunner
from src import custom_langchain
from llama_index.core import Settings
from llama_index.llms.langchain import LangChainLLM

custom_lc_obj = custom_langchain.CustomLangchain(api_key=pack_api_key)
# 创建AzureChatOpenAI实例,确保metadata标记函数调用支持
lc_llm_35 = custom_lc_obj.azure_chat_openai(
    model_name="gpt-35-turbo", 
    api_version="2024-02-15-preview", 
    metadata={"is_function_calling_model": True}, 
    model_param={"temp": 0, "presence_penalty": 0.1, "top_p": 0.98}
)

# 初始化LangChainLLM并补充必要属性
llm = LangChainLLM(llm=lc_llm_35)
llm.model = lc_llm_35.model
llm.metadata = lc_llm_35.metadata

Settings.llm = llm
Settings.embed_model = embedding

# 初始化AgentWorker,无需提前绑定函数
agent_worker = FunctionCallingAgentWorker.from_tools(
    tool_retriever=query_engine,
    llm=llm,
    system_prompt="""You are an agent designed to answer queries over a set of given papers.
    Please always use the tools provided to answer a question.Do not rely on prior knowledge.""",
    verbose=True
)
agent = AgentRunner(agent_worker)

可选优化:自定义LangChainLLM子类

如果需要复用逻辑,可创建子类避免重复赋值:

from llama_index.llms.langchain import LangChainLLM as BaseLangChainLLM

class CustomLangChainLLM(BaseLangChainLLM):
    def __init__(self, llm, **kwargs):
        super().__init__(llm=llm, **kwargs)
        self.model = llm.model
        self.metadata = llm.metadata

# 使用子类初始化LLM
llm = CustomLangChainLLM(llm=lc_llm_35)

关键说明

  1. Llama Index的FunctionCallingAgentWorker会通过metadata.is_function_calling_model自动识别支持函数调用的模型,无需手动在LangChain层绑定函数。
  2. 必须确保AzureChatOpenAI的metadata中is_function_calling_model设为True,否则会触发模型不支持函数调用的错误。

内容的提问来源于stack exchange,提问作者Jaehyuk Choi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:52:11