实战项目:Tavily 搜索、Deep Agent 与工具选择器

Published by rcdfrd on 2026-02-23

实战项目:Tavily 搜索、Deep Agent 与工具选择器

前面讲的都是基础组件,这篇看看它们在真实项目里怎么组合。三个案例:联网搜索 Agent、深度研究 Agent、工具选择中间件。

Tavily 搜索 Agent

Tavily 是专为 AI Agent 设计的搜索 API,返回结构化结果,比直接爬网页方便很多:

from tavily import TavilyClient
from langchain.agents import create_agent

tavily = TavilyClient()

def internet_search(query: str, max_results: int = 5,
                    topic: str = "general"):
    """Run a web search"""
    return tavily.search(query, max_results=max_results, topic=topic)

agent = create_agent(
    model="openai:gpt-4.1-mini",
    tools=[internet_search],
    system_prompt="你是一个研究专家,用搜索工具收集信息并写报告。",
)

topic 参数支持 general、news、finance,不同场景用不同值。

Deep Agent

deepagents 库提供了 create_deep_agent,自带规划、文件系统、子任务等能力:

from deepagents import create_deep_agent

agent = create_deep_agent(
    model=model,
    tools=[internet_search],
    system_prompt="你是研究专家,先规划步骤再执行。",
)

result = agent.invoke({"messages": [
    {"role": "user", "content": "深度研究 LangGraph 是什么,写调研报告"}
]})

Deep Agent 会自动拆解任务、分步执行、综合结果。适合复杂的研究类任务。

LLMToolSelectorMiddleware

工具多了,每次都把所有工具传给模型会浪费 token。LLMToolSelectorMiddleware 用一个轻量模型先筛选相关工具:

from langchain.agents.middleware import LLMToolSelectorMiddleware

agent = create_agent(
    model="openai:gpt-4.1-mini",
    tools=[tool_1, tool_2, tool_3, calculate, internet_search],
    middleware=[
        LLMToolSelectorMiddleware(
            model="openai:gpt-4o-mini",
            max_tools=2,
            always_include=["tool_4"],
        ),
    ],
)

max_tools=2 表示每次最多选 2 个相关工具传给主模型。always_include 指定必须包含的工具。这样既省 token 又提高准确率。

小结

Tavily 解决联网搜索问题,Deep Agent 解决复杂任务拆解问题,ToolSelector 解决工具多了的筛选问题。三个实战案例,三个不同的角度。