从搜索到报告自动完成:手把手搭建你的 AI 调研工作流
AI搜索 工作流自动化教程|附完整命令
在信息爆炸的时代,传统搜索已经无法满足复杂业务场景的需求。我们不再只是想“搜到网页”,而是希望系统能够自动完成:理解问题 → 检索信息 → 筛选来源 → 总结答案 → 生成报告 → 自动归档或推送。
这就是“AI搜索工作流自动化”的价值。
本文将从零开始,带你搭建一个可运行的 AI 搜索自动化工作流。它可以输入一个问题,自动调用搜索引擎获取资料,再通过大模型进行摘要、去重、结构化整理,最后输出一份 Markdown 报告。
文章包含完整命令、项目结构、代码示例和扩展思路,适合用于个人知识管理、市场调研、竞品分析、内容创作、学术资料整理等场景。
一、什么是 AI 搜索工作流自动化?
传统搜索流程通常是这样的:
- 打开搜索引擎;
- 输入关键词;
- 浏览多个网页;
- 手动复制有用内容;
- 判断可信度;
- 总结成文档;
- 保存或分享。
这个过程重复、耗时,而且结果容易遗漏。
AI 搜索工作流自动化的目标,是把这些步骤交给程序和 AI 来完成:
用户输入问题
↓
自动生成搜索关键词
↓
调用搜索 API 获取网页结果
↓
抓取网页正文内容
↓
清洗文本
↓
交给大模型总结
↓
生成结构化报告
↓
保存为 Markdown / HTML / PDF
最终,你只需要输入一句话,例如:
请调研 2025 年中国 AI 搜索产品的发展趋势
系统就可以自动生成一份调研报告。
二、适用场景
AI 搜索自动化并不是只能用于技术人员。它适用于很多实际业务场景。
1. 内容创作
自媒体、公众号、博客作者可以用它快速收集资料,形成文章初稿。
例如:
帮我搜索并整理最近半年 AI Agent 的技术趋势
2. 市场调研
企业可以使用它分析行业动态、竞品信息和投资趋势。
例如:
调研国内主流 AI 搜索产品,包括秘塔 AI、Kimi、Perplexity、百度 AI 搜索等
3. 学术资料整理
学生和研究人员可以用它快速收集论文、新闻和技术资料。
例如:
总结 RAG 技术在企业知识库中的应用案例
4. 销售与运营
销售团队可以用它调研客户公司、行业背景和竞品动态。
例如:
搜索某家公司近一年的融资、产品和新闻动态
三、整体技术方案
本文使用一个相对轻量的方案:
- Python 作为主开发语言;
- Tavily Search API 或 SerpAPI 作为搜索工具;
- OpenAI API 或兼容 OpenAI 格式的大模型接口作为总结引擎;
- BeautifulSoup 用于网页正文提取;
- Markdown 用于报告输出。
整体架构如下:
┌──────────────┐
│ 用户输入问题 │
└──────┬───────┘
↓
┌──────────────┐
│ 生成搜索关键词 │
└──────┬───────┘
↓
┌──────────────┐
│ 调用搜索 API │
└──────┬───────┘
↓
┌──────────────┐
│ 抓取网页内容 │
└──────┬───────┘
↓
┌──────────────┐
│ AI 总结分析 │
└──────┬───────┘
↓
┌──────────────┐
│ 输出报告文件 │
└──────────────┘
四、环境准备
下面以 macOS / Linux 环境为例。如果你使用 Windows,建议使用 PowerShell 或 WSL。
1. 创建项目目录
mkdir ai-search-workflow
cd ai-search-workflow
2. 创建 Python 虚拟环境
python3 -m venv .venv
激活虚拟环境:
source .venv/bin/activate
如果你是 Windows 用户,可以执行:
.venv\Scripts\activate
3. 安装依赖
pip install requests beautifulsoup4 python-dotenv openai markdown html2text
如果你后面想把 Markdown 转成 PDF,也可以安装:
pip install markdown-pdf
五、准备 API Key
本文示例使用两类 API:
- 搜索 API:Tavily Search API;
- 大模型 API:OpenAI 或兼容 OpenAI 格式的服务。
你也可以替换为其他搜索服务,例如 SerpAPI、Bing Search API、Google Custom Search API。
1. 创建环境变量文件
在项目根目录新建 .env 文件:
touch .env
写入以下内容:
OPENAI_API_KEY=你的大模型API_KEY
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
TAVILY_API_KEY=你的Tavily_API_KEY
如果你使用的是兼容 OpenAI 接口的国产大模型,只需要修改:
OPENAI_BASE_URL=你的接口地址
OPENAI_MODEL=你的模型名称
例如:
OPENAI_BASE_URL=https://api.example.com/v1
OPENAI_MODEL=deepseek-chat
六、项目结构
创建如下目录结构:
mkdir app reports
touch app/config.py app/search.py app/crawler.py app/llm.py app/workflow.py main.py
最终项目结构如下:
ai-search-workflow/
├── .env
├── app/
│ ├── config.py
│ ├── search.py
│ ├── crawler.py
│ ├── llm.py
│ └── workflow.py
├── reports/
└── main.py
七、编写配置文件
编辑 app/config.py:
import os
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini")
TAVILY_API_KEY = os.getenv("TAVILY_API_KEY")
if not OPENAI_API_KEY:
raise ValueError("请在 .env 中配置 OPENAI_API_KEY")
if not TAVILY_API_KEY:
raise ValueError("请在 .env 中配置 TAVILY_API_KEY")
这个文件负责读取环境变量,避免把密钥直接写进代码。
八、实现搜索模块
编辑 app/search.py:
import requests
from app.config import TAVILY_API_KEY
def tavily_search(query, max_results=5):
"""
调用 Tavily Search API 进行搜索
"""
url = "https://api.tavily.com/search"
payload = {
"api_key": TAVILY_API_KEY,
"query": query,
"search_depth": "advanced",
"include_answer": False,
"include_raw_content": False,
"max_results": max_results
}
response = requests.post(url, json=payload, timeout=30)
response.raise_for_status()
data = response.json()
results = data.get("results", [])
cleaned_results = []
for item in results:
cleaned_results.append({
"title": item.get("title"),
"url": item.get("url"),
"content": item.get("content")
})
return cleaned_results
这个模块的作用是根据关键词获取搜索结果,包括标题、链接和简短摘要。
九、实现网页正文抓取模块
编辑 app/crawler.py:
import requests
from bs4 import BeautifulSoup
HEADERS = {
"User-Agent": "Mozilla/5.0 AI Search Workflow Bot"
}
def fetch_page_text(url, max_chars=6000):
"""
抓取网页正文内容,并限制最大字符数
"""
try:
response = requests.get(url, headers=HEADERS, timeout=20)
response.raise_for_status()
except Exception as e:
return f"抓取失败:{e}"
soup = BeautifulSoup(response.text, "html.parser")
for tag in soup(["script", "style", "nav", "footer", "header", "aside"]):
tag.decompose()
text = soup.get_text(separator="\n")
lines = []
for line in text.splitlines():
line = line.strip()
if len(line) > 20:
lines.append(line)
clean_text = "\n".join(lines)
return clean_text[:max_chars]
这里我们通过 BeautifulSoup 移除脚本、样式、导航栏等无关内容,只保留网页可读文本。
十、实现大模型调用模块
编辑 app/llm.py:
from openai import OpenAI
from app.config import OPENAI_API_KEY, OPENAI_BASE_URL, OPENAI_MODEL
client = OpenAI(
api_key=OPENAI_API_KEY,
base_url=OPENAI_BASE_URL
)
def call_llm(prompt, temperature=0.3):
"""
调用大模型生成内容
"""
response = client.chat.completions.create(
model=OPENAI_MODEL,
messages=[
{
"role": "system",
"content": "你是一名专业的研究分析师,擅长搜索资料、总结信息、提炼观点,并输出结构清晰的中文报告。"
},
{
"role": "user",
"content": prompt
}
],
temperature=temperature
)
return response.choices[0].message.content
如果你的模型接口兼容 OpenAI 格式,这段代码通常可以直接使用。
十一、实现 AI 搜索工作流
编辑 app/workflow.py:
import os
from datetime import datetime
from app.search import tavily_search
from app.crawler import fetch_page_text
from app.llm import call_llm
def generate_search_queries(topic):
"""
根据用户主题生成多个搜索关键词
"""
prompt = f"""
请根据下面的研究主题,生成 5 个适合搜索引擎检索的中文关键词或问题。
研究主题:
{topic}
要求:
1. 关键词要覆盖背景、趋势、案例、数据、观点;
2. 每行一个关键词;
3. 不要添加解释。
"""
result = call_llm(prompt, temperature=0.2)
queries = []
for line in result.splitlines():
line = line.strip()
line = line.lstrip("-").lstrip("1.").lstrip("2.").lstrip("3.").strip()
if line:
queries.append(line)
return queries[:5]
def collect_sources(queries, max_results_per_query=3):
"""
根据多个关键词收集搜索结果,并去重
"""
all_results = []
seen_urls = set()
for query in queries:
print(f"正在搜索:{query}")
results = tavily_search(query, max_results=max_results_per_query)
for item in results:
url = item.get("url")
if url and url not in seen_urls:
seen_urls.add(url)
item["query"] = query
all_results.append(item)
return all_results
def enrich_sources_with_content(sources):
"""
抓取每个搜索结果对应的网页正文
"""
enriched = []
for index, item in enumerate(sources, start=1):
print(f"正在抓取第 {index} 个网页:{item.get('url')}")
page_text = fetch_page_text(item.get("url"))
enriched.append({
"title": item.get("title"),
"url": item.get("url"),
"query": item.get("query"),
"snippet": item.get("content"),
"page_text": page_text
})
return enriched
def build_report_prompt(topic, sources):
"""
构造报告生成提示词
"""
source_text = ""
for i, item in enumerate(sources, start=1):
source_text += f"""
资料 {i}
标题:{item.get("title")}
链接:{item.get("url")}
搜索词:{item.get("query")}
摘要:{item.get("snippet")}
正文摘录:
{item.get("page_text")[:3000]}
"""
prompt = f"""
你是一名资深行业研究员。请根据以下搜索资料,围绕用户主题生成一份中文研究报告。
用户主题:
{topic}
资料内容:
{source_text}
请按照以下 Markdown 结构输出:
# {topic}
## 一、结论摘要
用 5 条以内要点总结核心结论。
## 二、背景介绍
解释该主题为什么重要,目前处于什么发展阶段。
## 三、关键信息整理
按主题归纳资料中的重要事实、数据、观点和案例。
## 四、趋势分析
分析未来可能的发展方向、机会和风险。
## 五、可执行建议
给出适合个人、团队或企业执行的建议。
## 六、参考来源
列出引用过的网页标题和 URL。
要求:
1. 必须使用中文;
2. 不要编造资料中没有的信息;
3. 如果资料不足,请明确说明;
4. 结构清晰,观点具体;
5. 尽量保留来源链接。
"""
return prompt
def save_report(topic, content):
"""
保存 Markdown 报告
"""
os.makedirs("reports", exist_ok=True)
safe_title = "".join(c for c in topic if c.isalnum() or c in "-_ ")
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"reports/{timestamp}_{safe_title[:40]}.md"
with open(filename, "w", encoding="utf-8") as f:
f.write(content)
return filename
def run_workflow(topic):
"""
执行完整 AI 搜索工作流
"""
print("第一步:生成搜索关键词")
queries = generate_search_queries(topic)
print("生成的搜索关键词:")
for q in queries:
print("-", q)
print("\n第二步:搜索资料")
sources = collect_sources(queries)
print(f"\n共收集到 {len(sources)} 条资料")
print("\n第三步:抓取网页正文")
enriched_sources = enrich_sources_with_content(sources)
print("\n第四步:生成研究报告")
report_prompt = build_report_prompt(topic, enriched_sources)
report = call_llm(report_prompt, temperature=0.4)
print("\n第五步:保存报告")
filepath = save_report(topic, report)
print(f"\n报告已保存:{filepath}")
return filepath
十二、编写入口文件
编辑 main.py:
import argparse
from app.workflow import run_workflow
def main():
parser = argparse.ArgumentParser(description="AI 搜索工作流自动化工具")
parser.add_argument("topic", type=str, help="请输入你要调研的主题")
args = parser.parse_args()
run_workflow(args.topic)
if __name__ == "__main__":
main()
这个入口文件允许我们通过命令行传入研究主题。
十三、运行完整工作流
确保你已经激活虚拟环境:
source .venv/bin/activate
然后执行:
python main.py "2025年中国AI搜索产品发展趋势"
也可以换成其他主题:
python main.py "AI Agent在企业办公自动化中的应用"
或者:
python main.py "RAG知识库系统的技术架构和落地案例"
程序运行后,会依次显示:
第一步:生成搜索关键词
第二步:搜索资料
第三步:抓取网页正文
第四步:生成研究报告
第五步:保存报告
最后,你可以在 reports/ 目录下看到生成的 Markdown 报告。
查看报告文件:
ls reports
打开最新报告:
cat reports/你的报告文件名.md
十四、可选:将 Markdown 转为 HTML
如果你希望把报告转成网页格式,可以创建一个脚本。
新建文件:
touch md_to_html.py
写入:
import sys
import markdown
if len(sys.argv) < 2:
print("用法:python md_to_html.py reports/xxx.md")
sys.exit(1)
input_file = sys.argv[1]
output_file = input_file.replace(".md", ".html")
with open(input_file, "r", encoding="utf-8") as f:
md_content = f.read()
html_content = markdown.markdown(
md_content,
extensions=["extra", "toc", "tables"]
)
html_page = f"""
AI 搜索报告
{html_content}
"""
with open(output_file, "w", encoding="utf-8") as f:
f.write(html_page)
print(f"已生成:{output_file}")
运行:
python md_to_html.py reports/你的报告文件名.md
十五、可选:定时自动运行
如果你希望每天自动生成一份行业报告,可以使用 cron。
查看 Python 路径:
which python
查看项目路径:
pwd
编辑定时任务:
crontab -e
添加一行,例如每天早上 8 点运行:
0 8 * * * cd /你的项目路径/ai-search-workflow && /你的项目路径/ai-search-workflow/.venv/bin/python main.py "AI搜索行业最新动态" >> cron.log 2>&1
保存后,系统会每天自动执行。
查看定时任务:
crontab -l
查看日志:
tail -f cron.log
十六、可选:推送到企业微信或飞书
如果你的团队需要每天收到自动报告,可以将生成结果推送到企业微信、飞书或钉钉。
以企业微信机器人为例,安装依赖:
pip install requests
新建 send_wecom.py:
touch send_wecom.py
写入:
import sys
import requests
WEBHOOK_URL = "你的企业微信机器人Webhook地址"
def send_markdown(content):
payload = {
"msgtype": "markdown",
"markdown": {
"content": content[:4000]
}
}
response = requests.post(WEBHOOK_URL, json=payload, timeout=10)
response.raise_for_status()
print("推送成功")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("用法:python send_wecom.py reports/xxx.md")
sys.exit(1)
file_path = sys.argv[1]
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
send_markdown(content)
运行:
python send_wecom.py reports/你的报告文件名.md
如果报告过长,可以只推送摘要部分,完整报告保存在服务器或文档系统中。
十七、优化方向
上面的工作流已经可以完成基础自动化,但如果要用于生产环境,还可以继续优化。
1. 增加来源可信度评分
不同来源的可信度不同。你可以根据域名、发布时间、作者、内容长度等因素打分。
例如:
政府网站、上市公司公告、权威媒体、学术论文:高可信
营销软文、论坛帖子、匿名博客:低可信
2. 增加网页去噪能力
很多网页正文包含广告、推荐阅读和无关内容。可以使用更专业的正文提取库,例如:
pip install trafilatura
使用方式:
import trafilatura
downloaded = trafilatura.fetch_url(url)
text = trafilatura.extract(downloaded)
3. 增加多轮检索
第一次搜索后,可以让 AI 判断资料是否充分。如果不充分,再自动生成新的搜索词继续搜索。
流程如下:
初次搜索
↓
AI 判断缺失信息
↓
生成补充关键词
↓
二次搜索
↓
合并资料
↓
生成最终报告
4. 增加引用标注
为了让报告更可信,可以要求大模型在每个关键结论后面加上来源编号,例如:
AI 搜索产品正在从单纯问答向任务执行型 Agent 演进。[来源 3][来源 7]
5. 接入向量数据库
如果你需要长期积累资料,可以把抓取到的网页内容写入向量数据库,例如 Chroma、Qdrant、Milvus。
安装 Chroma:
pip install chromadb
这样系统就可以从“临时搜索”升级为“长期知识库”。
十八、常见问题
1. 为什么有些网页抓取失败?
原因可能包括:
- 网站开启了反爬;
- 页面需要 JavaScript 渲染;
- 网站访问速度慢;
- 服务器拒绝非浏览器请求;
- 内容需要登录。
解决办法:
- 更换数据源;
- 使用 Tavily 返回的摘要;
- 使用 Playwright 抓取动态页面;
- 使用 RSS、官方 API 或网站地图。
安装 Playwright:
pip install playwright
playwright install
2. 为什么 AI 总结会出现不准确?
常见原因包括:
- 搜索资料本身不准确;
- 网页正文提取噪声太多;
- 提示词约束不够;
- 模型能力不足;
- 输入资料超出上下文长度。
改进方法:
- 增加“不要编造”的系统提示;
- 要求模型列出依据;
- 对来源进行筛选;
- 分段总结后再汇总;
- 使用上下文更长的模型。
3. 如何降低成本?
可以从以下几个方面优化:
- 减少每个关键词搜索数量;
- 限制网页正文最大字符数;
- 先让小模型筛选资料,再用强模型写报告;
- 缓存搜索结果和网页内容;
- 对重复主题复用已有资料。
十九、完整命令汇总
下面把本文所有关键命令整理到一起,方便直接复制执行。
mkdir ai-search-workflow
cd ai-search-workflow
python3 -m venv .venv
source .venv/bin/activate
pip install requests beautifulsoup4 python-dotenv openai markdown html2text
mkdir app reports
touch app/config.py app/search.py app/crawler.py app/llm.py app/workflow.py main.py
touch .env
运行工作流:
python main.py "2025年中国AI搜索产品发展趋势"
查看报告:
ls reports
cat reports/你的报告文件名.md
转换 HTML:
touch md_to_html.py
python md_to_html.py reports/你的报告文件名.md
设置定时任务:
crontab -e
crontab -l
tail -f cron.log
安装动态页面抓取工具:
pip install playwright
playwright install
安装更强正文提取工具:
pip install trafilatura
安装向量数据库:
pip install chromadb
二十、总结
AI 搜索工作流自动化的核心,不只是“调用搜索 API”或“让大模型写一段总结”,而是把搜索、阅读、筛选、分析和输出串成一个稳定流程。
一个完整的 AI 搜索自动化系统,至少应包含以下能力:
- 能够根据主题自动生成搜索关键词;
- 能够调用搜索引擎获取多来源资料;
- 能够抓取网页正文并清洗文本;
- 能够利用大模型进行归纳分析;
- 能够输出结构化报告;
- 能够定时运行或推送给团队;
- 能够通过可信度评分、引用标注和知识库存储不断增强。
本文提供的是一个轻量但完整的起点。你可以先用它搭建个人版 AI 搜索助手,再逐步扩展成企业级情报系统、自动化内容生产系统或知识研究平台。
当搜索不再只是“找链接”,而是自动完成“理解、检索、判断、总结和交付”,AI 搜索才真正进入工作流时代。