先把主链路讲顺,再去背条目。

掌握标准不是把两份文档背下来,而是不看稿能画出生成路径,并扛住追问。每次只学一块:读指定文件 → 在纸上画出输入/输出/失败降级 → 合上文件讲 90 秒 → 用面经追问自检。

仓库提交作者是 qinlianxi。个人职责、Owner、0→1、上线结果一律待补。没有测量数据就不要报百分比。部分分析时不能说「完整调用图」。

01 编译器证据分层

先读 ARCHITECTURE、analyzer.py、clang-tool/src/main.cpp

事实从编译数据库和静态分析来,词法结果不能冒充确定调用。

过关:能区分 full / partial,并指出该看哪些文件。

02 叶子与自底向上汇聚

knowledge.py、planner.py、test_hierarchical_planning.py

信道下一层才是叶子;父级必须等叶子写完再汇聚,不能抄叶子正文。

过关:能画出 pdsch/encoder 是叶子、pdsch 是父级。

03 有界上下文与密钥隔离

context.py、opencode.py、api.py 拒收凭据

模型只看裁过的任务上下文,平台不收、不存、不读 API Key。

过关:能讲清预算怎么切、为什么走标准输入。

04 并发、断点、校验修复

pipeline.py、output.py、jobs.py

叶子可有限并发,父级串行;续跑要新建快照,源码或 Schema 变了必须重来。

过关:能讲清什么情况能继续、什么情况必须重来。

05 混合检索与引用闭环

indexing.py、rag.py

四路召回再融合。引用对不上本轮证据,就不展示模型原文。

过关:能举「语义像但不真」的例子,并说出怎么拦。

06 图谱是观察层

graph.py、GraphWorkbench、PLATFORM_ARCHITECTURE

确定边和候选边必须分开。图不改人工模块树,更不是 LLM 流程图。

过关:不把图画成“模型猜出来的调用链”。

还没过关的信号

只能复述「用了 Clang、RAG、图谱」,但说不清为什么不能全并行、为什么候选边不能当调用链。

01 编译器证据

这是 ClangWiki 和其他“丢源码给 LLM 写文档”方案的分界。先问事实从哪来,再问模型写了什么。

完整分析:分析器跑通且读到编译数据库,直接调用可以当编译器事实。

部分分析:分析器没有或失败,词法补充可以谈文件和未解析调用,但不能写成运行时一定发生。

宏展开、函数指针、动态加载、条件编译真实分支,都不在确定性范围里。

对应面经:主问 3、4。读完后打开「面经口播」自己讲一遍。

02 叶子与汇聚

对 src/phy/pdsch,下一层 encoder / modulation / mapping 才是最小文档单元。信道根本身是任务手册。

叶子负责源码地图、调用链、异常路径。

父级只读直接子文档,做任务路由和故障导航,质量门禁会拒绝大段复制。

生成方向自底向上;阅读方向是仓库 → 子系统 → 信道 → 叶子 → 源码。

对应面经:主问 5、6。单测在 tests/test_hierarchical_planning.py。

03 有界上下文

模型不是去逛仓的。平台先按文档类型切预算,再把上下文从标准输入喂给无工具 Agent。

叶子偏源码和关系;汇聚文档偏子文档摘录;仓库首页几乎全是导航材料。

接口直接拒绝密钥类字段。认证留在本机已经登录的命令行 Agent。

证据不够必须写「无法确定」,不能靠形容词补全调用链。

对应面经:主问 2、7。

04 并发与断点

快,但不能把不同版本的叶子和父级拼进同一份 Wiki。

叶子在 1–4 的上限内并行;父级和仓库级文档在叶子屏障后串行。

每完成一篇就原子写断点。继续时新建快照,并核对源码哈希、配置和 Schema。

输出先选最后一份完整稿,再按章节契约校验,失败只自动修一次。

对应面经:主问 8、9、16。

05 检索与引用

代码问答怕的不是召不回,而是召回一段语义很像、事实不对的话。

四路:精确符号、全文、向量、图扩展,再用倒数排名融合。

精确标识符和编译器确定性会再加分。向量不可用就降级,不假装还能语义搜。

问答每轮重检索。引用必须是本轮证据编号,修一次仍不合格就拦截展示。

对应面经:主问 10、11。

06 图谱与工作台

模块树负责稳定导航,图谱负责解释跨模块关系。社区分析不改人工边界。

