【Python】tavily 库: 与 Tavily 搜索 API 交互的工具

Python 的 tavily 库(tavily-python)是一个用于与 Tavily 搜索 API 交互的 Python 包装器,旨在为 AI 代理和大型语言模型(LLMs)提供实时、准确的 Web 搜索和内容提取功能。它由 Tavily AI 开发,支持同步和异步客户端,适合集成到 Python 应用程序中以增强搜索、问答和内容爬取能力。以下是对 tavily 库的详细介绍,内容以中文输出,结构清晰有序,涵盖定义、安装、核心功能、使用方法、性能、适用场景、注意事项及最佳实践,基于官方文档和相关资源(如 Tavily Docstavily-python · PyPI)。


1. 什么是 tavily 库?

tavily 库是 Tavily 公司开发的 Python SDK,用于简化与 Tavily 搜索 API 的交互。Tavily API 是一个专为 AI 代理和 LLMs 优化的搜索引擎,提供实时、准确、可验证的搜索结果,特别适合检索增强生成(RAG)等 AI 工作流。根据 Tavily Docstavily 库支持搜索、问答、内容提取、网站爬取和站点映射等功能,易于集成到 Python 项目中。

核心特点:

  • AI 优化:专为 AI 代理设计,提供简洁、准确的搜索结果。
  • 多功能:支持搜索、问答、内容提取、爬取和站点映射。
  • 同步和异步:提供 TavilyClientAsyncTavilyClient,适应不同场景。
  • 可定制:支持搜索深度、域名过滤、结果数量等参数。
  • 易用性:通过简单的 API 密钥认证,提供直观的 Python 接口。

2. 安装 tavily

2.1 安装方法

通过 pip 安装 tavily-python

pip install tavily-python 

安装后,可验证版本:

python -c"import tavily; print(tavily.__version__)"

输出示例:0.7.3

2.2 依赖要求

  • Python 版本:3.8 或以上。
  • 必需依赖requests(用于 HTTP 请求),自动安装。
  • 可选依赖
    • aiohttp:异步客户端(AsyncTavilyClient)所需。
    • cohere:用于 Tavily Hybrid RAG 的嵌入和排名功能(需单独安装)。
    • pydantic:某些集成(如 AutoGen)可能需要,用于数据验证。

2.3 获取 API 密钥

使用 tavily 库需 Tavily API 密钥:

  1. 访问 Tavily 官网,注册账户。
  2. 在用户仪表板获取 API 密钥(格式如 tvly-YOUR_API_KEY)。

设置环境变量(推荐):

exportTAVILY_API_KEY="tvly-YOUR_API_KEY"

或在代码中直接传递:

from tavily import TavilyClient client = TavilyClient(api_key="tvly-YOUR_API_KEY")

2.4 注意事项

  • 确保网络连接稳定,API 调用依赖互联网。
  • 免费账户提供每月 1,000 次 API 信用,超出需升级付费计划(参考 Tavily Docs: Rate Limits)。
  • Windows 用户可能需安装 pip 和 Python 环境,推荐使用虚拟环境。

3. 核心功能

tavily 库封装了 Tavily API 的多种功能,适用于搜索、问答和内容处理。以下是主要功能:

  1. 搜索(Search)
    • 执行 Web 搜索,返回结构化的结果(如标题、URL、内容片段)。
    • 支持基本(basic)和高级(advanced)搜索深度。
    • 可定制域名过滤、结果数量等。
  2. 问答(Q&A Search)
    • 直接返回查询的简洁答案,适合 LLM 集成。
    • 示例:查询“谁是 Lionel Messi?”返回简短的事实性回答。
  3. 内容提取(Extract)
    • 从指定 URL 提取清洗后的 HTML 内容,支持批量提取(最多 20 个 URL)。
    • 可包括图像和描述。
  4. 网站爬取(Crawl)
    • 从起始 URL 开始爬取,提取相关页面内容。
    • 支持最大深度和结果限制,带指导指令(如“仅提取柑橘类水果页面”)。
  5. 站点映射(Map)
    • 分析网站结构,返回页面 URL 列表。
    • 适合探索网站导航或内容组织。
  6. 混合 RAG(Hybrid RAG)
    • 结合 Web 搜索和数据库检索(如 MongoDB),用于增强生成。
    • 需 Cohere API 密钥和 MongoDB 配置。

表 1:tavily 核心功能

功能描述示例场景
搜索Web 搜索,返回结构化结果研究最新新闻、查找资料
问答直接回答查询,适合 LLM构建问答机器人
内容提取从 URL 提取清洗内容分析网页数据
网站爬取爬取相关页面内容收集专题信息
站点映射返回网站结构网站分析、导航提取
混合 RAG结合 Web 和数据库检索增强 AI 知识库

