回顾提问题库
随机提问用。难度适中,覆盖 Day1-Day7 所有核心知识点。 建议打乱顺序随机抽,每题限时 30 秒回答。
Day1 · LLM 基础(5 题)
Q1. LLM 生成文字的核心原理是什么?用一句话描述。
参考答案:给定前面的 token 序列,预测下一个 token 的概率分布,然后从中采样。
Q2. "涌现"是什么意思?举一个例子。
参考答案:小模型做不到的事,大模型突然能做了。例如 GPT-3(1750 亿参数)突然能做算术推理,而 GPT-2(15 亿)不行。
Q3. 什么是 Token?中文"你好世界"大约多少个 token?
参考答案:Token 是介于字和词之间的子词单位。"你好世界"大约 4-6 个 token(中文 1 字 ≈ 1-1.5 token)。
Q4. 上下文窗口 128K 是什么意思?输入和输出是什么关系?
参考答案:模型一次推理能"看"到最多 128K 个 token。输入 + 输出共享这 128K——输入太长,输出就没空间了。
Q5. 什么是幻觉?为什么模型会产生幻觉?
参考答案:模型生成的内容语法正确、看似合理,但事实上是错误的。原因:模型只按"统计最像"往下接,从不验证事实真假。
Day2 · Function Calling 与 Agent Loop(5 题)
Q6. Agent 和 Chatbot 最本质的区别是什么?
参考答案:Agent 有循环——能调工具、看结果、根据结果决定下一步,直到任务完成。Chatbot 只能一问一答。
Q7. Function Calling 的 4 种消息角色分别是什么?
参考答案:system(系统设定)、user(用户输入)、assistant(AI 回复,可能含 tool_calls)、tool(工具执行结果)。
Q8. ToolRegistry 的 to_schemas() 方法是干什么的?
参考答案:把注册的所有工具函数转换成 OpenAI 格式的 JSON schema 数组,传给 LLM 让它知道有哪些工具可用。
Q9. Agent Loop 什么时候停?
参考答案:当 LLM 返回的 response 里没有 tool_calls 时(即它觉得任务已完成,直接给出文字回答),或者达到最大轮次上限。
Q10. 为什么工具函数的返回值统一用 str,而且异常不上抛?
参考答案:LLM 只认文本——返回 str 是协议约束。异常不上抛是因为如果工具报错导致整个 Agent 崩溃,不如把错误信息转成字符串返回,让 LLM 自己决定重试还是换策略。
Day3 · Agent 范式(5 题)
Q11. ReAct 的三个步骤叫什么?
参考答案:Thought(思考)→ Action(行动 / 调工具)→ Observation(观察结果),然后循环。
Q12. Plan-and-Solve 跟 ReAct 最大的区别是什么?
参考答案:P&S 先生成完整计划(任务列表),再逐步执行。ReAct 是边走边看、随机应变。P&S 更省 token 但不擅长处理变化。
Q13. Reflection 是不是一种独立的范式?
参考答案:不完全是。Reflection 更像一个"包装层"——你可以把它套在 ReAct 或 P&S 外面。它让 Agent 审阅自己的答案并修订。
Q14. 为什么 demo_12 故意用 prompt + 正则来实现 ReAct?
参考答案:为了亲身体会"纯 prompt 约定输出格式"有多脆弱——模型多说一句就解析失败。对比出 Function Calling(结构化 tool_calls)的价值。
Q15. 什么场景适合 Plan-and-Solve?什么场景适合 ReAct?
参考答案:P&S 适合步骤明确、变数小的多步任务(如"建项目 + 写测试 + 跑测试")。ReAct 适合信息不确定、需要逐步收集的探索型任务(如"这个 bug 出在哪")。
Day4 · Context 与 Memory(5 题)
Q16. 为什么不把所有对话历史都保留在 messages 里?
参考答案:① token 贵,30 轮对话可能上万 token ② 超过窗口会报错 ③ "Lost in the Middle"——模型对中间内容注意力下降。
Q17. 滑动窗口策略的核心思路是什么?
参考答案:保留头(system prompt)+ 保留尾(最近 N 轮),中间的要么截断要么摘要替代。
Q18. 向量检索的核心步骤是什么?
参考答案:① 把文本通过 embedding 模型转成向量 ② 把查询也转成向量 ③ 计算余弦相似度 ④ 取 Top-K 最相似的作为结果。
Q19. 向量检索和关键词检索各自的优缺点?
参考答案:向量能处理同义/改写/跨语言,但要调 API 花钱。关键词零依赖极快,但"字面对不上"就找不到。
Q20. ContextManager 和 Memory 管的分别是什么?
参考答案:ContextManager 管"本次对话的 messages"(短期工作记忆)。Memory 管"跨会话的持久化事实"(长期记忆)。
Day5 · Coding Agent 工具(5 题)
Q21. Coding Agent 的五阶段工作流是什么?
参考答案:浏览(list_dir)→ 定位(grep/glob)→ 理解(read)→ 修改(write/edit)→ 验证(bash)。
Q22. edit 工具为什么用 old_content / new_content 而不是行号?
参考答案:LLM 上一轮 read 时看到的行号,在它 edit 时可能已经变了(因为上面加了行)。用文本匹配不依赖行号,更稳定。
Q23. edit 的"唯一性约束"是什么?为什么需要?
参考答案:old_content 必须在文件中只出现一次。否则模型不知道替换哪一处,可能改错地方。
Q24. bash 工具的 4 道安全闸门是什么?
参考答案:① 超时(30 秒上限)② 输出截断(最多 50KB)③ 工作目录限定(不跑出 cwd)④ 危险命令黑名单(拦截 rm -rf 等)。
Q25. 为什么说黑名单不是终极安全方案?
参考答案:攻击者/模型总能找到绕过方式(比如用 base64 编码命令、用 Python 调 os.system 等)。工业级方案是白名单 + Docker 沙箱隔离。
Day6-7 · 整合与上线(5 题)
Q26. CodingAgent 的 chat 方法主要做哪几步?
参考答案:① Memory 召回相关事实 ② 加 user 消息 ③ 必要时 Context 压缩 ④ Agent Loop(调 LLM → 看 tool_calls → 执行 → 回灌)⑤ 结束时 distill 提炼记忆。
Q27. Skills 的"渐进式加载"是什么意思?
参考答案:启动时只加载索引(name + description),运行时匹配到相关 skill 才加载完整 body。好处:省 token、避免"串台"。
Q28. NPC 的触发链路是什么?从"用户评论"到"NPC 回复"经过哪几步?
参考答案:用户 @ NPC → CNB 检测到事件 → 触发 .cnb.yml 定义的流水线 → 启动 Docker 容器 → npc-entrypoint.sh 读环境变量 → 调 my-agent → git-cnb 回写评论。
Q29. Docker 两阶段构建的好处是什么?
参考答案:builder 阶段装编译工具,体积大(~800MB);runtime 阶段只留二进制 + 运行依赖,体积小(~150MB)。最终推送的镜像只有 runtime。
Q30. 如果 NPC 没有回复,最可能的 3 个排查方向是什么?
参考答案:① .cnb/settings.yml 里 NPC 名字跟 @ 的不一致 ② 仓库 Secrets 里 API Key 没配或名字错 ③ 镜像还没构建成功(看流水线日志)。