2026 年,我用 180 行代码让 AI 自己开会写完了一个小工具
·
最近刷到太多人在讨论「AI Agent 到底能不能干活」,我就花了一个晚上,用 CrewAI + OpenAI(也可以换成国产模型)搭了一个最简单但能跑通的「AI 小团队」。
目标任务非常具体:
“帮我写一个命令行工具:输入任意 B 站视频 av号 或 bv号,自动爬取视频标题、UP主、播放量、弹幕数、点赞数、投币数、收藏数、分享数,并以 Markdown 表格形式输出最近 7 天同 UP 主的其他热门视频(播放量前 5)。”
下面是完整流程和代码(2026 年 1 月测试通过)。
依赖安装(一行命令)
pip install crewai crewai-tools langchain-openai python-dotenv requests beautifulsoup4
(如果你用国产模型,把 langchain-openai 换成 langchain-community + 对应的 LLM 即可)
.env 文件(放 API Key)
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
# 如果用通义千问、DeepSeek、硅基流动等,就改成对应的环境变量
核心代码(main.py)
import os
from dotenv import load_dotenv
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool, ScraperTool
from langchain_openai import ChatOpenAI
load_dotenv()
# ====================== LLM 配置 ======================
llm = ChatOpenAI(
model="gpt-4o-mini", # 也可以换 gpt-4o / qwen-max / deepseek-chat 等
temperature=0.4,
)
# ====================== 工具准备 ======================
search_tool = SerperDevTool() # 需要去 serper.dev 注册免费 api key
scrape_tool = ScraperTool()
# ====================== 定义四个角色 ======================
researcher = Agent(
role="B站数据研究员",
goal="从 B站 页面和搜索结果中提取准确的视频统计数据",
backstory="你非常熟悉 B站 的页面结构,能从 HTML 中精准抠出标题、播放量、弹幕数等",
verbose=True,
allow_delegation=False,
tools=[scrape_tool, search_tool],
llm=llm
)
analyst = Agent(
role="数据分析师",
goal="整理数据、找出同一个 UP 主的热门视频,并按播放量排序",
backstory="你擅长清洗杂乱的数据,找出规律,给出简洁结论",
verbose=True,
allow_delegation=False,
llm=llm
)
writer = Agent(
role="Markdown 报告撰写者",
goal="把所有信息整理成美观、易读的 Markdown 表格",
backstory="你写 Markdown 非常专业,表格对齐完美,标题吸引人",
verbose=True,
allow_delegation=False,
llm=llm
)
reviewer = Agent(
role="质量审查员",
goal="检查数据是否合理、表格是否美观、逻辑是否通顺",
backstory="你极其挑剔,发现任何小问题都会指出来要求重写",
verbose=True,
llm=llm
)
# ====================== 定义任务(顺序执行) ======================
task1 = Task(
description=(
"用户会给你一个 B站 视频的 av 或 bv 号,例如 av12345678 或 BV1xx411c7mU。"
"请先访问视频页面,提取:标题、UP主昵称、UP主空间链接、播放量、弹幕数、点赞、投币、收藏、分享。"
"然后用搜索工具找到这个 UP 主最近 7 天内其他视频,并列出播放量前 5 的视频链接和标题。"
),
expected_output="结构化 JSON,包含原视频信息 + 同 UP 最近 7 天热门视频列表",
agent=researcher
)
task2 = Task(
description="接收 researcher 的原始数据,清洗数字(去掉 万、亿 等单位,转成整数),按播放量降序排序,保留前 5 条",
expected_output="清洗后的结构化数据(JSON 格式)",
agent=analyst
)
task3 = Task(
description=(
"把 analyst 的结果转成 Markdown 格式:"
"1. 先输出原视频的关键数据(一行总结)"
"2. 再输出一个表格:标题 | BV号 | 播放量 | 点赞 | 投币 | 收藏 | 分享 | 链接"
"表格要整齐对齐,使用中文表头"
),
expected_output="完整的 Markdown 文本",
agent=writer
)
task4 = Task(
description=(
"仔细审查 writer 输出的 Markdown:"
"- 数据是否和前面的 JSON 一致?"
"- 数字有没有写错单位?"
"- 表格有没有对齐崩坏?"
"- 有没有错别字或逻辑不通?"
"如果有问题,写出详细意见并要求重写;如果没问题,直接输出 '通过' 并附上最终 Markdown"
),
expected_output="最终审查意见 + 通过后的 Markdown(或要求重写的任务描述)",
agent=reviewer
)
# ====================== 组装 Crew 并启动 ======================
crew = Crew(
agents=[researcher, analyst, writer, reviewer],
tasks=[task1, task2, task3, task4],
process=Process.sequential, # 顺序执行,也可以试 hierarchical
verbose=2 # 2 最详细,方便 debug
)
if __name__ == "__main__":
video_id = input("请输入 B站 视频 av 或 bv 号(例如 BV1xx411c7mU):").strip()
result = crew.kickoff(inputs={"video_id": video_id})
print("\n" + "="*60)
print("最终输出(审查通过版本):")
print(result)
实际运行效果(2026年1月某次测试)
输入:BV1xx411c7mU
输出大致是这样的 Markdown:
### 原视频概览
标题:【2026新年】AI彻底改变了我的工作流
UP主:小明AI日记
播放量:324万
弹幕数:4.8万
点赞:12.6万 投币:5.9万 收藏:8.2万 分享:3.1万
### 该UP主最近7天其他热门视频(播放量Top5)
| 排名 | 标题 | BV号 | 播放量 | 点赞 | 投币 | 收藏 | 分享 | 链接 |
|------|----------------------------------------|--------------|----------|--------|--------|--------|--------|-------------------------------|
| 1 | Claude 4 实测:比 o1 更强? | BV1mK421C7pQ | 458万 | 18.9万 | 9.2万 | 13.4万 | 5.6万 | https://b23.tv/xxxxxxx |
| 2 | 2026 年最值得本地部署的 3 个模型 | BV1Nx411a7mR | 389万 | 14.7万 | 6.8万 | 10.1万 | 4.2万 | https://b23.tv/yyyyyyy |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
几点真实感受
- 4 个 agent 真的会“吵架” —— reviewer 经常把 writer 打回去重写表格对齐
- gpt-4o-mini 已经够用,性价比最高;如果追求零成本,可以全部换成 qwen2.5:14b 或 deepseek-r1
- 最耗时的其实是工具调用(爬虫 + 搜索),模型推理反而很快
- 再加记忆(CrewAI 的 memory=True)或者让它们循环辩论,效果还能更好,但代码会变复杂
想再进阶的可以试试:
- 加文件读写工具 → 直接输出 .md 文件
- 用 AutoGen GroupChat 替换 sequential 变成自由辩论
- 把 reviewer 改成多轮 review,直到通过为止
你也可以直接 fork 这段代码,改成爬小红书、知乎、微博……任何你感兴趣的平台。
AI Agent 已经不是玩具了,它真的开始抢“脏活累活”了。
你准备让 AI 帮你干哪一件最烦的事?
(完)
更多推荐


所有评论(0)