在构建高级 AI Agent 或 RAG (Retrieval-Augmented Generation) 系统时,开发者们经常面临一个棘手的问题:如何从浩瀚的互联网中,快速、准确地获取最相关的信息?传统的搜索引擎虽然强大,但其结果充满了广告、SEO 优化内容和导航链接,对于需要纯净、高密度信息的 AI 模型来说,这无异于在噪音中寻找信号。

“垃圾进,垃圾出”(Garbage In, Garbage Out,简称 GIGO)。如果输入到AI模型中的训练数据是低质量、有偏见、不准确或不相关的上下文,那么模型产出的结果也必然是低质量、不可靠或有害的输出结果。

因此,当 AI Agent 进行网络搜索时,我们需要为 AI 提供一个专门为其设计的搜索引擎,该搜索引擎能理解 AI 的需求,直接返回干净、精炼、可直接用于模型推理的数据(高质量的上下文)。本文介绍一个专为 AI Agent 打造的搜索引擎 API:Tavily Search:https://tavily.com/https://link.zhihu.com/?target=https%3A//tavily.com/

什么是 Tavily Search?

简单来说,Tavily Search 是一个专为大型语言模型(LLM)和 AI Agent 优化的搜索引擎 API。它的目标不是服务于人类的日常搜索,而是成为 AI 应用的“外部知识大脑”,提供实时、准确、无干扰的搜索结果。

Tavily Search 不仅仅是一个简单的搜索接口,更是一个智能的信息处理层。当一个查询被发送到 Tavily 时,它会在后台执行复杂的搜索、抓取、过滤和信息提取流程,最终将最核心、最相关的内容整合起来 ,以一种对 LLM 友好的格式返回。

Tavily Search 的核心优势

Tavily 专为 AI 设计的特性:

  • 精准聚焦,专为 AI:不同于通用搜索引擎,Tavily 的算法经过特殊优化,能够更好地理解 AI Agent 的查询意图,过滤掉无关的“噪音”(如用户评论、广告、导航栏等),直接命中问题的核心信息。
  • 自动降噪,信息精炼:它能够自动对搜索到的网页内容进行清洗和提炼,将冗长的文章浓缩成关键事实和摘要。这意味着模型不再需要处理杂乱的 HTML 源码,而是可以直接使用高度结构化的信息。
  • ⚡️无缝集成,快速开发:Tavily 提供了清晰的 API 和完善的 Python 库,并且与 LangChain、LlamaIndex 等主流 AI 开发框架深度集成。开发者只需几行代码,就能让自己的 Agent 拥有强大的在线搜索能力。
  • 全面覆盖,兼顾速度:它能全面扫描互联网,并可以根据需求指定搜索深度、包含或排除特定域名,甚至聚焦于“新闻”、“学术”等特定领域,在保证信息广度的同时,也优化了响应速度。

在 LangChain 中使用 Tavily

下面通过一个简单的 Python 代码示例,展示在 LangChain 中集成 Tavily

1、获取 Tavily API key

在 https://www.tavily.com/ 的官网,使用邮箱注册账号(或,直接使用 github 账号登录):

获取 API Key

账号登录后,可以在 https://app.tavily.com/home 查看 API keys(每个月有 1000 次免费调用额度):

直接工具调用

1.设置环境变量

将 API keys 设置为环境变量 TAVILY_API_KEY

2、langchain-tavily 安装

运行以下命令,安装 langchain-tavily 包:

pip install langchain-tavily

3、Python 代码示例

import os
from langchain_tavily import TavilySearch
from dotenv import load_dotenv

load_dotenv(override=True)
# 强烈建议将 API 密钥设置为环境变量
os.environ["TAVILY_API_KEY"] = os.getenv("TAVILY_API_KEY")

# 初始化搜索工具
# max_results=3 表示我们希望获取前3个最相关的搜索结果
search = TavilySearch(max_results=3)

# 发起搜索查询
# 这里的查询是一个实际的、需要实时信息的问题
query = "2025年世俱杯决赛的对阵双方和最终比分是多少?"
results = search.invoke(query)