确定边来自编译器、构建和显式源码。候选边可以显示,不进默认调用链,也不作为强事实进问答。

工作台是本机单用户操作面,默认只监听回环地址。删仓库注册记录不会删源码。

前端下钻和三维总览都只是观察层,不能把候选边画得更“真”。

对应面经:主问 12、13、14、17。

导学-ClangWiki

依据仓库当前源码与文档整理。提交记录作者为 qinlianxi,远端为 g18042663173-a11y/ClangWiki。你在本机的个人职责、是否独立 Owner、是否上线过生产环境,一律标为 待补,讲的时候不要先自称 0→1 Owner。

1. 前置知识(面试高频标注)

知识点为何需要在本项目中的位置高频度
CMake 只配置、导出编译数据库没有真实编译参数,静态分析会漂clangwiki/build.py 配置 CMake,不编译目标代码
libclang / 编译数据库符号、直接调用、翻译单元要从编译器来clang-tool/src/main.cppclangwiki/analyzer.py
编译器事实 vs 词法猜测防止把函数指针、宏展开说成确定调用分析模式 full / partial,关系里的候选调用
自底向上文档编排父级只能读直接子文档,避免全仓塞进模型clangwiki/planner.pyclangwiki/pipeline.py
有界上下文与章节契约模型只能写指定章节,证据不够必须写无法确定clangwiki/context.pyclangwiki/output.py
子进程调用外部 Agent,不碰密钥平台不是模型网关clangwiki/opencode.pyclangwiki/api.py 拒收凭据字段
混合检索与 RRF问答不能只靠向量语义clangwiki/indexing.pydocs/RAG_AND_RETRIEVAL.zh-CN.md
引用校验闭环没有合法引用就不展示模型原文clangwiki/rag.py
属性图:确定边 / 候选边图谱不是 LLM 画的流程图clangwiki/graph.pydocs/CODE_KNOWLEDGE_GRAPH.zh-CN.md中高
SQLite 任务队列与断点快照长任务可恢复,且不能混版本clangwiki/jobs.pyclangwiki/pipeline.py 原子写断点中高
本机单用户安全边界源码查看不能逃出已注册仓clangwiki/wiki.py 源码片段、默认 127.0.0.1
FastAPI + React 工作台多仓、Wiki、图谱、检索、问答的人机面clangwiki/server.pyfrontend/src/App.tsx

2. 重点亮点与学习顺序(先看这个)

亮点标题为什么重要通用技术关键词先看哪些文件建议学习顺序
编译器证据分层这是项目和其他“丢源码给 LLM 写文档”方案的分界静态分析、确定性、降级docs/ARCHITECTURE.zh-CN.mdclangwiki/analyzer.pyclang-tool/src/main.cpp1
信道下一层叶子与自底向上汇聚决定文档粒度和父级能不能抄叶子正文层级规划、依赖屏障clangwiki/knowledge.pyclangwiki/planner.pytests/test_hierarchical_planning.py2
有界上下文与写作隔离解释为什么模型看不到全仓、也碰不到密钥上下文预算、最小权限、stdinclangwiki/context.pyclangwiki/opencode.pyagents/clangwiki-doc.md3
生成可靠性:并发、断点、校验修复长任务怎么失败可恢复、输出怎么不被脏数据写进去受限并发、检查点、契约校验clangwiki/pipeline.pyclangwiki/output.pyclangwiki/jobs.py4
混合检索与引用闭环问答为什么必须带可打开的证据RRF、引用校验、短会话clangwiki/indexing.pyclangwiki/rag.py5
图谱与本机工作台图是观察层,不改人工模块树属性图、社区分析、本机平台clangwiki/graph.pyfrontend/src/GraphWorkbench.tsxdocs/PLATFORM_ARCHITECTURE.zh-CN.md6

3. 必备知识点

4. 推荐阅读(结合仓库)

