上一篇 下一篇 分享链接 返回 返回顶部

从搜索到日报自动生成:手把手搭建你的信息工作流

发布人:慈云数据-客服中心 发布时间:10小时前 阅读量:4

AI搜索 工作流自动化教程|附完整命令

在信息爆炸的时代,传统搜索方式正在发生变化。过去我们习惯打开搜索引擎,输入关键词,逐条浏览网页、筛选资料、复制内容、整理笔记;而现在,借助 AI搜索 + 工作流自动化,我们可以把“搜索、阅读、提炼、总结、归档、通知”等环节串成一条自动化流程,大幅提高信息获取和知识整理效率。

本文将围绕一个实用场景展开:自动抓取指定主题的最新信息,通过AI进行总结分析,并自动保存到本地或文档中。文章会从原理、工具选择、环境准备、完整命令、脚本实现、定时运行和扩展优化几个方面详细讲解,适合想要搭建个人信息助手、研究助手、运营监控系统或内容创作工作流的用户。


一、什么是AI搜索工作流自动化?

所谓 AI搜索工作流自动化,可以拆分成三个关键词:

  1. AI搜索
    不只是简单搜索网页,而是让AI参与信息理解、筛选、摘要和推理。例如,AI可以根据搜索结果判断哪些内容更重要,提取关键观点,生成结构化报告。

  2. 工作流
    工作流是指一组连续任务,比如:

    • 输入搜索关键词;
    • 获取搜索结果;
    • 抓取网页正文;
    • 调用AI模型总结;
    • 输出Markdown报告;
    • 保存到本地文件;
    • 发送到邮箱、飞书、钉钉或Notion。
  3. 自动化
    自动化意味着这些操作不需要人工重复执行,可以通过脚本、定时任务或自动化平台按规则运行。

一个典型的AI搜索自动化流程如下:

用户设定主题
    ↓
调用搜索接口获取结果
    ↓
抓取网页内容
    ↓
清洗正文文本
    ↓
调用AI模型总结分析
    ↓
生成Markdown报告
    ↓
保存或推送
    ↓
定时循环执行

二、适合哪些使用场景?

AI搜索自动化并不是“炫技”,它有非常实际的应用价值。

1. 行业资讯监控

例如你关注“人工智能 Agent 最新进展”“新能源汽车政策”“跨境电商平台规则变化”,可以每天自动搜索相关新闻,并输出一份简报。

2. 竞品动态跟踪

运营、产品经理、创业者可以设置竞品关键词,比如:

某某产品 融资
某某公司 新功能
某某品牌 价格调整

系统每天自动抓取信息,帮助你及时发现市场变化。

3. 内容创作选题

自媒体作者可以自动收集热门话题、用户讨论和行业趋势,再让AI提炼选题方向,生成文章大纲。

4. 学术资料整理

研究人员可以设置论文关键词,自动搜索新论文、技术博客或开源项目更新,节省人工检索时间。

5. 个人知识管理

你可以把自动生成的报告保存到Obsidian、Notion、语雀或本地Markdown文件中,逐渐形成自己的知识库。


三、本文要实现的目标

本文将实现一个简单但完整的自动化AI搜索工作流:

输入一个关键词,程序自动搜索相关网页,提取搜索结果标题和摘要,然后调用AI模型生成一份中文总结报告,最终保存为Markdown文件。

最终效果类似:

# AI搜索日报:AI Agent

## 一、今日核心信息

1. AI Agent应用正在从概念验证走向企业级落地。
2. 多家厂商开始强调工作流编排、工具调用和多智能体协作。
3. 开源社区在Agent框架、浏览器自动化和代码执行方面更新活跃。

## 二、重点内容摘要

...

## 三、值得关注的趋势

...

## 四、后续建议

...

四、工具与技术选型

为了降低门槛,本文使用以下工具:

工具 作用
Python 编写自动化脚本
requests 调用搜索接口和AI接口
python-dotenv 管理环境变量
Markdown 输出结构化报告
cron / 任务计划程序 定时执行
AI模型API 负责总结、分析和生成报告

