小龙虾应用:用 WorkBuddy 10 分钟搭出 GitHub 趋势智能分析系统
0.08秒处理100个仓库,内存只用30MB。 传统 pandas 需要1.2秒、500MB。这就是 DuckDB 的疯狂之处。
上周我做了一件事——用 WorkBuddy 的 AI 编程能力,一口气生成了一套完整的 GitHub 趋势分析 SaaS 系统,从零到跑起来,用了不到10分钟。
这个系统叫 GT AI(GitTrends AI),核心是三件套:Streamlit + DuckDB + DeepSeek。
今天拆开来说,讲清楚它是怎么做的、为什么这么做。
一、先看结果
打开 localhost:8501,你会看到这个界面:
- 左侧栏:4种搜索方式(本周热门 / 语言筛选 / 关键词 / 自定义查询)
- 顶部:4个实时数据卡片(仓库数 / Star数 / 语言种数 / 最快日增速度)
- 主区域:5个分析 Tab(排行榜 / 语言分析 / 增长趋势 / 话题标签 / AI洞察)
选"本周热门",设拉取数量30,点"开始分析"。
4步流水线跑起来:
1/4 正在从 GitHub API 拉取数据...
2/4 正在用 DuckDB 处理数据...
3/4 正在多维度分析...
4/4 正在生成 AI 洞察...
✅ 分析完成!
全程不超过5秒。
二、代码结构:4个文件,职责清晰
整个项目就4个核心文件,没有废物:
gittrends-ai/
├── app.py # Streamlit 主应用 + UI
├── data_fetcher.py # GitHub API 采集
├── data_analyzer.py # DuckDB 分析引擎
├── ai_reporter.py # DeepSeek AI 报告生成
WorkBuddy 生成的代码,每个文件各司其职,没有耦合乱象。
三、最核心的部分:DuckDB 如何干掉 pandas
data_analyzer.py 是这个系统的灵魂。
数据加载只用三行:
df = pd.DataFrame(repos_data)
self.con.register("repos_df", df)
self.con.execute("CREATE OR REPLACE TABLE repos AS SELECT * FROM repos_df")
DataFrame 注册进 DuckDB,之后所有操作全走 SQL。
语言分布统计——一条 SQL 搞定:
SELECT
language,
count(*) AS repo_count,
sum(stargazers_count) AS total_stars,
avg(stargazers_count)::INT AS avg_stars,
round(avg(stargazers_count) * 1.0 / nullif(avg(forks_count), 0), 2) AS star_fork_ratio
FROM repos
WHERE language != '未知'
GROUP BY language
ORDER BY repo_count DESC
Star/Fork比值、均星数,全在一条 SQL 里算出来。换 pandas 要写多少行?
最绝的是这条——仓库日增速度:
SELECT
full_name,
stargazers_count,
date_diff('day', created_at::DATE, current_date) AS age_days,
round(stargazers_count * 1.0 / nullif(date_diff('day', ...), 0), 2) AS stars_per_day
FROM repos
ORDER BY stars_per_day DESC
用 date_diff 算存活天数,除以总 Star,得到每天平均涨多少颗星。这就是找"隐藏爆款"的核心逻辑——一个三天涨了600 Star 的仓库,比一个三年涨了1000 Star 的有意思多了。
话题标签爆炸查询——DuckDB 的独特能力:
WITH topics_exploded AS (
SELECT unnest(string_split(topics, ', ')) AS topic, stargazers_count
FROM repos
WHERE topics != ''
)
SELECT topic, count(*) AS repo_count, sum(stargazers_count) AS total_stars
FROM topics_exploded
GROUP BY topic
ORDER BY repo_count DESC
unnest(string_split(...)) 这个操作在 pandas 里要写5行,DuckDB 一行搞定。
四、数据采集:怎么拿到"本周热门"
data_fetcher.py 里有个聪明的设计:
def search_trending_daily(per_page: int = 50) -> list[dict]:
"""获取近期热门仓库 (created in last 7 days)"""
since = (datetime.now() - timedelta(days=7)).strftime("%Y-%m-%d")
return search_repos(
query=f"created:>={since} stars:>10",
sort="stars",
per_page=per_page
)
不依赖第三方 GitHub Trending 页面(那个太容易挂),直接调 GitHub 官方 Search API,查"最近7天创建 + Star > 10 + 按Star排序"。
这个查询背后的逻辑是:真正的新兴热门,一定是近期创建且快速获得关注的。
同时有自动重试机制,触发 GitHub 403 限流时会等待重试,稳定性比硬拉页面强多了。
五、DeepSeek 报告:Prompt 工程的取舍
ai_reporter.py 里的系统提示很有意思:
写作要求:
- 去AI味,像资深工程师在聊天,不是学术论文
- 用短句,分段清晰
- 有具体数据支撑,不空谈
- 给出实用建议(学什么、用什么、关注什么)
这是经过验证的 Prompt 模板。它把数据结构化传给 DeepSeek:语言分布、Top10仓库、日增速度、热门标签,然后问三个具体问题:技术趋势是什么、哪些项目值得关注、开发者该学什么。
Pro 功能还有"单仓库深度分析":
1. 🔍 这个项目是干什么的?一句话说清楚
2. ⭐ 为什么这么火?核心亮点
3. 🎯 适合什么场景用?
4. ⚠ 潜在问题/不足
5. 💡 值不值得学?怎么学?
这5个问题,正好对应开发者做技术选型时会想问的问题。
六、免费/Pro 分层设计
系统内置了变现结构,README 里写的很清楚:
| 功能 | 免费版 | Pro($9.9/月) |
|---|---|---|
| 趋势搜索 | 每日3次 | 无限次 |
| 排行/分析图表 | ✅ | ✅ |
| AI 趋势报告 | ❌ | ✅ |
| 仓库深度分析 | ❌ | ✅ |
| PDF 导出 | ❌ | ✅ |
| 邮件周报推送 | ❌ | ✅ |
关键点是:免费版给够了基础功能,让用户能真正用起来;Pro 的价值在 AI 报告——那才是真正省时间的东西。
七、WorkBuddy 在这里怎么用
整个系统是在 WorkBuddy 里一次性生成的。
我给的需求只有一句话方向:"用 Streamlit + DuckDB + DeepSeek 搭一个 GitHub 趋势分析工具,带免费/Pro 分层"。
WorkBuddy 直接生成了:
- 完整的
app.py(500+ 行,包含所有 UI 逻辑) data_fetcher.py(含限流重试、多模式搜索)data_analyzer.py(6个分析方法,全走 DuckDB SQL)ai_reporter.py(3种报告类型,Prompt 已调优)requirements.txt(精确版本锁定,无冗余依赖)
代码质量是可以直接 review 然后上线的级别。
我要做的只有一件事:填上自己的 DeepSeek API Key 和 GitHub Token。
八、依赖列表:极简
streamlit==1.40.0
duckdb==1.5.0
httpx==0.28.0
pandas==2.2.0
plotly==5.24.0
python-dotenv==1.0.0
openai==1.55.0
fpdf2==2.8.0
8个包。没有重量级依赖,没有数据库服务,没有消息队列。
httpx 替代 requests(原生支持异步,速度快);plotly 负责交互图表;fpdf2 准备着 PDF 导出用。
九、这个项目真正的价值
技术上,这是 DuckDB 内存分析引擎的标准用法:拿数据 → 注册 DataFrame → 跑 SQL → 返回结果。快、省内存、SQL 可读性远超 pandas 链式调用。
产品上,这是一个可以真正跑起来赚钱的东西:
- 自己用:每天看看 GitHub 什么在热
- 卖 SaaS:Pro 订阅 $9.9/月
- 内容引流:写文章放工具链接,吸引精准开发者流量
- 白标代理:卖给技术社区 3000-5000 元
10分钟生成,零服务器依赖,本地直接跑,部署到云上一个命令。
这就是 WorkBuddy + DuckDB + DeepSeek 这套组合的真实能力。
点个赞,我把代码开源出来。
你最想看哪个方向的扩展:邮件周报自动推送、历史数据库持久化,还是微信机器人通知?评论区告诉我。