search_results = results["results"]  # 获取结果列表
for index, result in enumerate(search_results):
    print(f"结果 {index + 1} (相关性评分: {result['score']:.4f}):")
    print(f"  标题: {result['title']}")
    print(f"  来源: {result['url']}")
    print(f"  内容摘要: {result['content']}")
    print("-" * 30)

示例输出:

{
 'query': 'What happened at the last wimbledon',
 'follow_up_questions': None,
 'answer': None,
 'images': [],
 'results': [
   {'url': 'https://en.wikipedia.org/wiki/Wimbledon_Championships',
    'title': 'Wimbledon Championships - Wikipedia',
    'content': 'Due to the COVID-19 pandemic, Wimbledon 2020 was cancelled ...',
    'score': 0.62365627198,
    'raw_content': None},
   {'url': 'https://www.cbsnews.com/news/wimbledon-men-final-carlos-alcaraz-novak-djokovic/',
    'title': "Carlos Alcaraz beats Novak Djokovic at Wimbledon men's final to ...",
    'content': 'In attendance on Sunday was Catherine, the Princess of Wales ...',
    'score': 0.5154731446,
    'raw_content': None}
 ],
 'response_time': 2.3
}

对于追求更高质量、更少幻觉、更具时效性的 AI 应用开发者来说,Tavily Search 提供了一个极具吸引力的解决方案。它将复杂的网络信息检索工作变成了一个简单的 API调用,让开发者可以更专注于模型逻辑和应用创新本身。

可用参数

  • max_results(可选,整数):要返回的最大搜索结果数。默认值为 5。
  • topic(可选,字符串):搜索类别。可以是“general”、“news”或“finance”。默认值为“general”。
  • include_answer(可选,布尔值):是否在结果中包含对原始查询的回答。默认值为 False。
  • include_raw_content(可选,布尔值):是否包含每个搜索结果的已清理和解析的 HTML 代码。默认值为 False。
  • include_images(可选,布尔值):是否在响应中包含查询相关的图像列表。默认值为 False。
  • include_image_descriptions(可选,布尔值):是否为每张图片添加描述性文字。默认值为 False。
  • search_depth(可选,字符串):搜索深度,可以是“基本”或“高级”。默认值为“基本”。
  • time_range(可选,字符串):从当前日期(发布日期)向前推算的时间范围,用于筛选结果——“日”、“周”、“月”或“年”。默认值为 None。
  • start_date(可选,字符串):返回指定开始日期(发布日期)之后的所有结果。必须采用 YYYY-MM-DD 格式。默认值为 None。
  • end_date(可选,字符串):返回指定结束日期之前的所有结果。必须采用 YYYY-MM-DD 格式。默认值为 None。
  • include_domains(可选,List[str]):要包含的域名列表。最多 300 个域名。默认值为 None。
  • exclude_domains(可选,List[str]):要明确排除的域名列表。最多 150 个域名。默认值为 None。
  • include_usage(可选,布尔值):是否在响应中包含信用额度使用信息。默认值为 False。

与agent一起使用

from langchain.agents import  create_agent
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from rich import print
from langchain_tavily import TavilySearch
import os

load_dotenv(override=True)

#定义模型,调用的是ChatDeepseek()
model=init_chat_model(
    model='deepseek:deepseek-v4-pro'
)

#定义工具 使用内置的
web_search=TavilySearch(
    tavily_api_key=os.getenv("TAVILY_API_KEY"),
    # 返回条数
    max_results=2
)

agent=create_agent(
    model = model,
    tools = [web_search]
)

result = agent.invoke(
{"messages": [{"role": "user", "content": "请帮我查询2024年诺贝尔物理学奖得主是谁?"}]}
)
print(result)

提示:为了获得更相关且更具时效性的结果,请在系统提示中输入今天的日期。这有助于代理在搜索最新信息时理解当前上下文。例如:f"You are a helpful research assistant. Today's date is {datetime.today().strftime('%B %d, %Y')}. Use web search to find accurate, up-to-date information."

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