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

引言

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

Tavily Search API是专为大语言模型(LLM)设计的搜索引擎,旨在帮助开发者和自主人工智能体实现高效、精准的信息检索。本文将详细介绍Tavily Search API的功能、使用方法及其在新闻总结助手中的实际应用,并通过代码实例展示如何结合OpenAI 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 提供详细的文档支持,从基础设置到高级功能均有详解,帮助开发者快速上手。
  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 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和OpenAI API,构建一个强大的新闻总结助手,实现以下功能:

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

功能说明

  1. 搜索新闻

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

  2. 翻译内容

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

  3. 输出结果

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

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

代码实现

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

1.环境准备

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

python 复制代码
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文件,内容如下:

plaintext:.env 复制代码
TAVILY_API_KEY=your_tavily_api_key_here
OPENAI_API_KEY=your_openai_api_key_here

2. 安装依赖

确保已安装python-dotenv包:

bash 复制代码
pip install python-dotenv

3. 环境变量说明

4. 安全提示

-永远不要将包含实际API密钥的.env文件提交到代码仓库

-建议在.gitignore文件中添加`.env:

plaintext:.gitignore 复制代码
.env

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

2.环境变量检查

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

python 复制代码
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.翻译器类实现

接下来实现翻译功能:

python 复制代码
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.新闻搜索类实现

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

python 复制代码
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方法:

python 复制代码
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方法:

python 复制代码
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.主函数实现

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

python 复制代码
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提供了多种定价选项,适合不同类型的开发者和项目需求:

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

总结与展望

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

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

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

相关推荐
迷路爸爸1803 分钟前
深入理解 PyTorch 的 Dataset 和 DataLoader:构建高效数据管道
人工智能·pytorch·python
汪子熙38 分钟前
Milvus:为存储和检索高维向量设计而生的 AI 时代数据库
人工智能
说私域1 小时前
会员制电商创新:开源 AI 智能名片与 2+1 链动模式的协同赋能
人工智能·开源
Fuweizn1 小时前
喜报|富唯智能荣获暨2024年广州科技创新创业大赛二等奖
人工智能·自动化·科技创新
AITIME论道1 小时前
论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...
人工智能·语言模型·自然语言处理
小嗷犬1 小时前
【论文笔记】NEFTune: Noisy Embeddings Improve Instruction Finetuning
论文阅读·人工智能·深度学习·神经网络·语言模型·大模型
好评笔记1 小时前
多模态论文笔记——U-ViT
论文阅读·人工智能·深度学习·计算机视觉·aigc·dit·u-vit
小嗷犬1 小时前
【论文笔记】QLoRA: Efficient Finetuning of Quantized LLMs
论文阅读·人工智能·深度学习·神经网络·语言模型·大模型·微调
goomind1 小时前
YOLOv8实战人员跌倒检测
人工智能·深度学习·yolo·计算机视觉·目标跟踪·跌倒检测
图初2 小时前
自动驾驶控制算法-油门刹车标定
人工智能·机器学习·自动驾驶