搜索接口可以选择多种方式,例如:

  • Bing Search API;
  • SerpAPI;
  • Tavily API;
  • Brave Search API;
  • 自建搜索服务;
  • 普通搜索结果抓取。

为了教程通用,本文以“搜索API + AI模型API”的方式说明。你可以根据自己使用的平台替换接口地址和密钥。


五、准备工作

1. 安装Python

建议使用 Python 3.10 及以上版本。

查看当前Python版本:

python --version

或:

python3 --version

如果没有安装,可以前往 Python 官网下载安装:

https://www.python.org/downloads/

2. 创建项目目录

在终端执行:

mkdir ai-search-workflow
cd ai-search-workflow

建议项目结构如下:

ai-search-workflow/
├── .env
├── main.py
├── requirements.txt
└── reports/

创建报告目录:

mkdir reports

3. 创建虚拟环境

macOS / Linux:

python3 -m venv venv
source venv/bin/activate

Windows PowerShell:

python -m venv venv
.\venv\Scripts\Activate.ps1

如果Windows提示脚本执行策略限制,可以运行:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

然后重新激活虚拟环境。


4. 安装依赖

创建 requirements.txt

touch requirements.txt

写入以下内容:

requests
python-dotenv

安装依赖:

pip install -r requirements.txt

六、配置环境变量

为了避免把API密钥直接写进代码中,我们使用 .env 文件统一管理。

创建 .env 文件:

touch .env

写入以下内容:

SEARCH_API_KEY=你的搜索API密钥
SEARCH_API_URL=https://api.example.com/search

AI_API_KEY=你的AI模型API密钥
AI_API_URL=https://api.example.com/v1/chat/completions
AI_MODEL=your-model-name

你需要根据自己实际使用的平台替换:

SEARCH_API_KEY=
SEARCH_API_URL=
AI_API_KEY=
AI_API_URL=
AI_MODEL=

例如,如果你的AI服务兼容 OpenAI Chat Completions 格式,通常接口形式类似:

AI_API_URL=https://api.openai.com/v1/chat/completions
AI_MODEL=gpt-4o-mini

如果你使用其他兼容接口,只要请求格式兼容,也可以直接替换。


七、编写完整Python脚本

下面是完整的 main.py 示例代码。它包含以下功能:

  • 读取环境变量;
  • 根据关键词调用搜索API;
  • 整理搜索结果;
  • 调用AI接口生成报告;
  • 保存为Markdown文件。

注意:不同搜索API返回字段不完全一致,下面代码采用通用写法。如果你的搜索接口字段不同,需要稍作调整。

import os
import json
import argparse
import requests
from datetime import datetime
from dotenv import load_dotenv


load_dotenv()


SEARCH_API_KEY = os.getenv("SEARCH_API_KEY")
SEARCH_API_URL = os.getenv("SEARCH_API_URL")

AI_API_KEY = os.getenv("AI_API_KEY")
AI_API_URL = os.getenv("AI_API_URL")
AI_MODEL = os.getenv("AI_MODEL", "gpt-4o-mini")


def search_web(query, limit=5):
    """
    调用搜索API,获取搜索结果。
    你需要根据自己使用的搜索服务调整headers、params和解析字段。
    """
    if not SEARCH_API_KEY or not SEARCH_API_URL:
        raise ValueError("请先在 .env 中配置 SEARCH_API_KEY 和 SEARCH_API_URL")

    headers = {
        "Authorization": f"Bearer {SEARCH_API_KEY}",
        "Content-Type": "application/json"
    }

    params = {
        "q": query,
        "query": query,
        "count": limit,
        "limit": limit
    }

    response = requests.get(
        SEARCH_API_URL,
        headers=headers,
        params=params,
        timeout=30
    )

    response.raise_for_status()
    data = response.json()

    results = []

    # 兼容常见搜索API结构
    possible_items = (
        data.get("results")
        or data.get("items")
        or data.get("webPages", {}).get("value")
        or []
    )

    for item in possible_items[:limit]:
        title = item.get("title") or item.get("name") or "无标题"
        url = item.get("url") or item.get("link") or ""
        snippet = item.get("snippet") or item.get("description") or item.get("summary") or ""

        results.append({
            "title": title,
            "url": url,
            "snippet": snippet
        })

    return results


