Strands Python SDK 中工具调用方法变更详解
背景介绍
Strands Python SDK 是一个用于构建智能代理的开发框架,在最新版本中引入了一项重要的API变更——工具调用方式的调整。这项变更影响了开发者使用内存工具(memory)和LLM工具的方式,需要开发者特别注意。
问题现象
在早期版本中,开发者可以直接通过agent.memory()
的方式调用内存工具功能。但在最新版本中,这种调用方式会导致AttributeError: 'Agent' object has no attribute 'memory'
错误。类似地,mem0_memory工具也出现了导入问题。
技术解析
工具调用方式的演进
Strands SDK团队对工具调用方式进行了重构,主要变更点包括:
-
命名空间隔离:所有工具调用现在必须通过
.tool
属性访问,这是为了避免工具方法与Agent核心方法产生命名冲突。 -
导入路径规范化:内存工具应从
strands_tools
直接导入,而不是从strands_tools.memory
子模块导入。
正确使用方法
内存工具的正确调用
from strands import Agent
from strands_tools import memory, use_llm
# 初始化代理并添加工具
memory_agent = Agent(tools=[memory, use_llm])
# 存储内容到知识库
memory_agent.tool.memory(
action="store",
content="重要信息",
title="会议记录",
STRANDS_KNOWLEDGE_BASE_ID="示例ID"
)
# 从知识库检索内容
memory_agent.tool.memory(
action="retrieve",
query="会议信息",
min_score=0.7,
STRANDS_KNOWLEDGE_BASE_ID="示例ID"
)
mem0_memory工具的使用
mem0_memory工具在v0.1.1版本中已可用,安装更新后可以正常导入:
from strands_tools import mem0_memory
agent = Agent(tools=[mem0_memory])
升级注意事项
-
版本要求:确保安装了strands-agents-tools v0.1.1或更高版本。
-
代码迁移:检查现有代码中所有工具调用,将
agent.tool_name()
改为agent.tool.tool_name()
。 -
导入语句:统一使用
from strands_tools import tool_name
的导入方式。
设计考量
这种变更虽然带来了短期的不兼容,但从长期来看有以下优势:
-
清晰的命名空间:将工具方法与核心方法分离,提高代码可读性。
-
更好的扩展性:为未来可能添加的更多工具类型预留了空间。
-
减少冲突:避免工具名称与Agent内置方法名称冲突的风险。
总结
Strands Python SDK通过引入.tool
命名空间,为工具调用提供了更加规范和安全的访问方式。开发者应及时更新代码以适应这一变更,这将为后续的功能扩展和维护带来便利。对于遇到类似问题的开发者,检查工具调用语法和SDK版本是首要的排查步骤。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考