4. 使用方法与示例

以下是 tavily 库的主要使用场景和代码示例,基于 Tavily DocsGitHub: tavily-python

4.1 基本搜索

执行简单的 Web 搜索,返回结构化结果。

示例

from tavily import TavilyClient # 初始化客户端 client = TavilyClient(api_key="tvly-YOUR_API_KEY")# 执行搜索 response = client.search("Python 3.12 新特性")print(response)

输出(简化)

{"query":"Python 3.12 新特性","results":[{"title":"What's New In Python 3.12","url":"https://docs.python.org/3/whatsnew/3.12.html","content":"Python 3.12 introduces new syntax for type annotations..."},...],"response_time":1.67}

说明

  • search 方法返回字典,包含查询、结果和响应时间。
  • 可通过 search_depth="advanced" 提高结果质量。

4.2 问答搜索

直接获取查询的简洁答案。

示例

answer = client.qna_search(query="谁是 Lionel Messi?")print(answer)

输出

Lionel Messi 是阿根廷职业足球运动员,广泛认为是足球史上最伟大的球员之一。 

说明

  • qna_search 适合需要快速答案的场景,如聊天机器人。
  • 答案由 Tavily 的 LLM 基于搜索结果生成。

4.3 内容提取

从指定 URL 提取内容。

示例

urls =["https://en.wikipedia.org/wiki/Artificial_intelligence","https://en.wikipedia.org/wiki/Machine_learning"] response = client.extract(urls, include_images=True)for result in response["results"]:print(f"URL: {result['url']}")print(f"内容: {result['raw_content'][:200]}...")

输出(简化)

URL: https://en.wikipedia.org/wiki/Artificial_intelligence 内容: Artificial intelligence (AI) is the intelligence of machines or software... 

说明

  • 支持最多 20 个 URL,include_images=True 返回图像 URL 和描述。
  • extract_depth 可设为 basicadvanced

4.4 网站爬取

从起始 URL 爬取相关页面。

示例

response = client.crawl( url="https://wikipedia.org/wiki/Lemon", max_depth=3, limit=50, instructions="仅提取关于柑橘类水果的页面")for result in response["results"]:print(f"URL: {result['url']}")print(f"片段: {result['raw_content'][:200]}...")

输出(简化)

URL: https://wikipedia.org/wiki/Orange_(fruit) 片段: The orange is the fruit of various citrus species in the family Rutaceae... 

说明

  • instructions 参数指导爬取内容,增强相关性。
  • max_depth 控制爬取层级,limit 限制结果数量。

4.5 站点映射

分析网站结构。

示例

response = client.map( url="https://docs.tavily.com", max_depth=2, instructions="查找 Python SDK 相关页面")for url in response["results"]:print(url)

输出

https://docs.tavily.com/sdk/python/quick-start https://docs.tavily.com/sdk/python/reference ... 

说明

  • 返回站点内的 URL 列表,适合分析网站导航。

4.6 异步客户端

使用 AsyncTavilyClient 进行异步操作。

示例

import asyncio from tavily import AsyncTavilyClient asyncdefmain(): client = AsyncTavilyClient(api_key="tvly-YOUR_API_KEY") response =await client.search("Python 异步编程")print(response) asyncio.run(main())

说明

  • 异步客户端适合高并发场景,如 Web 爬虫。
  • 接口与同步客户端相同,仅方法需 await

4.7 集成 LangChain

与 LangChain 结合,增强 AI 代理。

示例

from langchain_community.retrievers import TavilySearchAPIRetriever retriever = TavilySearchAPIRetriever(k=3, api_key="tvly-YOUR_API_KEY") results = retriever.invoke("Python 3.12 新特性")print(results)

说明

  • 需要安装 langchain-communitytavily-python
  • 适合构建 RAG 应用。

5. 性能分析

研究表明,tavily 库在搜索和内容提取方面表现出色,尤其在以下方面:

  • 响应速度:API 响应时间通常在 0.02-2 秒(参考 Tavily Docs),适合实时应用。
  • 准确性:使用先进算法和 NLP 技术,从可信源(如维基百科)提取数据,确保结果可靠。
  • 可扩展性:支持高并发请求,免费账户每月 1,000 次信用,付费计划可扩展。

性能测试示例

import time from tavily import TavilyClient client = TavilyClient(api_key="tvly-YOUR_API_KEY") start = time.time() response = client.search("Python 3.12 新特性", search_depth="advanced")print(f"响应时间: {time.time()- start:.2f} 秒")

