最近刷到太多人在讨论「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        |
| ...  | ...                                    | ...          | ...      | ...    | ...    | ...    | ...    | ...                           |
几点真实感受
  1. 4 个 agent 真的会“吵架” —— reviewer 经常把 writer 打回去重写表格对齐
  2. gpt-4o-mini 已经够用,性价比最高;如果追求零成本,可以全部换成 qwen2.5:14b 或 deepseek-r1
  3. 最耗时的其实是工具调用(爬虫 + 搜索),模型推理反而很快
  4. 再加记忆(CrewAI 的 memory=True)或者让它们循环辩论,效果还能更好,但代码会变复杂

想再进阶的可以试试:

  • 加文件读写工具 → 直接输出 .md 文件
  • 用 AutoGen GroupChat 替换 sequential 变成自由辩论
  • 把 reviewer 改成多轮 review,直到通过为止

你也可以直接 fork 这段代码,改成爬小红书、知乎、微博……任何你感兴趣的平台。

AI Agent 已经不是玩具了,它真的开始抢“脏活累活”了。

你准备让 AI 帮你干哪一件最烦的事?

(完)

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