首页 教程 常见问题

Agent SDK 工具搜索

实现工具搜索——让代理在需要时动态发现和使用合适的工具。

什么是工具搜索

当你有很多工具时,不需要一次性把所有工具告诉代理。工具搜索让代理在需要时:

实现方式

class ToolRegistry:
    def __init__(self):
        self.tools = {}

    def register(self, name, description, schema, func):
        self.tools[name] = {
            "description": description,
            "schema": schema,
            "func": func
        }

    def search(self, query):
        """根据搜索词返回相关的工具。"""
        results = []
        for name, tool in self.tools.items():
            if query.lower() in name.lower() or                query.lower() in tool["description"].lower():
                results.append(name)
        return results[:5]  # 最多返回 5 个

    def get_tool(self, name):
        """获取工具的完整定义。"""
        return self.tools.get(name)

# 使用
registry = ToolRegistry()
registry.register(
    "search_database",
    "搜索数据库中的用户记录",
    {...},
    search_db
)

# 代理需要数据库相关工具时
matches = registry.search("database")
# 返回 ["search_database", "update_database", ...]

在代理循环中使用

def agent_with_tool_search(prompt):
    messages = [{"role": "user", "content": prompt}]

    # 第一步:让代理描述它需要什么
    response = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=256,
        messages=[
            {"role": "user", "content": prompt},
            {"role": "assistant", "content": "我需要做什么?"},
            {"role": "user", "content": "请描述你需要什么类型的工具。"}
        ]
    )

    need = response.content[0].text

    # 搜索匹配的工具
    matches = registry.search(need)

    # 加载匹配的工具
    available_tools = [
        registry.get_tool(m) for m in matches
    ]

    # 继续代理循环,使用可用工具

下一步