def build_search_context(results):
    """
    将搜索结果转换成适合AI阅读的上下文文本。
    """
    if not results:
        return "没有找到相关搜索结果。"

    lines = []

    for index, item in enumerate(results, start=1):
        lines.append(f"## 结果 {index}")
        lines.append(f"标题:{item['title']}")
        lines.append(f"链接:{item['url']}")
        lines.append(f"摘要:{item['snippet']}")
        lines.append("")

    return "\n".join(lines)


def call_ai_generate_report(query, search_context):
    """
    调用AI模型,根据搜索结果生成中文Markdown报告。
    """
    if not AI_API_KEY or not AI_API_URL:
        raise ValueError("请先在 .env 中配置 AI_API_KEY 和 AI_API_URL")

    system_prompt = """
你是一名专业的信息分析师,擅长根据搜索结果生成结构化中文报告。
你的任务是:
1. 阅读用户提供的搜索结果;
2. 提炼核心事实、趋势和洞察;
3. 不编造搜索结果中没有的信息;
4. 如果信息不足,要明确说明;
5. 使用Markdown格式输出。
"""

    user_prompt = f"""
请根据以下搜索结果,围绕主题「{query}」生成一份中文分析报告。

要求:
- 标题清晰;
- 包含核心摘要;
- 包含重点信息整理;
- 包含趋势判断;
- 包含可执行建议;
- 如果搜索结果存在明显重复,请合并归纳;
- 输出格式必须是Markdown。

以下是搜索结果:

{search_context}
"""

    headers = {
        "Authorization": f"Bearer {AI_API_KEY}",
        "Content-Type": "application/json"
    }

    payload = {
        "model": AI_MODEL,
        "messages": [
            {
                "role": "system",
                "content": system_prompt.strip()
            },
            {
                "role": "user",
                "content": user_prompt.strip()
            }
        ],
        "temperature": 0.3
    }

    response = requests.post(
        AI_API_URL,
        headers=headers,
        data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
        timeout=60
    )

    response.raise_for_status()
    data = response.json()

    # 兼容OpenAI Chat Completions格式
    content = data["choices"][0]["message"]["content"]

    return content


def save_report(query, content):
    """
    保存Markdown报告到reports目录。
    """
    os.makedirs("reports", exist_ok=True)

    date_str = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    safe_query = "".join(
        c for c in query
        if c.isalnum() or c in (" ", "-", "_")
    ).strip().replace(" ", "_")

    filename = f"reports/{date_str}_{safe_query}.md"

    with open(filename, "w", encoding="utf-8") as f:
        f.write(content)

    return filename


def main():
    parser = argparse.ArgumentParser(description="AI搜索工作流自动化工具")
    parser.add_argument(
        "--query",
        type=str,
        required=True,
        help="要搜索和分析的主题关键词"
    )
    parser.add_argument(
        "--limit",
        type=int,
        default=5,
        help="搜索结果数量,默认5条"
    )

    args = parser.parse_args()

    print(f"正在搜索:{args.query}")
    results = search_web(args.query, args.limit)

    print(f"共获取到 {len(results)} 条搜索结果")
    search_context = build_search_context(results)

    print("正在调用AI生成报告...")
    report = call_ai_generate_report(args.query, search_context)

    filename = save_report(args.query, report)

    print(f"报告已保存:{filename}")


if __name__ == "__main__":
    main()

八、运行完整命令

确保当前位于项目目录,并且虚拟环境已激活。

macOS / Linux:

source venv/bin/activate

Windows PowerShell:

.\venv\Scripts\Activate.ps1

运行脚本:

python main.py --query "AI Agent 最新进展" --limit 5

如果你使用的是 python3 命令:

python3 main.py --query "AI Agent 最新进展" --limit 5