主题通用技术点建议阅读位置预计时间读完能回答什么
产品边界与能力清单本地平台、离线、多仓README.md20 分钟它解决什么、不解决什么
生成主链路配置、分析、规划、写作docs/ARCHITECTURE.zh-CN.mdclangwiki/pipeline.py45 分钟一次生成从哪走到哪
叶子边界目录树如何变成文档树clangwiki/knowledge.pytests/test_hierarchical_planning.py30 分钟为什么 encoder 是叶子、pdsch 是父级
任务规划自底向上、文档类型clangwiki/planner.py20 分钟叶子、信道手册、子系统、仓库首页怎么排队
上下文裁剪证据预算、子文档摘录clangwiki/context.py30 分钟父级为什么主要读子文档而不是全仓源码
模型适配器子进程、stdin、禁工具clangwiki/opencode.py20 分钟密钥为什么不进平台
输出门禁章节契约、选最后一份完整稿、一次修复clangwiki/output.pyclangwiki/document_schema.py25 分钟脏输出怎么被拦住
原生分析器AST 遍历、直接调用clang-tool/src/main.cpp40 分钟编译器事实从哪来
词法降级分析器失败后还能做什么clangwiki/analyzer.py25 分钟partial 模式能说什么、不能说什么
平台与数据根快照、集合、任务docs/PLATFORM_ARCHITECTURE.zh-CN.mdclangwiki/platform.py25 分钟数据放哪、当前 Wiki 怎么指
检索融合四路召回、加分docs/RAG_AND_RETRIEVAL.zh-CN.mdclangwiki/indexing.py35 分钟为什么不是纯向量搜索
问答校验引用前缀、修复、拦截clangwiki/rag.py25 分钟无效引用为什么不展示
图谱契约图层、证据、社区docs/CODE_KNOWLEDGE_GRAPH.zh-CN.mdclangwiki/graph.py40 分钟候选边为什么不能当调用链
任务恢复双车道、断点继续clangwiki/jobs.pyclangwiki/api.py20 分钟中断后怎样继续、何时必须重来
前端工作台视图与人机路径frontend/src/App.tsxdocs/WEB_WORKSPACE.zh-CN.md20 分钟用户点“生成 Wiki”后后台走哪
部署约束Windows 离线、本机监听docs/DEPLOYMENT_AND_USAGE.zh-CN.md15 分钟运行时依赖什么、不依赖什么

5. 自学提醒

若某文件或原理看不懂,请继续追问 AI;本技能负责给学习路径与题目,不提供逐行讲解。

建议你按顺序 1→6 自己讲一遍:先讲“事实从哪来”,再讲“文档怎么长出来”,最后讲“检索和图谱怎么不把猜测升级成事实”。讲卡壳的地方,把对应文件路径丢回对话即可。

6. 项目技术定位

交叉:后端平台 + 编译器工具 + AI 应用。

依据:核心是 Python 编排的本机知识平台;事实生产依赖 CMake/Clang;文档写作和问答通过外部命令行 Agent 完成;前端是本地 React 工作台。它服务的对象是大型 C/C++ 仓,示例和领域规则明显偏向无线基带,但框架本身按模块树工作,不是只写死 PDSCH。

7. 核心原理解析

1. 问题:直接把全仓源码交给模型,调用关系和职责边界会被编出来。 机制:先抽出编译器级事实,再按层级喂给模型,并规定证据不够必须写无法确定。 落点:分析产物进知识模块树,任务上下文按文档类型分配文件/符号/关系/子文档/源码预算。

2. 问题:基带仓按信道组织,叶子如果切得太大,一篇文档什么都写不透;切得太碎,父级又没有任务视角。 机制:信道根的下一层源码目录作为最小文档单元,父级只汇聚直接子文档。 落点:知识构建里解析信道根与叶子;规划器按深度从深到浅排队。

3. 问题:模型写作不稳定,stdout 可能拼多份稿,也可能缺章节或大段复制子文档。 机制:选最后一份结构完整的稿,补导航卡,按章节契约校验,失败则带原因再生成一次。 落点:输出模块的完整性选择、导航注入和综合文档反复制检查。

4. 问题:叶子文档彼此独立,但父级依赖子文档,盲目全并行会读到空子文档。 机制:叶子过屏障后再串行汇聚;叶子并发上限可配,且不改变事实和模板。 落点:流水线把叶子任务和汇聚任务拆开,线程池只覆盖叶子。

5. 问题:向量检索会把语义像的内容召回,但代码问答更怕“像但不真”。 机制:符号、全文、向量、图扩展四路召回,倒数排名融合后再给编译器确定性和精确标识符加分。 落点:索引服务的分路检索与融合;图谱块默认只扩展已确认关系。

