这是 Weekend Challenge: Passion Edition 的参赛作品
我构建了什么
Python Persona 是一款桌面应用,它可以分析任意 GitHub 用户的 Python 代码,并展示他们作为开发者的真实身份。你只需输入用户名,应用就会获取其仓库、下载 Python 文件,并展示其使用的框架、包、特性和代码模式。每个数据点都链接到 GitHub 上的确切文件和行号,方便你学习真实代码。
我还构建了 AI 学习路线图功能。当你发现想学习的主题时,点击它,应用会构建反向依赖图。它会从你的主题反向追溯到基础知识,然后一步步教你。这源于我对 ChatGPT 和 Grok 的不满。它们会以自己认为合适的水平作答,但我常常因为基础不够扎实而无法理解答案。这个应用通过先教授先修知识来解决这个问题。
该应用还会将每次分析存储在 Snowflake 中,并将你的代码与你研究过的所有人进行比较。你可以看到自己缺少哪些包、哪些特性从未使用过,以及接下来应该研究哪些顶尖开发者的仓库。
演示
代码
🐍 Python Persona
停止猜测该学什么。开始研究真实代码。
为什么开发这款应用
Python Persona 是一款桌面应用,它可以分析任意 GitHub 用户的 Python 代码,并展示他们作为开发者的真实身份。你只需输入用户名,应用就会获取其仓库、下载 Python 文件,并展示其使用的框架、包、特性和代码模式。每个数据点都链接到 GitHub 上的确切文件和行号,方便你学习真实代码。
我还构建了 AI 学习路线图功能。当你发现想学习的主题时,点击它,应用会构建反向依赖图。它会从你的主题反向追溯到基础知识,然后一步步教你。这源于我对 ChatGPT 和 Grok 的不满。它们会以自己认为合适的水平作答,但我常常因为基础不够扎实而无法理解答案。……
我是如何构建它的
架构
该应用使用 Electron 构建桌面 UI,使用 Python 构建后端。当你输入用户名时,Electron 会启动一个 Python 子进程,通过 GitHub API 获取仓库、下载 Python 源文件,并使用 Python 的 ast 模块解析它们。AST 分析器可检测 15 种以上的 Python 特性,例如上下文管理器、异步函数、数据类、类型提示、生成器、match 语句和海象运算符。对于每个特性,它都会记录文件和行号,以便报告能直接链接到 GitHub。
对于 AI 路线图,我使用了 Google AI Studio(Gemini 2.0 Flash)。提示词要求 AI 从用户主题出发,反向递归识别每个先修知识。输出是结构化的 JSON,包含 4 到 8 个步骤,每个步骤都有摘录、难度级别、学习时间、常见误区和精选资源。AI 会挑选真实的规范 URL 而非搜索链接。如果你没有 Google AI 密钥,本地回退机制会为 async、generators、decorators 和 context managers 等常见主题生成深度链。
对于 Snowflake,每次分析都会存储在用户自己的数据库中。应用会在首次使用时自动创建数据库和表。“自我比较”功能会查询所有存储的档案,向你展示其他人使用的而你没有使用的包、你从未使用过的特性,以及你接下来应该研究的排名前 5 的 Pythonista 的仓库。比较结果会缓存在 Snowflake 中,因此你不必重复获取相同数据。缓存会跟踪你是否使用了 GitHub API 令牌,因此如果你稍后添加令牌,它会使用更好的数据重新获取。
我还使用了 GitHub API 获取个人资料数据、仓库列表、语言检测、文件内容和提交历史。dev.to API 会拉取他们带有 Python 标签的文章,让你不仅能学习他们的代码,还能学习他们写的内容。
该应用还具备一对一比较功能。在任何报告上点击“与我的档案比较”,它会并排获取两个档案。你可以看到你已经掌握的包、需要练习的主题以及需要探索的新概念。比较中的每个主题都是可点击的,并会启动 AI 路线图。
奖项类别
最佳使用 Snowflake:每次分析都存储在 Snowflake 中。“自我比较”功能会聚合所有存储的档案,并将你的代码与所有人进行比较。比较结果会带来源跟踪进行缓存,以便在你的 API 令牌状态发生变化时刷新。
最佳使用 Google AI:AI 摘要、吐槽和学习路线图均由 Google AI Studio(Gemini 2.0 Flash)提供支持。反向依赖图提示会生成带有精选资源的结构化 JSON 路线图。本地回退机制确保即使没有 API 密钥,该功能也能正常工作。

0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.