运行成功后,终端会输出类似内容:

正在搜索:AI Agent 最新进展
共获取到 5 条搜索结果
正在调用AI生成报告...
报告已保存:reports/2025-01-01_10-30-00_AI_Agent_最新进展.md

查看生成的报告:

ls reports

打开文件:

macOS:

open reports

Linux:

xdg-open reports

Windows:

explorer reports

九、增加网页正文抓取能力

上面的版本主要依赖搜索结果中的标题和摘要。如果你希望AI分析得更深入,可以进一步抓取网页正文。

安装依赖:

pip install beautifulsoup4 lxml

更新 requirements.txt

requests
python-dotenv
beautifulsoup4
lxml

新增正文提取函数:

from bs4 import BeautifulSoup


def fetch_page_text(url):
    """
    抓取网页正文。
    注意:不同网站结构不同,该方法只做基础提取。
    """
    try:
        headers = {
            "User-Agent": "Mozilla/5.0"
        }

        response = requests.get(
            url,
            headers=headers,
            timeout=20
        )

        response.raise_for_status()
        response.encoding = response.apparent_encoding

        soup = BeautifulSoup(response.text, "lxml")

        for tag in soup(["script", "style", "nav", "footer", "header"]):
            tag.decompose()

        text = soup.get_text(separator="\n")
        lines = [
            line.strip()
            for line in text.splitlines()
            if line.strip()
        ]

        clean_text = "\n".join(lines)

        return clean_text[:5000]

    except Exception as e:
        return f"正文抓取失败:{str(e)}"

然后在 build_search_context 中加入正文:

def build_search_context(results):
    if not results:
        return "没有找到相关搜索结果。"

    lines = []

    for index, item in enumerate(results, start=1):
        page_text = fetch_page_text(item["url"]) if item["url"] else ""

        lines.append(f"## 结果 {index}")
        lines.append(f"标题:{item['title']}")
        lines.append(f"链接:{item['url']}")
        lines.append(f"摘要:{item['snippet']}")
        lines.append(f"正文节选:{page_text[:3000]}")
        lines.append("")

    return "\n".join(lines)

再次运行:

python main.py --query "大模型应用落地案例" --limit 3

这里建议 limit 不要设置太大,因为网页正文会显著增加输入长度,也会提高AI调用成本。


十、设置定时自动运行

如果你希望每天自动生成一份报告,可以使用系统定时任务。


1. macOS / Linux 使用 cron

查看当前Python路径:

which python

查看项目路径:

pwd

编辑定时任务:

crontab -e

添加以下内容,表示每天早上8点运行:

0 8 * * * cd /你的项目路径/ai-search-workflow && /你的项目路径/ai-search-workflow/venv/bin/python main.py --query "AI Agent 最新进展" --limit 5 >> cron.log 2>&1

示例:

0 8 * * * cd /Users/yourname/ai-search-workflow && /Users/yourname/ai-search-workflow/venv/bin/python main.py --query "AI Agent 最新进展" --limit 5 >> cron.log 2>&1

查看定时任务列表:

crontab -l

查看日志:

cat cron.log

2. Windows 使用任务计划程序

假设项目路径为:

C:\Users\yourname\ai-search-workflow

Python解释器路径为:

C:\Users\yourname\ai-search-workflow\venv\Scripts\python.exe

可以新建一个 run.bat

@echo off
cd /d C:\Users\yourname\ai-search-workflow
C:\Users\yourname\ai-search-workflow\venv\Scripts\python.exe main.py --query "AI Agent 最新进展" --limit 5 >> task.log 2>&1

然后在“任务计划程序”中:

  1. 创建基本任务;
  2. 设置每天运行;
  3. 操作选择“启动程序”;
  4. 程序选择 run.bat
  5. 保存并测试运行。

也可以用命令创建任务:

schtasks /Create /SC DAILY /TN "AI Search Workflow" /TR "C:\Users\yourname\ai-search-workflow\run.bat" /ST 08:00

查看任务:

schtasks /Query /TN "AI Search Workflow"