输出响应时间: 1.67 秒

与替代方案比较

  • 相比 Google 搜索 API,Tavily 更专注 AI 工作流,答案更简洁。
  • 相比 requests + BeautifulSoup 爬虫,tavily 提供清洗数据,减少开发工作量。

6. 适用场景

tavily 库适用于以下场景:

  1. AI 代理和聊天机器人
    • 使用 qna_search 提供实时问答。
    • 示例:构建基于 LLM 的知识问答系统。
  2. Web 爬虫
    • 使用 crawlmap 收集专题数据。
    • 示例:研究柑橘类水果的维基百科页面。
  3. 数据分析
    • 使用 extract 从网页提取结构化数据。
    • 示例:分析技术文档或新闻。
  4. RAG 应用
    • 结合 LangChain 或 LlamaIndex,增强 LLM 的知识库。
    • 示例:生成基于最新数据的报告。
  5. 自动化研究
    • 集成到 GPT-Researcher 等工具,自动化信息收集。
    • 示例:研究市场趋势。

不适用场景

  • 本地数据处理:tavily 依赖 Web 数据,无法处理本地文件。
  • 高频批量爬取:免费账户信用有限,需付费计划。

7. 注意事项

  1. API 密钥安全
    • 避免硬编码密钥,推荐使用环境变量。
  2. 信用限制
    • 免费账户每月 1,000 次信用,超出需升级计划。
    • 检查信用使用情况:client.get_usage()(若支持)。
  3. 错误处理
    • 处理常见异常,如 MissingAPIKeyErrorInvalidAPIKeyError
  4. 异步客户端
    • 异步方法需在 asyncio 事件循环中运行。
  5. 版本兼容性
    • 确保 Python 3.8+,旧版本可能不支持。
    • 检查 tavily-python 版本,确保与 API 兼容。
  6. 可读性与维护
    • 避免复杂参数配置,优先使用默认值。
    • 示例:client.search("查询", search_depth="basic") 更简单。

示例:

import asyncio asyncdefmain(): client = AsyncTavilyClient(api_key="tvly-YOUR_API_KEY")await client.search("测试") asyncio.run(main())

示例:

from tavily import TavilyClient, MissingAPIKeyError, InvalidAPIKeyError try: client = TavilyClient(api_key="")except MissingAPIKeyError:print("缺少 API 密钥")

示例:

import os client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))

8. 最佳实践

  1. 环境变量管理
    • 将 API 密钥存储在 .env 文件中,使用 python-dotenv 加载。
  2. 参数优化
    • 根据需求选择 search_depthbasic 快,advanced 准)。
    • 使用 include_domainsexclude_domains 过滤结果。
  3. 异步优先
    • 高并发场景使用 AsyncTavilyClient,减少阻塞。
  4. 错误重试
    • 对网络错误实现重试逻辑,使用 tenacity 等库。
  5. 结果处理
    • 检查响应中的 failed_resultsresponse_time,确保数据完整。

示例:

response = client.search("测试")if response["failed_results"]:print("失败结果:", response["failed_results"])

示例:

from tenacity import retry, stop_after_attempt, wait_fixed @retry(stop=stop_after_attempt(3), wait=wait_fixed(2))asyncdefsafe_search(client, query):returnawait client.search(query)

示例:

asyncdeffetch_multiple(): client = AsyncTavilyClient(api_key="tvly-YOUR_API_KEY") tasks =[client.search(q)for q in["查询1","查询2"]] results =await asyncio.gather(*tasks)return results 

示例:

response = client.search("Python 教程", search_depth="advanced", include_domains=["python.org","realpython.com"])

示例:

from dotenv import load_dotenv import os load_dotenv() client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))

9. 总结表

功能示例代码说明
搜索client.search("Python 3.12")返回结构化 Web 搜索结果
问答client.qna_search("谁是 Messi?")提供简洁的答案,适合 LLM
内容提取client.extract(["url1", "url2"])从 URL 提取清洗内容
网站爬取client.crawl(url, instructions="...")爬取相关页面内容
站点映射client.map(url, max_depth=2)返回网站结构 URL 列表
异步搜索await async_client.search("查询")高并发场景的异步调用

10. 学习资源


11. 总结

tavily 库是 Python 中与 Tavily 搜索 API 交互的强大工具,专为 AI 代理和 LLM 优化,提供搜索、问答、内容提取、爬取和站点映射等功能。其同步和异步客户端支持灵活的集成,适用于聊天机器人、Web 爬虫、RAG 应用和自动化研究。研究表明,tavily 的响应速度和准确性优于传统爬虫方案。

