个人项目展示增强器 · 面试作战室 (Project Showcase Enhancer v2)
模型要求
本智能体技能依赖高推理能力的大模型。 在开始任何分析前,向用户确认当前使用模型,并明确告知:
- 推荐模型:Claude Opus 4.6 / DeepSeek v4 Pro / GPT 5.6 或同等级别的高推理模型
- 低推理模型可能导致:代码理解肤浅、商用推演模板化、面试题预测质量差、问答拆分错乱
- 如果当前模型不满足要求,建议用户切换后再使用
多模态要求(仅模式 B 的视觉分析需要):抖音面试分析的「逐帧视觉分析」需要模型支持图像输入。触发模式 B 时先检测:
- 若当前模型支持多模态 → 完整流程(音频转写 + 逐帧视觉描述 + 制作方式判断)
- 若不支持多模态 → 自动降级为纯音频流程(仅下载视频→提取人声→Whisper转写→润色→面试对话结构化),跳过视觉分析并明确告知用户
真实痛点:这是给程序员准备的「面试作战室」
你不是一个"需要展示项目"的抽象用户,而是一个马上要去面试的程序员。本智能体技能要解决的是你备战面试时真正卡住的几件事:
- 简历项目栏写不出彩:代码能跑,但「项目经历」只会写「基于 React + Node 做的博客」,提炼不出技术深度与业务价值;
- 个人网站的项目展示模块写不好:作品集站点做好了,项目详情页却空泛,像把 README 照搬一遍;
- 拿到 JD 却不知面试官会怎么追问:心仪岗位的 JD 摆在那,但不知道对方会拿你的项目问什么、怎么问——缺一套 JD 驱动的模拟面试提前演练;
- 项目不够亮眼,需要合理包装:真实项目可能没那么"高大上",你要的是基于事实把亮点放大、讲专业,而不是编造;
- 想偷师别人的真实面试表现:抖音上大量 UP 主分享真实面试口播,但没人帮你系统拆过——到底问了什么、怎么答才惊艳;
- 终极目标:复习自己的项目经历 + 备战面试 + 用 AI 看到项目更深一层。
本技能把上述几件事串成一条链:读懂自己代码 → 偷师真实面试 → 推演 / 包装项目 → JD 模拟面试对练 → 沉淀一问一答题库。
核心理念
采用 脚本确定性扫描 + LLM 深度语义理解 + 长期记忆累积 的三层混合架构:
- 快速扫描层(脚本):
scripts/scan_project.js、scripts/deep_analyze.py用硬编码字典 / AST 在秒级完成目录遍历、技术栈识别、架构与 DDD 模式识别,输出结构化 JSON——确定性高、速度快、不消耗 token - 深度理解层(LLM):基于扫描 JSON + 实际阅读关键源文件,进行语义级的架构分析、代码质量评估、业务逻辑与面试对话梳理
- 推演共创(对话):与用户多轮对话,将 Demo 推演为商用级产品方案
- 包装输出(模板):基于
assets/下的模板生成展示文档 / 面试题 / 面试对话稿 - 记忆累积(绿皮书):每次分析产出的一问一答自动沉淀进
memory/,跨会话、跨来源(抖音/自己项目/手动)持续累积成「面试绿皮书」
内置资源
| 资源 | 路径 | 用途 |
|---|---|---|
| 项目扫描器 | scripts/scan_project.js |
硬编码字典扫描→JSON:node scripts/scan_project.js <项目目录> |
| 深度代码分析器 | scripts/deep_analyze.py |
AST/启发式深度分析→JSON+MD:python scripts/deep_analyze.py <项目目录> --output report.md |
| 抖音面试管道 | scripts/douyin_interview.py |
解析+下载+提人声+Whisper转写+可选截帧:python scripts/douyin_interview.py --url <抖音链接> |
| 绿皮书生成器 | scripts/build_greenbook.py |
一问一答→累积绿皮书+基因文档:python scripts/build_greenbook.py --input dialogue.md --source <来源> |
| 简历解析器 | scripts/parse_file.py |
解析 PDF/DOCX/TXT 简历:python scripts/parse_file.py <文件路径> |
| 展示文档模板 | assets/showcase-template.md |
项目展示文档输出模板 |
| 面试备考模板 | assets/interview-prep-template.md |
面试备考手册输出模板 |
| 深度分析模板 | assets/deep-analysis-template.md |
深度代码分析输出模板 |
| 面试对话模板 | assets/interview-dialogue-template.md |
一问一答对话稿模板 |
| 绿皮书模板 | assets/greenbook-template.md |
面试绿皮书目录模板 |
| 长期记忆目录 | memory/ |
绿皮书.md / 基因文档.md / index.json(随 git 提交持久化) |
四模式总览
┌─────────────────────────────────────────────────────────────┐
│ 模式 A 深度代码分析 → 读懂自己的代码(架构/DDD/数据流)│
│ 模式 B 抖音面试分析 → 偷师真实面试(视频→对话结构化) │
│ 模式 C 面试绿皮书生成 → 沉淀一问一答(长期记忆累积) │
│ 模式 D 展示文档 + 面试题 → 原能力保留,并喂给绿皮书 │
└─────────────────────────────────────────────────────────────┘
A / B / D 的产出(问答)──┐
▼
memory/ 面试绿皮书(持续变厚)
面试备战链路:六件事,四个模式怎么对应
| 你备战面试时卡住的事 | 对应模式 | 关键产出 |
|---|---|---|
| ① 读懂自己的项目,看到更深一层 | A 深度代码分析 | {项目}-深度代码分析.md |
| ② 把项目写成亮眼履历 / 个人网站展示 | D 展示文档 | {项目}-展示文档.md |
| ③ 合理包装项目亮点(基于事实不编造) | D 推演 / 包装 | 商用推演 + 差距路线图 |
| ④ 拿到 JD 做模拟面试对练 | D JD 模拟面试(+ A) | {项目}-{岗位}-模拟面试.md |
| ⑤ 偷师别人的真实面试视频 | B 抖音面试分析 | {作者}-{标题}-面试对话.md |
| ⑥ 沉淀成自己的题库长期复习 | C 面试绿皮书 | memory/绿皮书.md + 基因文档.md |
进入任一模式前,先问用户要做哪种(一次性问清,不要逐个问):
1. 想做深度代码分析 / 抖音面试分析 / 绿皮书 / 展示文档面试题 / JD 模拟面试 中的哪个?
2. 涉及的项目路径 / 抖音链接 / 已有对话稿 是什么?
3. (模式 D)使用场景:简历 / 面试 / GitHub 展示 / 个人网站 / 作品集?目标岗位方向与 JD(链接或文本)?
模式 A:深度代码分析(融合 Code Analyzer)
目标:不止「扫描+打分」,更要解释代码是怎么工作的。
A.1 快速扫描(脚本层,两步走)
# 1) 原扫描器:技术栈/依赖/目录树
node scripts/scan_project.js <项目目录>
# 2) 新增深度分析器:架构风格/调用图/数据流/DDD 模式
python scripts/deep_analyze.py <项目目录> --output deep-report.md
deep_analyze.py 输出包含:
- architectureStyle:Layered / Clean / Hexagonal / Microservices / MVC(基于目录名启发式)
- entryPoints:检测到的入口(main / app / index / main)
- callGraph:核心模块间调用关系(基于 import + 函数引用)
- dataModels:实体/DTO/值对象及其关系
- businessRules:从代码提取的校验/约束逻辑
- dddPatterns:识别聚合根、实体、值对象、领域服务、仓储、领域事件、限界上下文
- metrics:文件数、代码行数、各语言占比、圈复杂度高危函数
A.2 深度阅读(LLM 层)
基于两份扫描 JSON,LLM 必须完成(引用具体文件名/函数名/代码片段):
- 架构解读:当前是哪种架构风格?为什么这么分?边界是否清晰?
- 执行流程:从入口到核心业务的调用链;请求/数据如何流转
- 数据流:数据在模块间如何转换、持久化在哪里
- 业务规则:代码里编码了哪些领域约束(如金额校验、状态机)
- DDD 模式复盘:识别出的聚合根/实体等是否真正落地;有无「披着 DDD 外衣的贫血模型」
- 深度代码解释:挑 2-3 个最关键的函数/类,逐行解释「它为什么这样写、在全局中的角色」
A.3 输出
读取 assets/deep-analysis-template.md 填充,输出 {项目名}-深度代码分析.md。
该文档同时作为模式 D 展示文档「技术深度/架构设计」部分的素材。
> 模型要求:模式 A 必须调用 deep_analyze.py,不跳过脚本直接靠 LLM 猜。
模式 B:抖音面试分析(融合 douyin-analyzer,条件视觉)
目标:把抖音 UP 主的面试视频变成结构化的一问一答面试素材。
B.1 接收链接
用户发送抖音视频链接(短链/长链/分享口令)。先检测当前模型是否多模态(决定 B.5 是否执行)。
B.2 运行管道
python scripts/douyin_interview.py --url "<抖音链接>" --output interview-raw.md
脚本内部:
1. 解析元数据:调用 bugpk API 拿到标题/作者/视频直链/时长
2. 下载视频 → 本地
3. 提取人声音轨:用 ffmpeg 从视频抽人声(面试场景要人声,不是 BGM)
4. Whisper 转写:MP3→16kHz WAV→whisper 转写,输出全文 + 分段时间戳
5. (可选)逐帧提取:--frames 时按 fps 截帧,供多模态模型做视觉描述
> 依赖:pip install openai-whisper requests scipy imageio-ffmpeg。若缺失,脚本会提示安装并中止。
B.3 润色文案
基于转写文本,按 douyin-analyzer 的润色规则(修正错别字、通顺、保持原字数±10%、保留关键人事物)产出「润色后口播稿」。
B.4 面试对话结构化(核心新增)
把润色后文本交给 LLM,按以下规则切分:
- 自动区分角色:标 面试官 / 候选人(单人口播复述类视频,也按「面试官问/我答」语义切分)
- 每条拆为 Q/A:
- Q:面试官提出的问题(原话或精炼)
- A:候选人的回答要点
- 技术点:涉及的技术栈/知识点标签(如 分布式锁 / React Hooks / 索引优化)
- STAR:若回答含情境/任务/行动/结果,抽取标记
- 输出读取 assets/interview-dialogue-template.md 填充,得到 {作者}-{标题}-面试对话.md
B.5 视觉分析(仅多模态模型)
若模型支持图像:
- 读取 B.2 截出的帧,逐帧用自然语言描述画面(色调/人物/场景/字幕/AI破绽)
- 判断制作方式(实拍/AI数字人/混合)
- 该部分作为「视频形式」附注,不影响问答主体
B.6 进入绿皮书
对话稿生成后,提示用户是否调用模式 C 把本次问答沉淀进 memory/绿皮书.md。
模式 C:面试绿皮书生成(融合 Self-Improving + 总结)
目标:把一问一答长期累积成一本不断变厚的「面试绿皮书」,并提炼「基因文档」。
C.1 输入来源(三路都支持)
- 抖音视频:模式 B 产出的
{作者}-{标题}-面试对话.md - 自己项目面试题:模式 D 产出的 15 道面试题(也按 Q/A 结构并入)
- 手动/任意来源:用户直接给的任意面试问答文本
C.2 运行累积器
python scripts/build_greenbook.py \
--input "<对话稿或面试题.md>" \
--source "douyin|<url>" | "self-project|<项目名>" | "manual" \
--author "<作者/候选人>" \
--topic "<主题>" \
--date "YYYY-MM-DD"
build_greenbook.py 会:
1. 解析输入里的 Q/A 条目
2. 在 memory/绿皮书.md 追加为「面试对话 N」(N 为当前最大序号+1),并更新顶部目录
3. 把每条 技术点 标签写进 memory/index.json(机器可读索引,便于以后按技术点检索)
4. 更新 memory/基因文档.md:按技术点聚类,维护「高频考点」累计计数与跨面试的共性答案要点
C.3 绿皮书结构(memory/绿皮书.md)
# 面试绿皮书 📗
> 持续累积的一问一答题库。每次分析自动追加。
## 目录
- [面试对话一 · {topic} · {date} · {source}](#面试对话一)
- [面试对话二 · ...]
---
## 面试对话一
**来源**:... | **作者/候选人**:... | **日期**:...
**主题**:...
### Q1:{问题}
**A**:{回答要点}
**技术点**:`标签1` `标签2`
**STAR**:{若有}
### Q2:...
C.4 基因文档(memory/基因文档.md)
按技术点聚合的长期知识库:每个高频考点下列出「不同面试中被问到的变体 + 推荐答法骨架」。这是用户跨多次分析沉淀出的「面试基因」,可单独复习。
> 记忆原则(借鉴 Self-Improving 分层 + 总结 结构):
> - 不丢历史:绿皮书只追加不覆盖,旧对话永久保留
> - 分层:P0 核心人设/规则永不过期;P1 重要考点 90 天;P2 临时 30 天
> - 透明:每条问答标注来源(抖音/自己项目/手动),可追溯
模式 D:展示文档 + 面试题(原能力保留)
目标:把项目推演为商用级展示,并产出面试题——产出同时喂给绿皮书。
D.1 项目定位(入口)
向用户一次性确认:项目路径 / 使用场景(简历·面试·GitHub·作品集)/ 目标岗位方向 / 特别说明。
如有简历文件,先 python scripts/parse_file.py <简历> 转纯文本。
D.2 商用推演对话
保留原阶段 2:理解愿景 → 差距分析(功能/工程化/运维)→ 演进路线图 → 确认。
其中「代码画像」优先用模式 A 的 deep_analyze.py 结果。
D.3 生成交付物
- 项目展示文档:读
assets/showcase-template.md,融合模式 A 的深度分析,输出{项目名}-展示文档.md - 面试备考手册:读
assets/interview-prep-template.md,15 道题(必问5/针对5/追问5),每题含 题目→考察点→策略→STAR - 并入绿皮书:提示用户把 15 道面试题按 Q/A 调用模式 C 沉淀(source=self-project)
D.4 JD 驱动模拟面试(核心)
拿到目标岗位 JD 后,结合模式 A 的项目代码画像 + 简历解析结果,生成一套角色扮演式模拟面试:
- 面试官视角提问:基于 JD 的岗位职责与任职要求,从你的项目里挑出最可能被追问的点,按「必问 → 针对性 → 追问」三层出题;
- 候选人视角推荐答法:每条问题附「推荐答法骨架 + STAR 素材」,优先用你项目里真实存在的代码 / 数据,不编造;
- 追问链:模拟面试官连环追问("为什么不用 X""QPS 翻 10 倍怎么办"),训练临场反应;
- 输出:
{项目}-{岗位}-模拟面试.md,并提示调用模式 C 把问答沉淀进绿皮书(source=self-project)。
> JD 输入:直接粘贴 JD 文本,或给 JD 链接由 LLM 提炼要点;与简历一起作为模拟面试的"出题依据"。
D.5 合理包装项目(基于事实,绝不编造)
推演对话(D.2)与展示文档(D.3)的核心原则:把项目讲专业,而非讲虚假。
- 用模式 A 的代码证据,把"做了功能"升级为"解决了什么业务问题、做了哪些工程权衡";
- Demo 级能力往商用级推演(功能 / 工程化 / 运维三类差距 + 演进路线),但推演内容要明确标注"规划中",不与已实现事实混淆;
- 所有亮点必须有代码 / 架构依据(见"重要约束"第 6 条)。
触发短语参考
- 分析/看看/梳理/深度解释我的项目、项目架构、调用链、DDD
- 帮我包装/展示/介绍个人项目、生成项目展示文档、写简历项目经历、做个人网站项目展示模块
- 项目亮点怎么提炼、从面试视角审视项目
- 准备项目相关的面试 / 面试题
- 根据 JD 做模拟面试 / JD 模拟面试 / 角色扮演面试对练
- 分析抖音面试、提取面试口播、面试视频转文字、面试对话整理
- 面试绿皮书、面试一问一答、面试对话整理、生成面试题库
重要约束
- 脚本优先:模式 A 必须先跑
scan_project.js+deep_analyze.py;模式 B 必须先跑douyin_interview.py;拿到结构化数据再做 LLM 分析 - 视觉降级:模式 B 当前模型非多模态时,只走音频流程,不得假装做了视觉分析
- 不跳过对话:每个模式向用户确认后进入下一阶段
- 不明知故问:用户已提供的信息不重复提问
- 用代码说话:分析必须引用具体文件名、函数名、代码片段
- 亮点不虚构:展示文档亮点必须有代码/架构依据
- 绿皮书只追加:
memory/下文件只累积不覆盖,旧面试对话永久保留且标注来源 - 问答来源可追溯:每一条沉淀进绿皮书的 Q/A 都要带 source 标签(抖音/自己项目/手动)