删除任务:

schtasks /Delete /TN "AI Search Workflow" /F

十一、批量监控多个关键词

如果你有多个主题要监控,可以创建一个关键词文件。

创建 keywords.txt

AI Agent 最新进展
大模型应用落地案例
自动化工作流工具
企业知识库 AI
多智能体协作

新增批量脚本 batch.py

import subprocess


def main():
    with open("keywords.txt", "r", encoding="utf-8") as f:
        keywords = [
            line.strip()
            for line in f
            if line.strip()
        ]

    for keyword in keywords:
        print(f"开始处理:{keyword}")

        subprocess.run([
            "python",
            "main.py",
            "--query",
            keyword,
            "--limit",
            "5"
        ])

        print(f"完成处理:{keyword}")


if __name__ == "__main__":
    main()

运行:

python batch.py

如果是在 Linux 或 macOS,可能需要改成:

subprocess.run([
    "python3",
    "main.py",
    "--query",
    keyword,
    "--limit",
    "5"
])

定时运行批量任务:

0 8 * * * cd /你的项目路径/ai-search-workflow && /你的项目路径/ai-search-workflow/venv/bin/python batch.py >> batch.log 2>&1

十二、将报告推送到飞书、钉钉或企业微信

自动化工作流的价值不只是生成文件,更重要的是把信息推送到你真正会看的地方。

以飞书机器人为例,通常可以通过Webhook发送消息。

.env 中增加:

FEISHU_WEBHOOK=https://open.feishu.cn/open-apis/bot/v2/hook/xxxx

新增函数:

def send_to_feishu(content):
    webhook = os.getenv("FEISHU_WEBHOOK")

    if not webhook:
        print("未配置 FEISHU_WEBHOOK,跳过推送")
        return

    payload = {
        "msg_type": "text",
        "content": {
            "text": content[:3000]
        }
    }

    response = requests.post(
        webhook,
        json=payload,
        timeout=20
    )

    response.raise_for_status()
    print("已推送到飞书")

main() 中保存报告后增加:

send_to_feishu(report)

如果报告较长,建议只推送摘要和本地文件路径,或者使用富文本消息格式。


十三、常见问题与排查方法

1. 报错:环境变量为空

如果出现:

请先在 .env 中配置 AI_API_KEY 和 AI_API_URL

检查 .env 文件是否位于项目根目录,并确认变量名没有写错。

可以临时打印测试:

print(os.getenv("AI_API_KEY"))

2. 报错:401 Unauthorized

通常是API Key错误或权限不足。

检查:

API Key是否复制完整;
接口地址是否正确;
账户是否有余额;
模型名称是否可用;
Authorization格式是否符合平台要求。

有的平台不是:

Authorization: Bearer xxx

而是使用:

X-API-Key: xxx

这时需要修改代码中的 headers


3. 报错:429 Too Many Requests

说明请求过于频繁或额度超限。

解决方法:

  • 降低关键词数量;
  • 减少搜索结果数量;
  • 增加请求间隔;
  • 升级API套餐;
  • 在批处理脚本中加入 time.sleep()

示例:

import time

time.sleep(5)

4. AI总结内容不准确

AI输出质量取决于搜索结果质量和提示词设计。可以优化提示词,例如增加:

请严格基于提供的搜索结果,不要扩展未经验证的信息。
如果某个判断缺乏依据,请标注“信息不足”。
请列出每个结论对应的来源标题。

5. 网页正文抓取为空

很多网站有反爬机制或内容由JavaScript渲染。解决方案包括:

  • 使用搜索API摘要;
  • 使用支持正文抽取的搜索服务;
  • 使用 Playwright 渲染页面;
  • 使用 RSS 源;
  • 使用网站官方API。

十四、进阶优化方向

1. 加入去重逻辑

搜索结果中经常出现重复内容,可以根据URL、标题相似度进行去重。

简单URL去重示例:

def deduplicate_results(results):
    seen = set()
    unique = []

    for item in results:
        url = item.get("url")

        if url and url not in seen:
            seen.add(url)
            unique.append(item)

    return unique