6. 问题:本机平台一旦收密钥或能任意读盘,就从知识工具变成高风险代理。 机制:密钥字段直接拒绝;模型认证留在外部 Agent;源码路径必须落在已注册仓根下。 落点:接口层拒收凭据字段,Wiki 源码接口做路径包含检查,服务默认只绑本机回环地址。

8. 关键设计决策

决策备选取舍风险验证
事实生产与模型写作拆开让模型自己扫仓写文档慢一些,但调用链可追溯分析器失败时文档变弱看分析模式和关系确定性字段
只 configure CMake,不编译目标完整编译再分析文档流程只读,少破坏被分析仓缺编译数据库时只能走后备/部分分析clangwiki/build.py 与后备编译数据库
叶子并发、父级串行全串行或全并行在正确性与等待时间之间折中外部 Agent 额度打满、本机资源抖动并发配置范围 1–4,测试与进度事件
断点继续必须新建快照并校验一致性原地改同一快照避免把不同源码版本混进一篇 Wiki配置一变就要重跑断点文件原子替换;继续接口带旧运行号
候选关系永不升格为默认调用链用 LLM 补全调用图宁缺毋滥图看起来“不完整”图谱规范与检索默认过滤
向量失败自动退化,不假装还能语义搜向量不可用就整条问答失败本地离线更稳召回变短检索返回告警通道
引用校验失败则拦截展示先展示再人工看避免未验证结论流出有时用户只看到失败句RAG 状态 citation_validation_failed
逻辑知识空间不复制源码物理合成大仓多仓协作但不改源仓跨仓关系更多是候选集合只存成员关系

9. 量化与验证(含待测,建议)

当前仓库能从测试和代码直接验证的,主要是结构正确性,不是线上收益。

怎么测现状
叶子/父级边界tests/test_hierarchical_planning.py:信道下一层是叶子,信道根是父级,根目录文件归父级仓库有单测
规划顺序断言叶子任务排在汇聚任务前仓库有单测
分析模式无分析器或分析失败时模式为 partial,诊断信息保留代码路径存在,完整 Windows/libclang 环境 待测
叶子并发配 2/3/4,观察同时只有受限个外部 Agent 进程,父级仍在叶子屏障后待测
断点继续中断一次生成,改源码后再继续,应被拒绝;不改源码应跳过已完成文档待测
引用校验故意让回答带不存在的引用编号,应先修复、再失败则拦截待测
路径沙箱请求 ../ 逃出仓根,应报超出范围代码有 resolve + parents 检查,待测
生成时延、文档采纳率、问答准确率选一个真实基带仓做基线:全量生成时间、校验失败率、人工抽查引用可打开率待测,不要编数字
用户规模 / 上线效果仓库与提交记录未给出生产指标待补

面经-ClangWiki

口播按“能讲清系统设计”来写。仓库提交作者是 qinlianxi你的个人职责、Owner 边界、是否从 0 到 1、是否上过生产,全部待确认。对外先说“我基于源码把主链路讲清楚”,不要先说“我独立主导上线”。没有测量数据的地方已经写成待测,不要补百分比。

90 秒口播

ClangWiki 是给大型 C 和 C++ 仓用的本地知识工作流,不是通用 Agent。它先用 CMake 导出编译数据库,再用静态分析抽出模块、符号和直接调用,按信道下一层叶子自底向上写 Wiki,然后做混合检索和带引用的问答。模型认证留在本机的命令行 Agent,平台不收密钥。父级文档只读直接子文档,候选调用不会被说成确定事实。我还没有可对外报的时延和准确率数字,目前能确认的是事实生产和模型写作是拆开的。

3 分钟口播

面试官如果让我展开,我会按一条主链路讲。用户先注册本地仓,不复制源码。生成时只做 CMake 配置,拿到编译数据库,不编译被分析项目。分析器在时走完整模式,符号和直接调用可以当编译器事实;分析器没有或失败就降级,词法结果不能冒充确定调用。知识模块把信道根的下一层目录当成最小文档单元,规划器从深到浅排队。叶子可以有限并发地调外部文档 Agent,上下文从标准输入送进去,Agent 默认禁止工具,写完由平台校验章节契约,失败会带原因再修一次。叶子都完成后,父级和仓库首页再串行汇聚。每写完一篇就原子更新断点;中断后新建快照继续,源码或 Schema 变了就拒绝混版本。检索是符号、全文、向量、图扩展四路融合;问答每轮重检索,引用必须能对上本轮证据,对不上就拦截。图谱用来观察耦合和路径,不改人工模块树。个人职责和线上收益待补。

