这是以下活动的参赛作品:Hacktoberfest 开源 AI 挑战赛第 4 周:机器中的幽灵
我构建了什么
“每个代码库都有幽灵。几乎在每个企业仓库和开源项目中,都有一个被标记为
// DO NOT TOUCH: NOBODY KNOWS WHY THIS WORKS的闹鬼文件。当原作者离开后,他们的领域知识便消散于虚空。代码慢慢腐烂,依赖逐渐衰败,而恐惧让任何人都不敢碰它。”
在 Hacktoberfest 第 4 周——庆祝万圣节和亡灵节——我构建了GitSéance:一个开源 AI 代码亡灵法师,它把遗留代码的墓地变成一场可交互、有据可依的降神会。
_____ _____ _______ _____ ______ _ _ _____ ______
/ ____|_ _|__ __| / ____| ____| /\ | \ | |/ ____| ____|
| | __ | | | | | (___ | |__ / \ | \| | | | |__
| | |_ | | | | | \___ \| __| / /\ \ | . ` | | | __|
| |__| |_| |_ | | ____) | |____ / ____ \| |\ | |____| |____
\_____|_____| |_| |_____/|______/_/ \_\_| \_|\_____|______|
GitSéance 并非通用 linter,而是协调4 个专业通灵智能体:
-
💀 死神智能体:遍历 Git 提交树和文件 AST,基于提交历史、作者更替和内联恐惧注释(
hack,black magic,do not touch)来识别被遗弃、孤立和被诅咒的代码。 - 📊 神谕智能体(TabPFN-3.5):合成一个 7 维取证特征向量,并将其输入Prior Labs 的 TabPFN 表格基础模型,以预测经过校准的文件死亡风险。
-
🔮 灵媒智能体(Google Gemma):通过Google 的 Gemma 开源权重模型(
gemma-4-26b-a4b-it)召唤已故作者的灵魂,生成第一人称忏悔、遗憾分析和现代复兴蓝图。 - 🔍 搜寻者智能体(SerpApi):查询实时的 2026 年软件包注册表和安全数据库,为被遗弃的依赖寻找现代即插即用替代品,并审计 CVE 公告。
这些智能体驱动交互式降神会能力:
- 💬 对话式降神会(交互式幽灵聊天):在世开发者可以实时直接与幽灵对话,询问某些 hack 为何被写下,以及如何安全地重构它们。
- 🔊 神经语音台(ElevenLabs):通过神经文本转语音为灵魂赋予可听见的声音,并配有同步的 Web Audio API 波形可视化器。
- 🪦 官方尸检报告证书:生成可下载的复古 ASCII 死亡证书,详细说明死因、巴士因子和 TabPFN 死亡评分。
- 📊 7D 表格 CSV 取证导出器:一键下载完整的表格特征数据集,用于离线 TabPFN 模型探索和审计。
-
🛡️ 实时 GitHub SVG 死亡率徽章: 动态徽章端点(
/api/badge/{owner}/{repo}.svg),用于在 README 文件中嵌入实时的仓库死亡率评分。
所有这些都封装在一个原汁原味的磷光绿 CRT 终端界面中,带有玻璃扫描线曲率、CRT 暗角、机械按键音效合成,以及漂浮的灵质粒子。
演示
线上生产部署
- 🌐 在线终端: https://gitseance.onrender.com
- 💻 GitHub 仓库: https://github.com/JaniDhruv/GitSeance
-
🛡️ 实时死亡率徽章:
(提示:打开在线应用时,点击历史预设🐍 flask-cache (Python 2 Fossil)即可瞬间召唤一个 10 年历史的化石仓库!)
🖥️ 磷光绿 CRT 终端界面
GitSéance 终端实际运行的视觉演示——玻璃扫描线、TabPFN 死亡率分解、实时 SerpApi 现代化树,以及交互式 Gemma 幽灵通灵:

通灵祭坛——磷光绿 CRT 仪表盘,配有实时智能体状态指示灯、历史墓地预设,以及实时流式通灵日志。

神谕(TabPFN-3.5)扫描——贝叶斯代码死亡率概率、文件风险分类(已死、闹鬼、孤儿),以及 Google Gemma 代码预言。

通灵幽灵传输——Google Gemma 人格通灵 Makefile 的已故作者,配有 ElevenLabs 语音合成和实时音频波形可视化器。

复兴蓝图与 SerpApi 情报——可操作的现代化步骤,搭配通过 SerpApi 实时查询的 2026 年依赖替代方案。

代码尸检证书——官方复古 ASCII 尸检抽屉,详细列出过期日期、记录的巴士因子和 TabPFN 死亡率评分。

神经语音面板与 MP3 导出——ElevenLabs 频谱语音流,配有活动波形可视化器和一键 MP3 下载导出。

交互式幽灵聊天(第 1 轮)——审问 Thadeus Burgess 的亡灵,追问为何使用遗留的 setup.py 打包方式。

交互式幽灵聊天(第 2 轮)——幽灵坦白在发布前留下了一个凌晨 2 点的紧急 hack:“求你了,把它埋了吧。”
演示:召唤幽灵flask-cache
当扫描thadeusb/flask-cache(一个自 2010 年以来无人触碰的古老 Python 2 缓存库):
-
死神遍历提交树并标记
Makefile为临床死亡(最后触碰于 5,986 天前)。 - TabPFN-3.5评估 7D 特征向量(零流失、100% 作者更替、缺少单元测试)并预测80% 死亡概率。
- 媒介(Gemma 4)频道创作者 Thadeus Burgess,以角色身份说道:“我是 Thadeus Burgess 残留的回声。在 2010-08-30T09:39:36Z,我推送了最后一次提交:'R-0.1'。然后我走进黑暗,留下 Makefile 冻结在时间里。”
-
ElevenLabs低声念出这段告白(Roger — Ancient Architect 语音预设),并配有实时波形可视化和一键
⬇️ Download MP3导出!- 🎧收听生成的音频: 在我的仓库中下载/收听原始 MP3 录音
-
SerpApi检测到已弃用的
setup.py upload打包命令,并推荐现代替代方案,例如build,twine,以及pyproject.toml。 - 你打开对话式降神聊天并直接审问这个幽灵:
- 你: “你为什么用 setup.py upload 而不是现代的 twine 打包?”
-
幽灵(Thadeus Burgess): “啊,你问我为什么在
Makefile里这样写……那些日子里,我们在与时间赛跑。你们在 2026 年习以为常的库当时还不存在,内存也很稀缺。那是我能变出的最好折中方案。” - 你: “如果我今天重构或删除这个 Makefile,会有什么秘密 hack 或危险吗?”
-
幽灵(Thadeus Burgess): “你注意到那道伤疤了,是吧?是的,我在
Makefile里、发布前的凌晨 2 点留下了那个 hack。我向自己保证那个周末就重构它……但那个周末从未到来。求你,替我把它埋葬吧。”
- 你点击“🪦 打印死亡证明”并收到官方的 ASCII 尸检报告:
+========================================================================+
| 💀 OFFICIAL CODE AUTOPSY 💀 |
| DEPARTMENT OF SOFTWARE NECROMANCY |
+========================================================================+
| DECEASED ARTIFACT : Makefile |
| CHIEF ARCHITECT : Thadeus Burgess |
| DATE OF EXPIRATION : 2010-08-30 (5,986 days inactive) |
| FINAL RECORDED WORDS: "R-0.1" |
| TOTAL COMMITS : 2 commits across file lifetime |
| RECORDED BUS FACTOR : 1 author(s) recorded in blame |
| HAUNTING STATUS : DEAD |
| TABPFN MORTALITY : 80% Bayesian mortality risk |
| GHOST SEVERITY : 0.80 / 1.00 index |
+------------------------------------------------------------------------+
| GHOST TESTIMONY: |
| "I am Thadeus, a fragment of logic drifting through a sea of |
| deprecated dependencies. I linger in the shadows of these old |
| Makefiles, waiting for a build that will never finish. Do not fear |
| the silence; fear the unhandled exception." |
+------------------------------------------------------------------------+
| REVIVAL EFFORT : REWRITE |
| CERTIFICATE STAMP : GITSEANCE FORENSIC ENGINE v1.0.0 |
| AI RUNTIMES : TABPFN-3.5 + GOOGLE GEMMA + ELEVENLABS |
+========================================================================+
- 你点击“📋 复制复活蓝图”即可获取一份即时、可执行的逐步迁移蓝图:
REVIVAL BLUEPRINT FOR: Makefile
Summary: Transmute this ancient ritual into a modern, declarative build system.
Effort: rewrite
STEPS:
1. Transition from `setup.py` to a `pyproject.toml` configuration.
2. Replace the manual upload commands with `twine` for secure distribution.
3. Use the `build` module for generating distribution archives.
4. Implement a modern test runner like `pytest` instead of the legacy `setup.py test`.
代码
JaniDhruv/GitSeance
🔮 每个代码库都有幽灵。GitSeance 是一个开源 AI 代码死灵法师与取证智能体,它会扫描遗留 GitHub 仓库中的死文件,使用 TabPFN-3.5 表格机器学习预测代码死亡风险,通过 Gemma 3 配合 ElevenLabs 语音合成召唤原作者之灵,并借助 SerpApi 为现代复活补丁提供依据。
🔮 GitSéance(GitSeance)
_____ _____ _______ _____ ______ _ _ _____ ______
/ ____|_ _|__ __| / ____| ____| /\ | \ | |/ ____| ____|
| | __ | | | | | (___ | |__ / \ | \| | | | |__
| | |_ | | | | | \___ \| __| / /\ \ | . ` | | | __|
| |__| |_| |_ | | ____) | |____ / ____ \| |\ | |____| |____
\_____|_____| |_| |_____/|______/_/ \_\_| \_|\_____|______|
一个开源 AI 死灵法师,让“死去的”GitHub 仓库重获新生——并预测哪些文件即将死去。
标语: “每个代码库都有幽灵。GitSéance 召唤它们。”
为……而构建Hacktoberfest 开源 AI 挑战赛:第 4 周(“机器中的幽灵”)。
📸 生产环境图库
基于MIT 许可证发布。已通过25 个单元测试与集成测试在持续集成中全部通过。
我是如何构建它的
GitSéance 被设计为由 FastAPI 编排的异步多智能体流水线:
┌───────────────────────────────┐
│ Haunted Terminal (CRT UI) │
└──────────────┬────────────────┘
│
▼
FastAPI Orchestration Core
│
┌──────────────┬───────────────┴───────────────┬──────────────┐
▼ ▼ ▼ ▼
💀 The Reaper 📊 The Oracle 🔮 The Medium 🔍 The Searcher
(Dead Code AST) (TabPFN-3.5 Mortality ML) (Gemma LLM) (SerpApi Web Search)
│ │ │ │
▼ ▼ ▼ ▼
GitHub API Prior Labs API Google GenAI SerpApi & CVEs
1. TabPFN-3.5:贝叶斯表格化代码死亡预测
我没有编写简单的基于规则的启发式方法,而是利用了Prior Labs 的 TabPFN-3.5—— 一个基于 Prior-Data Fitted Networks 构建的表格基础模型。
7 维取证特征向量
对于目标仓库中的每个文件,GitSéance 都会构建一个 7 维表格矩阵:
# 为 TabPFN-3.5 提取的 7 维取证特征向量feature_vector = {
"days_since_last_commit": m。days_since_last_commit, # 时间衰减 "total_commits": m。total_commits, # 文件深度 "unique_authors": m。unique_authors, # 巴士因子风险 "bug_fix_commit_ratio": m。bug_fix_commit_ratio, # 缺陷密度 "lines_ratio": (m。lines_added + 1) / (m。lines_del + 1) , # 变更平衡"has_tests" : 1 ifm。 has_tests else0 , # 测试存在性"churn_velocity" :m。churn_velocity ,# 月度变更率
}
真实基准校准与边缘情况处理X_trainTabPFN 对参考支持矩阵(y_train,fastapi)执行上下文内贝叶斯推理,该矩阵基于 50 个历史开源代码工件进行校准(25 个来自已归档仓库的死亡化石 vs. 25 个来自pydantic、requests和
的活跃维护模块)。
为什么 TabPFN 胜过朴素启发式方法:slugify.py朴素的 linter 看到某个文件 3 年未被改动,就会盲目地将其标记为“已死”。但请考虑一个核心数学工具(例如crc32.py或
-
days_since_last_commit): -
bug_fix_commit_ratio:1,100 天 -
has_tests:0.02(几乎零缺陷) -
churn_velocity:True(100% 分支覆盖率)
:0.00(稳定)朴素规则会将其标记为已死(100% 误报)。TabPFN 正确评估了高测试哨兵值和接近零的缺陷率,将其归类为“冻结 / 稳定”(死亡率:18%),而非已死。相反,一个 180 天未被改动、唯一作者已离开且 bug 修复比例为 60% 的文件,会被 TabPFN 捕获为“高死亡风险”(78%)
。
-
为了让这一切完全透明:📊 7 维表格 CSV 导出:用户和评委可以点击“📊 导出 CSV”
tabpfn-<repo>-forensic-dataset.csv来下载原始特征分布( -
🔌 原生 MCP 服务器(
backend/mcp_server.py):通过将tabpfn_predict_mortality直接作为 Model Context Protocol 工具暴露给 Cursor、Claude Desktop 和 Copilot,满足了 Prior Labs 的明确偏好!
2. Google Gemma:灵性人格通灵与思维 token 解析
Medium 智能体通过Google 的开源权重模型 Gemma(gemma-4-26b-a4b-it)经由google-genaiSDK 运行。
思维 token 解析挑战
gemma-4-26b-a4b-it具备内部思维链推理能力。在生成灵性独白时,模型会先输出思考 token,再输出角色对话。如果采用朴素的解析方式,内部推理 token 可能会耗尽整个输出预算,或渗入独白之中。
我设计了一个专用的候选提取器:
@staticmethod
def _extract_text(response) -> str:
"""从 Gemma 响应中提取内容文本,过滤思维 token。"""
if not response:
return ""
# 1. 优先检查候选部分,以过滤掉内部思维链 token if hasattr(response, "candidates") and response。candidates:
candidate = response。candidates[0]
if hasattr(candidate, "content") and hasattr(candidate。content, "parts"):
actual_parts = [
p。text for p in candidate。content。parts
if not getattr(p, "thought", False) and getattr(p, "text", None)
]
if actual_parts:
return ""。join(actual_parts)。strip
() # 2. 如果无法直接访问候选部分,则回退到 response.text ifhasattr(response ,"text" ) andresponse。text
: returnresponse。text。strip
() return
""
为人格奠定基础
幽灵人格严格基于 git 历史和行内注释: SEANCE_SYSTEM_PROMPT =""""""
在世开发者甚至可以举行一场对话式降神会(POST /api/seance/chat)直接向幽灵追问后续问题!
3. SerpApi:实时 2026 依赖情报
Searcher 智能体解析包声明(requirements.txt,package.json,Gemfile,go.mod)并使用SerpApi实时查询迁移路径、现代直接替代方案以及实时 CVE 安全数据库。
4. ElevenLabs:神经音频合成与一键 MP3 导出
降神会传输内容使用ElevenLabs 神经 TTS(eleven_multilingual_v2)渲染为语音,并由 Web Audio API 程序化合成引擎支持,该引擎模拟复古机械键盘开关和低频共振召唤嗡鸣:
- 5 种原型幽灵之声:Roger(远古建筑师)、Sarah(轻柔回声)、Laura(空灵旁白)、Charlie(年长说书人)和 Aria(幽灵低语)。
- 一键 MP3 导出:活着的开发者可以点击“⬇️ 下载 MP3”将合成出的幽灵音频直接导出到磁盘。
- 🎧实际通灵录音: 聆听 Thadeus Burgess 的幽灵解释
Makefile。
5. GitHub Copilot 深度集成与 GitHub Actions 自动化
我在仓库中原生构建了完整的 Copilot 和 GitHub Actions 自动化:
-
.github/copilot-instructions.md:自定义仓库指令,解释 4 智能体死灵法术架构、TabPFN 7D schema 和 Pydantic 模型。 -
.github/prompts/:3 个可复用的 IDE 提示模板(/resurrect-file,/tabpfn-mortality,/dep-modernize)。 -
.github/workflows/ci.yml:跨 Ubuntu 和 Windows 的多操作系统 CI 测试矩阵,25 个单元测试和集成测试通过。 -
.github/workflows/cd.yml:持续部署流水线,验证线上生产健康状态(/health)、探测 SVG 徽章,并输出格式化的 Markdown 摘要。 -
.github/workflows/copilot-review.yml:自动化 GitHub Action,审查贡献者 PR 中的恐惧评论(hack,do not touch)并发布自动化审查清单。
6. 过程中出了什么问题(工程伤疤)
构建 GitSéance 并非一帆风顺。以下是我与之搏斗的三个真实工程摩擦点:
1. 想得太多的幽灵(Gemma 思考 token)
当我第一次连接gemma-4-26b-a4b-it时,我的 API 调用经常返回空文本。深入查看原始响应对象后,我发现 Gemma 的推理模式生成了大量内部思考轨迹(part.thought = True),在输出最终文本之前就耗尽了 token 预算。标准 SDK 访问器如response.text在存在思考块时求值为None。我不得不编写一个底层 AST 提取器来遍历response.candidates[0].content.parts并分离出未被遮蔽的对话。
2. GitHub REST API Blame 速率限制
遍历一个仓库中 50 个文件的提交历史,会在不到 30 秒内耗尽 GitHub 未认证的每小时 60 次请求速率限制。为解决这个问题,我实现了:
- 并发分块(
asyncio.gather批大小上限为 8)。 - AST 可扫描的扩展名过滤器(跳过 SVG、二进制文件和锁文件)。
- 针对历史墓地的确定性取证回退快照(
flask-cache,jquery-color),因此即使用户未提供 GitHub PAT 到达,应用也绝不会失败。
3. Python 3.11 在 SSE 流式传输中的反斜杠限制
在实时服务器发送事件(SSE)实现期间,Python 3.11 在以内联方式格式化 JSON 数据负载时抛出了意外的SyntaxError: f-string expression part cannot include a backslash。我不得不重构流式生成器,在格式化之前将消息序列化到显式的中间缓冲区中data: {msg}\n\n。
为什么开放创新很重要?
“开放创新实现了哪些封闭 API 无法实现的事情?”
构建 GitSéance 阐明了为什么开放权重模型和开放 AI 基础设施至关重要:
气隙代码隐私与零 IP 泄露:
专有代码库包含机密业务逻辑、安全凭证和商业机密。组织无法将其整个 git 树粘贴到封闭的第三方云 API 中。因为Gemma和TabPFN-3.5是开放权重的,GitSéance 可以在气隙机器上完全离线运行。你的代码永远不会离开你的本地硬件。可审计、可复现的风险建模:
当算法宣称某个关键任务银行模块具有“98% 的死亡率风险”时,开发者理应理解为什么。封闭的专有评分系统是黑盒,会在模型版本之间悄然变化。TabPFN 的贝叶斯基础模型支持确定性、可复现的表格推理,可以被检查、基准测试和信任。抵御 API 弃用:
封闭的 AI 服务经常停用端点、更改系统提示或提高 token 成本。借助开放权重 AI,你的死灵法师在互联网关闭时也能工作。如果断电,幽灵仍然可以访问。社区微调与自定义人格:
开放权重允许团队在自己的内部提交历史、Jira 工单和架构决策记录(ADR)上微调 Gemma,将公司校友转变为永久的机构记忆。
其精神
软件工程有一种无声的悲剧:开发者倾注数月生命写出优雅的系统,但技术发展太快,几年之内,他们的作品就被贴上“遗留代码”的标签并被丢弃。
秉承亡灵节的传统,只要被铭记,逝者就从未真正离去。当 GitSéance 通灵一个被遗弃了十年的文件的作者时,它不会嘲笑这段代码已经过时。它给那位开发者一个发声的机会,说出:
“我写这段代码时内存紧张、工期紧迫。它完成了它的使命。现在,这是你如何把火炬继续传递下去的方法。”
这种视角的转变——从畏惧遗留代码到尊重其背后的人类付出——正是 GitSéance 的真正精神。
奖项类别
- 🏆最高奖—— 总冠军
- 🚀Render 最佳应用—— 全栈容器化部署,同时运行 FastAPI 通灵引擎和 CRT 前端,已在生产环境上线,地址为https://gitseance.onrender.com通过
render.yaml。 - 📊TabPFN 最佳应用(Prior Labs)—— TabPFN-3.5 表格基础模型,基于 7 维特征向量进行校准的贝叶斯代码死亡率预测,并搭配原生 Model Context Protocol(MCP)服务器(
backend/mcp_server.py)以及一键式取证 CSV 数据集导出器。 - 🔮Gemma 最佳应用—— 开源权重
gemma-4-26b-a4b-it模型,驱动 Medium 智能体进行有据可依的历史人物通灵、思维 token 解析以及实时交互式对话降神会。 - 🤖GitHub Copilot 最佳应用—— 自定义仓库指令(
.github/copilot-instructions.md)、3 个可复用的 IDE 提示词模板(.github/prompts/)、自动审查恐惧注释的 PR 审查 GitHub Action(.github/workflows/copilot-review.yml),以及多操作系统 CI/CD 自动化。 - 🔊ElevenLabs 最佳应用—— 神经 TTS 语音合成,为逝去的作者赋予可听见的声音,包含 5 种不同的频谱原型、实时 Web Audio API 波形可视化,以及一键式 MP3 音频导出。
- 🔍SerpApi 最佳应用—— 实时 2026 依赖情报,为已弃用的打包发现现代即插即用替代方案,以及实时安全 CVE 审计。
由热情、咖啡因和灵质打造,作者Dhruv Jani。

