当前位置: 首页 > article >正文

AI新闻自动化:使用Tavily Search API构建AI新闻总结助手

引言

在当今人工智能技术飞速发展的时代,如何高效获取实时、准确的信息已成为人们的迫切需求。许多社群中都会分享每日AI新闻,因此本文将介绍一种自动化实现新闻追踪的方法,该方法结合了Tavily Search APIOpenAI API的调用。

Tavily Search API是专为大语言模型(LLM)设计的搜索引擎,旨在帮助开发者和自主人工智能体实现高效、精准的信息检索。本文将详细介绍Tavily Search API的功能、使用方法及其在新闻总结助手中的实际应用,并通过代码实例展示如何结合OpenAI API构建一个强大的实时新闻总结工具。

Tavily Search API的主要功能和特点

Tavily Search API智能搜索引擎

Tavily Search API既然是为LLM优化的搜索引擎,那与传统的搜索引擎API(如Google或Bing)相比有什么不同呢?以下是Tavily Search API的主要特点:

  1. 专为LLM优化

    • Tavily Search API针对RAG(检索增强生成)场景进行了优化,可在单次API调用中完成搜索、抓取、过滤和信息提取,极大地降低了开发者的工作量。
    • 搜索结果以结构化方式返回,便于直接传递给LLM作为上下文。
  2. 高度定制化

    • 提供可调节的搜索深度、领域管理和 HTML 内容解析等功能,开发者可以根据需求自定义搜索范围和结果格式。
    • 支持包括或排除特定域名,确保搜索结果的相关性和精准性。
  3. 性能卓越

    • API 保证实时响应和高效的信息提取,通过专有算法对结果进行评分和排名,确保返回最相关的内容。
  4. 友好的集成性

    • Tavily 提供 Python SDK 和 REST API 文档,开发者可以轻松将其集成到现有系统中。
    • 支持与 Langchain 和 LLamaIndex 等工具集成,进一步提升开发效率。
  5. 透明与信息丰富

    • Tavily 提供详细的文档支持,从基础设置到高级功能均有详解,帮助开发者快速上手。

Tavily Search API的使用方法和技术原理

使用Tavily Search API的基础步骤

  1. 注册并获取API Key
    开发者需要在Tavily平台,网址:https://app.tavily.com/注册账号, 并获取Tavily API Key。

  2. 在API Playground测试
    在Tavily API Playground,网址:https://app.tavily.com/playground, 中测试搜索功能,熟悉API的输入输出格式。

  3. 集成Tavily SDK或REST API
    Tavily提供Python SDK和REST API,开发者可以根据需求选择适合的方式进行集成。

下图是Tavily API Playground的界面:
Tavily API Playground

Tavily Search API方法详解

Tavily Search API提供了多种搜索方法,以下是主要功能的介绍:

  • search方法
    执行搜索查询并返回结构化的字典格式结果。支持的参数包括:

    • search_depth:搜索深度,可选值为"basic"或"advanced"。
    • topic:搜索主题,如"general"或"news"。
    • max_results:返回的最大结果数。
    • include_domainsexclude_domains:指定包含或排除的域名。
  • get_search_context方法
    返回指定token限制内的上下文内容和来源,适用于需要直接从搜索结果中提取相关内容的场景。

  • qna_search方法
    返回针对查询的简短答案,适合用作AI工具的辅助功能。

  • 错误处理机制
    Tavily API提供全面的错误处理机制,包括缺少API Key、无效API Key和超出使用限制等常见问题的提示,确保开发者能够快速定位并解决问题。

使用Tavily Search API构建AI新闻总结助手

下面我们就使用Tavily Search API和OpenAI API,构建一个强大的新闻总结助手,实现以下功能:

  • 搜索指定主题的最新新闻。
  • 提取新闻内容并翻译成中文。
  • 生成新闻摘要并保存为Markdown文件。

功能说明

  1. 搜索新闻
    我们主要使用Tavily Search API的search方法,按主题查询最近n天的新闻,并返回结构化的搜索结果。

  2. 翻译内容
    因为搜索返回的结果可能是各种语言,所以需要调用OpenAI API,将新闻标题和内容翻译成中文,方便我们本地化使用。

  3. 输出结果
    将翻译后的新闻内容保存为Markdown文件,便于后续查看和分享。

以下是具体实现代码及其说明。

代码实现

让我们分步骤来实现这个新闻总结助手。

1.环境准备

首先导入所需的库并设置环境变量:

from tavily import TavilyClient
import os
from datetime import datetime
from openai import OpenAI
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