1. 项目简介(简历可用)

面向大型 C/C++ 代码仓的本地知识平台:用编译器事实驱动自底向上 Wiki,再提供混合检索、带引用问答和代码关系图;模型认证留在本机命令行 Agent,平台不保存密钥,也不修改源码仓。

2. 简历 bullet

  • 编译器证据分层: 针对“把全仓源码直接交给模型、调用关系容易被编造”的问题,将文档事实分成编译器确认、源码可见和待确认三层:完整分析才把直接调用当确定结构,分析失败则降级为部分模式,词法猜测不得写入确定调用链;结果是文档和问答可以按证据等级展开,而不是混成一段无法追问的描述。线上问答准确率待测。
  • 自底向上分层编排: 针对基带仓目录深、一篇文档既要写清实现又要写清任务路由的矛盾,把信道根下一层源码目录定为最小文档单元,父级只汇聚直接子文档并补导航,不把子文档正文拼进上层;结果是叶子负责源码地图和异常路径,上层负责任务与故障路由,层级职责可以从模块树和规划顺序直接核对。
  • 有界上下文治理: 针对大模块符号和关系过多、一次塞满会撑爆模型上下文的问题,按文档类型给文件、子文档、符号、关系和源码分配总预算,叶子偏源码、汇聚文档偏子文档摘录,并要求证据不足必须写无法确定;结果是每个任务只带本层该看的证据,父级不再二次吞全仓。裁剪后的召回完整性待测。
  • 模型调用隔离: 针对知识平台一旦收密钥或能任意读盘就会变成高风险代理的问题,文档写作和问答都通过子进程调用本机命令行 Agent,上下文走标准输入,默认文档 Agent 禁止工具,接口层直接拒绝密钥类字段;结果是平台只组织构建、分析和落盘,认证文件始终不进 ClangWiki。密钥隔离可用代码路径验证,未做外部渗透测试。
  • 生成可靠性治理: 针对长文档任务中途失败会丢掉已完成叶子、模型 stdout 可能拼多份稿的问题,叶子在并发上限内并行、父级在屏障后串行,每篇完成都原子写断点,输出先选最后一份完整稿再按章节契约校验并最多修复一次;结果是中断后可新建快照续跑,配置或源码变化则拒绝混版本。端到端续跑耗时待测。
  • 检索与引用闭环: 针对纯向量检索“语义像但不真”的问题,用符号、全文、向量、图扩展四路召回做倒数排名融合,并对精确标识符和编译器确定性加分;问答每轮重检索,只能引用本轮证据编号,校验失败先修一次、再失败则拦截展示。引用可打开率和人工采纳率待测。

3. 面试问题

3.1 定位与边界

主问 1:这个项目解决什么问题?它不是什么?

我把它讲成一个本地代码知识工作流,不是新的通用 Agent,也不是要替代 IDE 或代码托管。大型 C 和 C++ 仓,尤其是通信基带这种按信道拆目录的仓库,人工维护 Wiki 很容易落后,直接把全仓扔给模型又会出现调用关系、职责边界被编出来的情况。所以主链路是先恢复真实编译参数,抽出模块、文件、符号和直接调用,再按叶子到父级生成文档,最后把 Wiki、源码和图关系变成可检索、可引用的上下文。模型认证留在本机命令行 Agent,平台不接收、不保存、不读取密钥。生产用户数和文档采纳率仓库里没有,我不会报数字,只讲这条边界是怎么设计的。

主问 2:为什么平台自己不管理模型密钥?

如果这个平台收 API Key,它就从知识工具变成凭证代理,日志、配置、备份都可能泄漏。现有设计把认证完全交给本机已经登录好的命令行 Agent,ClangWiki 只拼命令、送标准输入、收标准输出。接口在写入仓库配置或任务覆盖项时,一旦字段名里出现密钥、令牌、密码这类词就直接拒绝。默认文档 Agent 还禁止全部工具,避免它去翻认证文件或改仓库。我能确认的是代码路径这样写了,没有做过专业渗透测试,也不会说“绝对不可能泄漏”。如果我的职责只是使用而不是实现这层隔离,我会把边界讲清楚,不把安全设计说成个人独有成果。

