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

使用create_react_agent创建React Agent报错:'str'无input_variables属性

问题原因及解决方案
  • 核心问题:变量名冲突
    代码存在变量名重复问题:一开始通过prompt=hub.pull("hwchase17/react")获取了LangChain的PromptTemplate对象,但后续用if prompt:=st.chat_input(...)将prompt变量覆盖成了用户输入的字符串。调用create_react_agent(model, tools, prompt)时,传入的是字符串而非PromptTemplate对象,因此触发'str' object has no attribute 'input_variables'错误。

  • 修复步骤

    1. 修改chat_input的变量名,避免覆盖PromptTemplate对象:将if prompt:=st.chat_input(...)改为if user_prompt:=st.chat_input(...),同步修改后续所有相关引用。
    2. 修复消息角色拼写错误:将assisstant改为assistant(session_state初始消息中的角色字段)。
    3. 正确处理AgentExecutor返回结果:search_agent.invoke()返回的是包含output键的字典,需提取response['output']作为助手回复内容,而非直接使用整个字典。
    4. 调整invoke参数:REACT Agent的Prompt期望接收单个input变量,因此调用search_agent.invoke()时需传入{"input": user_prompt}而非完整消息列表。
  • 修复后的完整代码

import streamlit as st 
from langchain_groq import ChatGroq 
from langchain_community.tools import DuckDuckGoSearchRun 
from langchain.agents import AgentExecutor, create_react_agent 
from langchain_community.callbacks.streamlit import StreamlitCallbackHandler 
from langchain import hub 
import os  
from dotenv import load_dotenv 
load_dotenv() 

os.environ['GROQ_API_KEY'] = os.getenv("GROQ_API_KEY") 
 
search = DuckDuckGoSearchRun(name="Search") 
prompt = hub.pull("hwchase17/react") 

st.title("🔎 LangChain - Chat with search") 

if "messages" not in st.session_state: 
    st.session_state["messages"] = [ 
        {"role":"assistant","content":"Hi,I'm a chatbot who can search the web. How can I help you?"} 
    ] 

for msg in st.session_state.messages: 
    st.chat_message(msg["role"]).write(msg['content']) 

if user_prompt := st.chat_input(placeholder="What is machine learning?"): 
    st.session_state.messages.append({"role":"user","content":user_prompt}) 
    st.chat_message("user").write(user_prompt) 

    model = ChatGroq(model_name="Llama3-8b-8192", streaming=True) 
    tools = [search] 
    agent = create_react_agent(model, tools, prompt) 

    search_agent = AgentExecutor(agent=agent, tools=tools) 

    with st.chat_message("assistant"): 
        st_cb = StreamlitCallbackHandler(st.container(), expand_new_thoughts=False) 
        response = search_agent.invoke({"input": user_prompt}, callbacks=[st_cb]) 
        assistant_response = response['output']
        st.session_state.messages.append({'role':'assistant',"content":assistant_response}) 
        st.write(assistant_response) 

内容的提问来源于stack exchange,提问作者Faraz Fazal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:13:16