这里我们使用了:

  • tavily - Tavily Search API的Python SDK
  • openai - OpenAI API的官方客户端
  • python-dotenv - 用于管理环境变量

环境变量设置

在开始之前,我们需要正确设置环境变量。推荐使用.env文件来管理环境变量,这是一种安全且便捷的方式。

1. 创建.env文件

在项目根目录下创建.env文件,内容如下:

TAVILY_API_KEY=your_tavily_api_key_here
OPENAI_API_KEY=your_openai_api_key_here

2. 安装依赖

确保已安装python-dotenv包:

pip install python-dotenv

3. 环境变量说明

  • TAVILY_API_KEY:之前已介绍
  • OPENAI_API_KEY:从OpenAI平台,网址:https://platform.openai.com/api-keys获取

4. 安全提示

-永远不要将包含实际API密钥的.env文件提交到代码仓库
-建议在.gitignore文件中添加`.env:

.env

设置好环境变量后,我们就可以开始实现新闻总结助手的核心功能了。

2.环境变量检查

为了确保程序能正常运行,我们需要检查必要的环境变量:

def check_env_vars():
    missing_vars = []
    for var in ['TAVILY_API_KEY', 'OPENAI_API_KEY']:
        if not os.getenv(var):
            missing_vars.append(var)
    if missing_vars:
        raise ValueError(f"缺少必要的环境变量: {', '.join(missing_vars)}")

这个函数会检查是否设置了Tavily和OpenAI的API密钥,如果缺少任何一个就会抛出异常。

3.翻译器类实现

接下来实现翻译功能:

class Translator:
    def __init__(self, api_key):
        self.client = OpenAI(api_key=api_key)

    def translate(self, text):
        prompt = f"请将以下英文文本翻译成中文:{text}"
        response = self.client.chat.completions.create(
            model="gpt-4o-mini",  # 使用经济实惠的 GPT-4o-mini 模型
            messages=[
                {"role": "system", "content": "你是一个专业的英译中翻译器。请将英文准确翻译成中文,保持专业性。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3  # 降低随机性,使翻译更稳定
        )
        return response.choices[0].message.content.strip()

Translator类封装了OpenAI API的翻译功能:

  • 初始化时需要提供OpenAI API密钥
  • translate方法接收英文文本,返回中文翻译
  • 使用GPT-4o-mini模型确保翻译质量的同时也节省成本
  • 通过systemmessage提升翻译的专业性
  • 设置较低的temperature使翻译结果更加稳定
4.新闻搜索类实现

新闻搜索是我们的核心功能:

class TavilyNewsSearch:
    def __init__(self, tavily_api_key, openai_api_key):
        self.client = TavilyClient(api_key=tavily_api_key)
        self.translator = Translator(api_key=openai_api_key)

    def search_news(self, query, days=7, max_results=5):
        response = self.client.search(
            query=query,
            topic="news",      # 指定搜索新闻
            days=days,         # 最近几天的新闻
            max_results=max_results,
            include_answer=True
        )
        return response

TavilyNewsSearch类进一步整合了搜索和翻译功能:

  • 初始化时需要两个API密钥
  • search_news方法可以指定:
    • 搜索关键词
    • 时间范围(默认7天)
    • 最大结果数(默认5条)
5.结果处理

搜索结果需要进行处理和翻译,所以我们在TavilyNewsSearch类中实现了process_results方法:

def process_results(self, response):
    processed_data = {"news": []}
    for result in response.get("results", []):
        translated_title = self.translator.translate(result["title"])
        translated_content = self.translator.translate(result["content"])
        processed_data["news"].append({
            "title": result["title"],
            "title_zh": translated_title,
            "content": result["content"],
            "content_zh": translated_content,
            "url": result["url"]
        })
    return processed_data
6.保存为Markdown

为了方便后续查看和分享,我们将搜索结果保存为Markdown文件,所以我们在TavilyNewsSearch类中实现了save_to_markdown方法:

def save_to_markdown(self, processed_data, query):
    # 创建输出目录
    output_dir = "news_summaries"
    os.makedirs(output_dir, exist_ok=True)
    
    # 生成文件名(日期_查询词.md)
    date_str = datetime.now().strftime("%Y%m%d")
    filename = f"{date_str}_{query.replace(' ', '_')}.md"
    filepath = os.path.join(output_dir, filename)
    
    # 生成Markdown内容
    content = [f"# {query}相关新闻总结({date_str})\n"]
    
    for i, news in enumerate(processed_data["news"], 1):
        content.extend([
            f"## {i}. {news['title_zh']}",
            f"原标题:{news['title']}\n",
            f"###中文摘要",
            f"{news['content_zh']}\n",
            f"###原文",
            f"{news['content']}\n",
            f"来源:{news['url']}\n",
            "---\n"
        ])
    
    # 写入文件
    with open(filepath, "w", encoding="utf-8") as f:
        f.write("\n".join(content))
    
    return filepath
7.主函数实现

最后是程序的入口,整合所有功能:

def main():
    # 检查环境变量
    check_env_vars()
    tavily_api_key = os.getenv('TAVILY_API_KEY')
    openai_api_key = os.getenv('OPENAI_API_KEY')
    
    # 创建搜索器实例
    searcher = TavilyNewsSearch(tavily_api_key, openai_api_key)

    # 设置搜索参数
    query = "AI Agent"
    days = 7
    max_results = 5
    
    # 执行搜索和处理
    print(f"正在搜索最近{days}天的"{query}"相关新闻...")
    response = searcher.search_news(query=query, days=days, max_results=max_results)
    
    print("正在翻译和处理结果...")
    processed_data = searcher.process_results(response)
    
    # 保存为Markdown文件
    print("正在生成Markdown文件...")
    filepath = searcher.save_to_markdown(processed_data, query)
    
    print(f"\n✅处理完成!")
    print(f"📝结果已保存到:{filepath}")
    print(f"📊共整理了{len(processed_data['news'])}条新闻")

if __name__ == "__main__":
    main()

主函数的特点:

  1. 清晰的执行流程
  2. 友好的进度提示
  3. 使用表情符号美化输出
  4. 显示处理结果统计
  5. 支持自定义搜索参数

运行程序后,会在news_summaries目录下生成格式规范的Markdown文件,便于后续查看和分享。搜索参数根据需求可以调整,具体生成的新闻效果,可参见我今日公众号的另一篇文章《AI智能体每日新闻》。

Tavily的定价方案及免费额度

最后再介绍下Tavily的定价方案。如下图所示,Tavily提供了多种定价选项,适合不同类型的开发者和项目需求:

Tavily定价方案

对我们的新闻搜索总结工具来说,免费版的1,000API调用额度完全够用了,就算是一个小时更新一次,一个月也才720次!

总结与展望

通过本文的详细介绍,我们不仅了解了Tavily Search API的强大功能,还通过实战演示掌握了如何构建一个实用的AI新闻总结助手。这个工具可以帮助我们:

  1. 自动追踪最新AI技术动态
  2. 智能翻译和总结英文新闻
  3. 生成规范的中英对照新闻报告

对于开发者来说,Tavily Search API提供的免费额度完全满足日常使用需求,是构建AI信息处理工具的理想选择。希望本教程能帮助更多开发者打造自己的AI新闻助手,提升信息获取效率。


http://www.kler.cn/a/466001.html

相关文章:

  • LLM大模型RAG内容安全合规检查
  • 记一次k8s下容器启动失败,容器无日志问题排查
  • C#设计模式(行为型模式):状态模式
  • IDEA 撤销 merge 操作(详解)
  • jest使用__mocks__设置模拟函数不生效 解决方案
  • 安卓入门十一 常用网络协议四
  • 大循环引起CPU负载过高
  • MySQL 06 章——多表查询
  • 解决ssh和git秘钥认证失败问题
  • 管理者管理上班摸鱼
  • wujie无界微前端框架初使用
  • 小程序电商实战:打造高效转化的购物平台
  • 基于RNN模型的心脏病预测(tensorflow实现)
  • 【Block总结】SGE注意力机制
  • linux内核PWM子系统笔记
  • 论文精读:Root Cause Analysis in Microservice Using Neural Granger Causal Discovery
  • 用python重写了座位表生成器
  • 仓库叉车高科技安全辅助设备——AI防碰撞系统N2024G-2
  • 【74HC192减法24/20/72进制】2022-5-17
  • 在 pandas.Grouper() 中,freq 参数用于指定时间频率,它定义了如何对时间序列数据进行分组。freq 的值可以是多种时间单位
  • 发现一个可用的免费docker镜像源
  • AI智能生成PPT,告别手工操作的新选择
  • 安卓11 SysteUI添加按钮以及下拉状态栏的色温调节按钮
  • MATLAB画柱状图
  • 【Spring学习】为什么Spring中的IOC(控制反转)能够降低耦合性(解耦)?
  • springboot和vue项目前后端交互