主问 3:为什么只做 CMake 配置、不编译被分析项目?

文档流程应该是只读的。完整编译可能改构建产物、耗很长时间,还可能因为缺依赖直接失败,这和“理解代码结构”不是同一件事。所以构建管理只验证仓库根目录有 CMake 清单,然后配置出编译数据库,确认里面有文件条目。拿到的是每个翻译单元真实编译参数,够静态分析用。如果配置失败,会走后备编译数据库并降级为部分分析,同时把原因写进日志和进度,不会偷偷维持“完整分析”的说法。这个取舍的代价是:没有真实编译参数时,调用关系必须降级表述。编译成功率和后备命中率待测。

3.2 事实分层

主问 4:完整分析和部分分析怎么向面试官解释?

完整分析表示本机分析器跑通了,并且读到了编译数据库,这时符号和直接调用可以按编译器事实来写。部分分析表示分析器不可用、失败,或只能做词法补充,这时我仍然可以谈文件、宏、未解析调用,但不能把它们讲成运行时一定发生的调用。架构说明写得很干脆:第一版故意不把词法结果伪装成编译器事实。宏展开、函数指针、动态加载、条件编译真实分支和跨线程数据流,都不在确定性范围里。这个分层让文档看起来可能“不完整”,但面试被追问时我能指到模式字段和关系确定性,而不是靠形容词硬撑。

主问 5:叶子为什么定在信道根的下一层,而不是每个文件一篇或整个信道一篇?

每个文件一篇会碎到没有任务语义,面试和排障都用不上;整个信道一篇又会把编码、调制、映射、参考信号揉在一起,模型上下文和人的阅读都装不下。对 src/phy/pdsch 这类根,下一层 encodermodulationmapping 正好是实现单元,也是最小能讲清调用链和异常路径的文档单元。信道根自己变成任务手册,负责路由和故障,不再重复叶子正文。单测里也固定了这个形状:下一层是叶子,信道根是父级,根目录自己的源文件仍归父级当证据。个人有没有拍板这个粒度,待确认;我能确认的是代码和测试现在就是这样约束的。

主问 6:父级文档为什么必须等叶子完成?

因为父级的主要证据是已经写好的直接子文档,再加上本层直接源码和已确认关系。如果叶子还没落盘就写父级,上下文里的子文档要么缺失,要么读到旧快照,汇聚会变成空话或串味。所以流水线先提交全部叶子,并发只发生在叶子之间,叶子屏障过了再按规划顺序串行写信道手册、子系统导航和仓库首页。并发配置只影响同时跑多少个外部写作进程,不改变章节模板,也不单独让旧快照失效。这个“正确性屏障优先于速度”的选择,是我讲并发时一定要主动说的,否则听起来像普通线程池加速。

3.3 上下文、校验与恢复

主问 7:有界上下文具体怎么裁?

它不是只截几段源码,而是给整个证据包设总预算。叶子没有子文档,预算更多给符号、关系和源码摘录;信道手册和子系统导航把大头给直接子文档;仓库首页几乎把预算给子文档和少量关系。超过预算的列表会截断并写明“另有多少条未展开”,避免模型以为自己看全了。上下文开头还写死证据使用规则:编译器事实、源码事实、推断、无法确定,以及候选调用不能写成确定运行时调用。所以裁剪既是长度控制,也是表述纪律。裁完之后信息是否够用,需要用真实大仓看断章率,目前待测。

主问 8:断点继续为什么要新建快照?

长生成可能跑很久,失败后如果原地改同一个快照,很容易把旧源码上的叶子和新源码上的父级拼进同一份 Wiki。所以每完成一篇就原子替换断点文件,记录已完成任务号;用户选择继续时,平台新建一个不可变运行快照,复用已经完成且仍然匹配的分析产物和文档,只跑剩余任务。继续前要核对仓库、源码哈希、生成配置和文档 Schema,不一致就拒绝,要求从头生成。原子写用临时文件再替换,避免进程被杀掉时断点截成半份 JSON。端到端续跑节省了多少时间,待测,但我可以把“为什么不能原地续”讲清楚。

主问 9:输出门禁拦的是哪几类脏结果?