Read more

ESP32 小智 AI 机器人入门教程从原理到实现(自己云端部署)

此博客为一篇针对初学者的详细教程,涵盖小智 AI 机器人的原理、硬件准备、软件环境搭建、代码实现、云端部署以及优化扩展。文章结合了现有的网络资源,取长补短,确保内容易于理解和操作。 简介: 本教程将指导初学者使用 ESP32 微控制器开发一个简单的语音对话机器人“小智”。我们将介绍所需的基础原理、硬件准备、软件环境搭建,以及如何编写代码实现语音唤醒和与云端大模型的对接。通过本教程,即使没有深厚的 AI 或嵌入式经验,也可以一步步制作出一个能听懂唤醒词并与人对话的简易 AI 机器人。本教程提供详细的操作步骤、代码示例和图示,帮助您轻松上手。 1. 基础原理 ESP32 架构及其在 AI 领域的应用: ESP32 是一款集成 Wi-Fi 和蓝牙的双核微控制器,具有较高的主频和丰富的外设接口,适合物联网和嵌入式 AI 应用。特别是新版的 ESP32-S3 芯片,不仅运行频率高达 240MHz,还内置了向量加速指令(

By Ne0inhk
Flutter 组件 bip340 适配鸿蒙 HarmonyOS 实战:次世代 Schnorr 签名,为鸿蒙 Web3 与隐私计算筑牢加密防线

Flutter 组件 bip340 适配鸿蒙 HarmonyOS 实战:次世代 Schnorr 签名,为鸿蒙 Web3 与隐私计算筑牢加密防线

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 bip340 适配鸿蒙 HarmonyOS 实战:次世代 Schnorr 签名,为鸿蒙 Web3 与隐私计算筑牢加密防线 前言 在鸿蒙(OpenHarmony)生态迈向去中心化金融(DeFi)、隐私通讯及安全资产管理等高阶安全场景的背景下,如何实现更高性能、更具扩展性且抗攻击能力的数字签名架构,已成为决定应用闭环安全性的“压舱石”。在鸿蒙设备这类强调分布式鉴权与芯片级安全(TEE/SE)的移动终端上,如果依然沿用传统的 ECDSA 签名算法,由于由于其固有的可延展性风险与高昂的聚合验证成本,极易由于由于在大规模节点验证时的 CPU 负载过高导致交互滞后。 我们需要一种能够实现签名线性聚合、计算逻辑极简且具备原生抗延展性的密码学方案。 bip340 为 Flutter 开发者引入了比特币 Taproot 升级的核心——Schnorr 签名算法。它不仅在安全性上超越了传统标准,更通过其线性的数学特性,

By Ne0inhk

Flutter 三方库 angular_bloc 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致响应、工业级的 AngularDart 与 BLoC 协同架构实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 angular_bloc 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致响应、工业级的 AngularDart 与 BLoC 协同架构实战 在鸿蒙(OpenHarmony)系统的桌面级协同(如分布式办公网页版)、后台管理终端或高度复杂的 Web 仪表盘开发中,如何将经典的 BLoC 状态管理应用于 AngularDart 环境?angular_bloc 为开发者提供了一套天衣无缝的组件化连接器。本文将实战演示其在鸿蒙 Web 生态中的深度应用。 前言 什么是 Angular BLoC?它是一套专门为 AngularDart 框架设计的 BLoC 实现。通过指令(Directives)和管道(Pipes),它实现了由于数据流变化触发的 UI

By Ne0inhk
【保姆级教程】从零入手:Python + Neo4j 构建你的第一个知识图谱

【保姆级教程】从零入手:Python + Neo4j 构建你的第一个知识图谱

摘要: 大数据时代,数据之间的关系往往比数据本身更有价值。传统的 SQL 数据库在处理复杂关系(如社交网络、推荐系统、风控分析)时显得力不从心,而 知识图谱 和 图数据库 Neo4j 正是为此而生。本文将带你从 0 基础出发,理解知识图谱核心概念,安装 Neo4j 环境,并手把手教你用 Python 代码构建一个生动的人物关系图谱。拒绝枯燥理论,全是实战干货! 一、 什么是知识图谱与 Neo4j? 在动手写代码之前,我们先用大白话把两个核心概念捋清楚。 1. 什么是知识图谱 (Knowledge Graph)? 不要被高大上的名字吓到。知识图谱本质上就是把世界上的事物(节点)和它们之间的联系(关系)画成一张巨大的网。 * Excel 思维: 罗列数据。例如:张三,25岁;李四,

By Ne0inhk