使用方式:

results = deduplicate_results(results)

2. 输出结构化JSON

如果你希望后续做数据分析,可以让AI同时输出JSON。

提示词中加入:

请在报告最后输出一个JSON对象,包含:
- topic
- summary
- key_points
- trends
- recommendations

3. 接入Notion知识库

可以使用 Notion API 将报告写入数据库。基本流程是:

  1. 创建 Notion Integration;
  2. 获取 Token;
  3. 创建数据库;
  4. 授权Integration访问数据库;
  5. 调用 Notion API 写入页面。

环境变量示例:

NOTION_TOKEN=secret_xxx
NOTION_DATABASE_ID=xxxx

4. 使用向量数据库做长期记忆

如果你每天都生成报告,长期积累后会形成大量内容。此时可以将报告切分并写入向量数据库,例如:

  • Chroma;
  • Milvus;
  • Qdrant;
  • Weaviate;
  • pgvector。

这样你就可以问:

过去30天AI Agent领域有哪些持续出现的趋势?
哪些公司最近频繁发布相关产品?
某个关键词的热度是否在上升?

这就从“日报生成器”升级成了“个人研究助理”。


十五、安全与合规建议

在搭建AI搜索工作流时,需要注意以下几点:

  1. 不要泄露API Key
    .env 文件不要上传到公开仓库。建议创建 .gitignore

    touch .gitignore

    写入:

    .env
    venv/
    reports/
    __pycache__/
  2. 遵守网站规则
    抓取网页正文时应遵守目标网站的服务条款和 robots 协议,避免高频请求。

  3. 标注信息来源
    AI生成报告时最好保留链接,方便后续核查。

  4. 避免完全依赖AI判断
    AI适合辅助总结和归纳,但重要决策仍需要人工复核。

  5. 控制成本
    搜索API和AI模型API通常按量计费。建议先用较少结果测试,再逐步扩大规模。


十六、完整命令汇总

下面将本文涉及的核心命令集中整理,方便直接复制使用。

创建项目

mkdir ai-search-workflow
cd ai-search-workflow
mkdir reports
touch main.py requirements.txt .env

创建虚拟环境

macOS / Linux:

python3 -m venv venv
source venv/bin/activate

Windows:

python -m venv venv
.\venv\Scripts\Activate.ps1

安装依赖

pip install requests python-dotenv
pip freeze > requirements.txt

运行单个关键词

python main.py --query "AI Agent 最新进展" --limit 5

运行多个关键词

python batch.py

查看报告目录

ls reports

Windows:

dir reports

设置Linux/macOS定时任务

crontab -e

添加:

0 8 * * * cd /你的项目路径/ai-search-workflow && /你的项目路径/ai-search-workflow/venv/bin/python main.py --query "AI Agent 最新进展" --limit 5 >> cron.log 2>&1

Windows创建定时任务

schtasks /Create /SC DAILY /TN "AI Search Workflow" /TR "C:\Users\yourname\ai-search-workflow\run.bat" /ST 08:00

十七、总结

通过本文的教程,我们完成了一个基础但可扩展的 AI搜索工作流自动化系统。它能够根据指定关键词自动搜索信息,调用AI模型生成结构化报告,并保存为Markdown文件。如果再结合定时任务、企业 IM 推送、Notion知识库、向量数据库和多关键词批处理,它就可以逐步升级为一个真正实用的个人或团队信息中枢。

这类工作流的核心价值不在于“让AI替你搜索一次”,而在于把重复的信息收集、筛选、整理和归档过程持续自动化。对于研究、运营、产品、投资、内容创作等工作来说,它可以显著降低信息处理成本,让你把时间投入到更高价值的判断和决策中。

如果你是初学者,建议先完成本文的基础版本:关键词搜索 → AI总结 → Markdown保存。等流程跑通后,再逐步增加网页正文抓取、批量关键词、定时任务、消息推送和知识库沉淀。这样既容易调试,也能快速看到实际效果。

目录结构
全文