第一类是根本不像文档:太短、没标题、围栏没闭合、开头就是报错。第二类是结构不完整:缺少该文档类型规定的二级章节,或一次运行里拼了多份稿。第三类是综合文档把子文档当正文粘贴,失去导航职责。处理顺序是先选最后一份完整稿,再补导航卡,再校验,失败则带着原因精简重写一次。选最后一份是因为命令行 Agent 有时会把中间稿和终稿都打到标准输出。门禁不保证内容领域正确,只保证能按契约落盘。领域正确还得靠证据分层和之后的人工抽查,抽查结果待补。

3.4 检索、问答与图谱

主问 10:为什么检索要四路,而不是只做向量?

代码问答里用户经常带精确符号或路径,这一下用全文或符号匹配就该置顶;向量擅长的是换一种说法问同一件事。图扩展则能把调用者、被调用者和模块邻居拉进来,这是目录树看不到的。四路结果用倒数排名融合,再给精确标识符、编译器确定性、人工知识和当前范围做小幅加分。向量运行时不可用时,会告警并退化成符号、全文和图,而不是假装语义搜索还在。图侧默认只扩展已确认关系,避免把候选调用助推成高分证据。融合公式是否对所有仓最优,待测,但我能讲清每路补的是哪类失败。

主问 11:问答里的引用校验到底在防什么?

它防的是模型写出无法打开的权威感。每轮检索后,平台给证据分配固定编号,前缀区分 Wiki、源码、图谱和人工知识。模型只能引用这些编号。答完先检查引用是否存在、来源能不能打开、有没有把候选关系说成确定调用。不合格就基于同一批证据修一次;还不合格,就返回校验失败,不展示未经验证的模型文本。没有证据时,应直接写根据当前索引无法确定。短会话最多带最近几轮摘要,但每轮都重新检索,避免把过期上下文无限续上。引用可打开率、一次修复成功率待测。

主问 12:代码关系图和模块树是什么关系?

模块树是权威导航,按仓库、信道、子模块、文件、符号往下走,来自目录和配置,稳定。关系图是属性图,用来解释调用、读写、类型、回调、文档和领域概念,边带状态、来源和源码位置。社区分析只观察高耦合群、桥接点、环和孤点,不自动改写人工模块边界。跨仓关系按签名一致、公共头、用户别名、名称相似这个顺序建立,最后一档只能当候选。所以图可以回答“谁在目录外还连着谁”,但不能反过来指挥文档树怎么切。把图讲成 LLM 流程图,是我会主动纠正的误解。

3.5 平台、安全与岗位表达

主问 13:本机工作台的任务系统怎么避免把自己写坏?

它是 SQLite 持久化的本地队列,不是分布式调度。模型相关任务走一条车道,分析索引走另一条 CPU 车道,同一仓库禁止两个写入任务并行。进度通过事件表和服务器推送往前端刷。重启时运行中任务变中断,生成类可以按断点继续。取消是设事件,让当前步骤安全退出,而不是立刻杀半份文件。这样设计是因为数据根就在用户机器上,并发写当前快照指针的危害大于吞吐不足。我不会把它讲成高并发后端经验,除非面试官接受“单机正确性优先”这个表述。吞吐量数字待测。

主问 14:安全边界你怎么讲,才不像在背口号?

我会举三条能指到代码的约束。第一,服务默认只监听本机回环地址,前后端同源,它不是开放到局域网的多租户服务。第二,配置和任务覆盖项拒收密钥类字段,模型认证不进数据库。第三,源码查看会把请求路径解析后,检查目标必须落在已注册仓根之下,拒绝目录逃逸。手工 Markdown 不按原始 HTML 执行。这些约束加在一起,说明它按本机单用户工具来设计。我没有做专业安全评审,不会说“已经安全”。若我的角色只是使用或局部开发,我会把实现者和讲述者分开。

主问 15:如果面试官问“你在其中负责什么”,你怎么回答才不越界?

按目前仓库证据,我只能先说:我能把生成、检索、图谱和本机工作台的主链路讲清楚,并能指到对应模块和测试。提交记录显示的作者并不是我这台机器上的名字,所以我不会主动说自己是唯一 Owner,也不会说从零带队上线。如果我实际写过其中某段,我会具体到模块:例如层级规划、断点恢复、引用校验或前端图视图,并准备对应 diff 或 PR。没有这些材料时,正确说法是“这是我用来讲编译器辅助文档和有界 Agent 写作的项目”,个人贡献待确认。这样即使被追问 Git 记录,也不会当场崩。

