langchain create_react_agent 报错variable tools should be a list of base messages
时间: 2025-08-01 12:20:59 AIGC 浏览: 19 评论: 4
<think>我们正在解决一个关于LangChain的create_react_agent方法使用时的错误。错误信息是:“variable tools should be a list of base messages”。根据这个错误,问题可能出在传递给`create_react_agent`方法的`tools`参数上。它期望的是一个由基础消息(base messages)组成的列表,但我们传递的可能不是。
在LangChain中,`create_react_agent`函数用于创建一个基于ReAct(Reasoning and Acting)框架的代理。它需要一些参数,其中包括一个工具列表(tools)。这些工具应该是实现了特定接口的对象,比如有`name`、`description`、`run`方法等。但是,错误提示说需要“base messages”,这有点令人困惑,因为通常工具应该是`Tool`类的实例。
回顾错误信息,它可能是指工具应该是一个由基础工具对象组成的列表。但是,错误信息中写的是“base messages”,这可能是代码内部的一个错误提示,实际应该是指工具列表。
根据引用[1]和[2]中的内容,我们并没有直接看到关于这个错误的解决方案。但是,我们可以从LangChain的文档和常见问题中推断。
通常,在LangChain中创建代理时,我们需要定义工具。例如,一个工具可以这样定义:
```python
from langchain.tools import Tool
def search_tool(query: str) -> str:
# 实现搜索功能
return "搜索结果"
tool = Tool(
name="Search",
func=search_tool,
description="用于搜索信息的工具"
)
```
然后,在创建代理时,我们会传递一个工具列表:
```python
tools = [tool]
```
但是,错误提示说需要“a list of base messages”,这让我们怀疑是否传递了错误的对象。可能的原因有:
1. 我们传递的工具列表中的对象不是`Tool`类的实例,而是其他东西(比如字符串或其他对象)。
2. 在LangChain的某些版本中,可能有不同的要求。
另外,引用[1]中提到在配置next.config.js时遇到问题,但这与我们的Python环境无关。引用[2]是关于如何设置环境来运行langchain-ChatGLM的,也没有直接相关。
因此,我们需要检查传递给`create_react_agent`的`tools`参数是否是一个由`Tool`对象组成的列表。
如果没有直接使用`Tool`类,而是使用了其他类型的工具(如自定义工具),请确保它们符合LangChain的工具接口。
另外,请注意LangChain的版本,因为不同版本的API可能有所变化。
如果问题仍然存在,我们可以尝试查看LangChain的官方文档或GitHub issues。引用[1]中提到了GitHub上的一个issue,我们可以去搜索类似的问题。
根据经验,一个常见的解决方案是确保工具列表中的每个工具都是正确的类型。我们可以打印一下工具列表中的每个元素的类型,确认是否为`Tool`类型。
例如:
```python
print([type(tool) for tool in tools])
```
期望的输出应该是类似:`[<class 'langchain.tools.base.Tool'>]`
如果不是,则需要调整工具的定义。
另外,错误信息中的“base messages”可能是笔误,实际上应该是“base tools”或类似的东西。或者,在最新的版本中,工具的定义方式发生了变化。
由于没有具体的代码,我们只能提供一般性建议。
如果用户仍然遇到问题,可以尝试以下步骤:
1. 确保使用最新版本的LangChain(或与文档匹配的版本)。
2. 检查传递给`create_react_agent`的工具列表是否是一个列表,且每个元素都是`Tool`的实例。
3. 查看LangChain的官方文档或GitHub issues中关于`create_react_agent`的示例。
下面是一个使用`create_react_agent`的简单示例(根据LangChain文档):
```python
from langchain.agents import create_react_agent
from langchain.agents.agent_toolkits import Tool
from langchain.llms import OpenAI
# 定义一个简单的工具
def dummy_func(input_str):
return "Hello, " + input_str
tool = Tool(name="DummyTool", func=dummy_func, description="一个示例工具")
tools = [tool]
# 初始化语言模型
llm = OpenAI(temperature=0)
# 创建代理
agent = create_react_agent(llm, tools, verbose=True)
```
如果按照上述方式定义,应该不会出现上述错误。
如果用户使用的是自定义工具,确保自定义工具类继承自`BaseTool`,并实现了必要的属性和方法。
如果问题仍然存在,请提供更多的代码上下文,以便进一步诊断。
由于用户没有提供具体的代码,我们只能给出一般性的解决步骤。
相关问题:
1. 如何正确定义LangChain中的工具?
2. LangChain中create_react_agent方法的使用示例?
3. 如何升级或降级LangChain版本以解决兼容性问题?
4. 在LangChain中,除了ReAct代理,还有哪些代理类型可用?
5. 如何调试LangChain中的代理执行过程?
希望这些信息能帮助用户解决问题。</think>### LangChain `create_react_agent` 错误解决方案
您遇到的错误 `'variable tools should be a list of base messages'` 通常是由于 **工具(tools)参数格式不正确** 导致的。以下是完整解决步骤:
---
### 错误原因分析
1. **工具参数格式错误**
`create_react_agent` 要求 `tools` 参数必须是 **`BaseTool` 对象组成的列表**,但实际传递的可能是:
- 普通函数而非 `Tool` 实例
- 字符串或其他无效对象
- 未正确初始化的工具类
2. **LangChain 版本兼容性问题**
不同版本对工具的定义方式有差异(如 `langchain-core` 和 `langchain-community` 的模块调整)[^1]。
---
### 解决方法
#### 步骤 1:正确定义工具列表
确保每个工具都是 `BaseTool` 的子类实例:
```python
from langchain.tools import Tool
# 正确工具定义示例
def search_api(query: str) -> str:
return f"Results for {query}"
tools = [
Tool(
name="Search",
func=search_api,
description="Useful for searching information"
),
# 添加更多工具...
]
```
#### 步骤 2:验证工具类型
在创建代理前检查工具类型:
```python
print(type(tools[0])) # 应输出 <class 'langchain_core.tools.BaseTool'>
```
#### 步骤 3:创建代理的标准代码
```python
from langchain.agents import create_react_agent
from langchain import hub
prompt = hub.pull("hwchase17/react") # 使用标准ReAct提示模板
agent = create_react_agent(
llm=your_llm_model, # 替换为您的LLM实例
tools=tools, # 确保是BaseTool列表
prompt=prompt
)
```
---
### 常见问题排查
1. **旧版兼容性问题**
如果使用旧版 LangChain(<0.1.0),尝试升级:
```bash
pip install -U langchain langchain-core
```
2. **模块导入错误**
确认导入路径正确(新版推荐):
```python
# 新版推荐导入方式
from langchain_core.tools import BaseTool
from langchain.agents import create_react_agent
```
3. **工具类未实现 `run` 方法**
自定义工具必须实现 `_run` 方法:
```python
from langchain.tools import BaseTool
class CustomTool(BaseTool):
name = "custom_tool"
description = "A custom tool"
def _run(self, input: str) -> str:
return f"Processed: {input}"
```
---
### 避免错误的完整示例
```python
from langchain.agents import create_react_agent
from langchain.tools import Tool
from langchain import hub
from langchain_community.llms import HuggingFaceEndpoint
# 1. 定义工具函数
def calculate(input: str) -> str:
return str(eval(input)) # 简单计算示例
# 2. 封装为BaseTool列表
tools = [
Tool(
name="Calculator",
func=calculate,
description="Performs math calculations"
)
]
# 3. 初始化模型
llm = HuggingFaceEndpoint(repo_id="google/flan-t5-large")
# 4. 创建代理
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt) # 不再报错
```
---
阅读全文
相关推荐




















评论

玛卡库克
2025.07.23
文章最后还包含了常见问题的排查方法,以及如何避免错误的示例,整体上是一篇质量较高的技术支持文档。

蓝洱
2025.06.16
文档中提到检查工具列表类型、确认LangChain版本以及参考官方文档等建议,对用户理解和解决问题非常有帮助。

黄涵奕
2025.06.11
该文档不仅提供了代码层面的错误诊断,还给出了具体的工具定义和代理创建示例,方便用户参考。

药罐子也有未来
2025.05.09
该文档详细分析了使用LangChain创建react_agent时遇到的错误,并提供了多种可能的解决方案,有助于用户解决相关问题。