主问 16:从用户点“生成 Wiki”到落盘,你怎么按调用顺序讲?

工作台发一个生成任务,接口先拒收密钥字段,再把任务丢进模型车道。流水线校验仓库,配置 CMake 或走后备编译数据库,跑分析器得到符号和关系,再构建模块树并规划文档任务。每个任务先写有界上下文,再子进程调用命令行 Agent,校验通过后写入本次运行的输出目录,同时原子更新断点。叶子并行,汇聚串行。全部完成后,当前有效快照由数据库里的活动运行号指向,索引和图谱是后续独立任务,不和写作混成一次“什么都做”的大事务。我讲时会在白板上画这九步,每步只留一个职责,避免听成一团。

主问 17:前端工作台在架构里扮演什么,而不是“我写了个页面”?

它是本机单用户的操作面,把多仓注册、快照 Wiki、图下钻、混合检索、带引用问答和任务进度收成中文界面。视图本身不生产编译器事实,也不存密钥。左边深色导航、中间内容、图谱右侧证据检查器,是在落实“先聚合再下钻”的加载策略。生成进度走服务器推送,是因为一次 Wiki 可能很慢,轮询会不好表达阶段。前端构建结果打进 Python 包,是为了离线机不用再装 Node。所以前端的技术点是工作台信息架构和本机交付,不是独立的互联网前端产品。视觉改动有没有提升效率,待测。

主问 18:你准备用这个项目证明自己哪一类能力?

我准备证明三件事。第一,能把编译器工具、文档系统和模型调用做成有边界的流水线,而不是“接一个大模型就结束”。第二,能在正确性和速度冲突时做可解释取舍,比如叶子并发、父级串行、候选边不升级。第三,能把检索和问答收成可核对的引用,而不是聊天记录。我不准备用它证明高并发海量用户,也不准备在指标还没测时证明业务收益。若目标岗位更偏平台,我就多讲快照、任务车道和本机安全;若偏 AI 应用,我就多讲有界上下文和校验闭环。个人模块贡献确认后,再决定进取版怎么写。

4. 源码证据索引

主题关键路径与内部符号对应正文位置
产品定位与主链路README.mddocs/ARCHITECTURE.zh-CN.md简介、主问 1、16
平台数据根与实体docs/PLATFORM_ARCHITECTURE.zh-CN.mdclangwiki/platform.py主问 13、14
CMake 只配置clangwiki/build.pyvalidate_repositoryconfigure_cmakecreate_fallback_compilation_database主问 3
分析模式clangwiki/analyzer.pyClangAnalyzer.analyzeclang-tool/src/main.cppAnalyzer::visit主问 4、12
叶子边界clangwiki/knowledge.pybuild_knowledge_resolve_module_boundariestests/test_hierarchical_planning.py主问 5
任务规划clangwiki/planner.pyplan_documentsmodule_document_type主问 6、16
有界上下文clangwiki/context.pybuild_context 中按文档类型分配 ratios主问 7
叶子并发与断点clangwiki/pipeline.pyGenerationPipeline._generate_documents_write_checkpoint主问 6、8
模型适配与禁工具clangwiki/opencode.pyOpenCodeRunner.run_promptOPENCODE_CONFIGpermission: deny主问 2
输出门禁clangwiki/output.pyselect_final_complete_documentvalidate_markdownensure_navigation_card主问 7、9
拒收密钥clangwiki/api.py_reject_secrets主问 2、14
任务车道clangwiki/jobs.pyPersistentJobManagerMODEL_KINDSresume主问 8、13
继续生成clangwiki/api.pyresume_run主问 8
混合检索clangwiki/indexing.pyIndexService.search 中四路召回与 1/(60+rank)主问 10
问答引用clangwiki/rag.pyRagService.askvalidate_citationsCITATION_RE主问 11
源码沙箱clangwiki/wiki.pysource_snippetresolveparents 检查主问 14
图谱契约docs/CODE_KNOWLEDGE_GRAPH.zh-CN.mdclangwiki/graph.pyclangwiki/graph_analytics.py主问 12
工作台视图frontend/src/App.tsxfrontend/src/GraphWorkbench.tsx主问 17
检索/图谱规范docs/RAG_AND_RETRIEVAL.zh-CN.md主问 10、11
CLI 入口clangwiki/cli.pyserve / generate / ask / graph90 秒口播、主问 16