<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Interview on Hao · AI Agent 学习记录</title><link>https://haokw.github.io/tags/interview/</link><description>Recent content in Interview on Hao · AI Agent 学习记录</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 10 Aug 2026 20:50:00 +0800</lastBuildDate><atom:link href="https://haokw.github.io/tags/interview/index.xml" rel="self" type="application/rss+xml"/><item><title>第 1 章面试 · 05 LLM Gateway（统一模型调用服务）</title><link>https://haokw.github.io/posts/2026-08-10-ch1-interview-05-llm-gateway/</link><pubDate>Mon, 10 Aug 2026 20:50:00 +0800</pubDate><guid>https://haokw.github.io/posts/2026-08-10-ch1-interview-05-llm-gateway/</guid><description>&lt;blockquote&gt;
&lt;p&gt;目标岗位：Agent Harness 研发/工程方向（参考 &lt;code&gt;~/agent/jb/jd.md&lt;/code&gt;）
配套讲义：&lt;a
 href="../lectures/05-llm-gateway.md"
 
 
&gt;讲义 05 · LLM Gateway&lt;/a&gt;
用法：先自己口头答一遍，再对照&amp;quot;参考回答&amp;quot;；重点看&amp;quot;考察点&amp;quot;和&amp;quot;坑&amp;quot;。
原则：所有回答&lt;strong&gt;结论先行 → 项目证据 → 原理 → 边界与改进&lt;/strong&gt;，不要背概念。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="0-面试官视角gateway-题到底在考什么"&gt;0. 面试官视角：Gateway 题到底在考什么&lt;a href="#0-%e9%9d%a2%e8%af%95%e5%ae%98%e8%a7%86%e8%a7%92gateway-%e9%a2%98%e5%88%b0%e5%ba%95%e5%9c%a8%e8%80%83%e4%bb%80%e4%b9%88" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Gateway 是&amp;quot;把分散的厂商调用收敛成平台能力&amp;quot;的典型系统设计题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;概念层&lt;/strong&gt;：Gateway 解决什么问题（密钥、协议、可观测）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实践层&lt;/strong&gt;：你的网关怎么分层、每个模块在哪、有没有测试；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;判断层&lt;/strong&gt;：为什么这么设计？并发和性能边界？新增厂商要改什么？——拉差距。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;回答公式：&lt;strong&gt;一句话结论 → 你项目里的实现/例子 → 原理 → 边界与改进&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-按讲义章节的题目与参考回答"&gt;1. 按讲义章节的题目与参考回答&lt;a href="#1-%e6%8c%89%e8%ae%b2%e4%b9%89%e7%ab%a0%e8%8a%82%e7%9a%84%e9%a2%98%e7%9b%ae%e4%b8%8e%e5%8f%82%e8%80%83%e5%9b%9e%e7%ad%94" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Q1：LLM Gateway 解决什么问题？为什么不直接让业务调厂商 SDK？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考回答：四个问题——密钥分散（每个组件持 key，泄露面大）、协议差异
（每家格式不同）、不可观测（没有统一日志）、无法统一治理（限流/回退/成本）。
网关收敛成一层：密钥集中在 config 层、协议统一成 OpenAI Compatible、
每次调用留痕、限流回退统一做。我的网关 &lt;code&gt;create_app&lt;/code&gt; 组装了路由、限流、
模板、用量、provider 链，业务只发 HTTP。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Q2：密钥为什么集中？怎么防泄露？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考回答：集中后业务组件不碰厂商密钥，泄露面从&amp;quot;每个组件&amp;quot;缩小到&amp;quot;网关
一个点&amp;quot;。密钥从环境变量读（&lt;code&gt;config.py&lt;/code&gt;，支持 DASHSCOPE_API_KEY 等厂商
命名空间），不进代码库。诚实边界：网关本身是新的攻击面——生产上密钥
应放密钥管理服务（KMS/Vault），网关进程还要做最小权限和审计。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Q3：为什么对外统一成 OpenAI Compatible，而不是自定义协议？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考回答：OpenAI Compatible 是事实标准，DeepSeek、DashScope、本地
Ollama/vLLM 都兼容，生态里现成 SDK 和工具直接可用。对内用 &lt;code&gt;ChatProvider&lt;/code&gt;
接口 + adapter 屏蔽差异（讲义 01 §6），对外格式稳定、对内可演进。收益：
换厂商不改业务代码、OpenAI 官方 SDK 能直连网关。&lt;/p&gt;</description></item><item><title>第 1 章面试 · 04 Structured Output 结构化输出</title><link>https://haokw.github.io/posts/2026-08-10-ch1-interview-04-structured-output/</link><pubDate>Mon, 10 Aug 2026 20:40:00 +0800</pubDate><guid>https://haokw.github.io/posts/2026-08-10-ch1-interview-04-structured-output/</guid><description>&lt;blockquote&gt;
&lt;p&gt;目标岗位：Agent Harness 研发/工程方向（参考 &lt;code&gt;~/agent/jb/jd.md&lt;/code&gt;）
配套讲义：&lt;a
 href="../lectures/04-structured-output.md"
 
 
&gt;讲义 04 · Structured Output&lt;/a&gt;
用法：先自己口头答一遍，再对照&amp;quot;参考回答&amp;quot;；重点看&amp;quot;考察点&amp;quot;和&amp;quot;坑&amp;quot;。
原则：所有回答&lt;strong&gt;结论先行 → 项目证据 → 原理 → 边界与改进&lt;/strong&gt;，不要背概念。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="0-面试官视角结构化输出题到底在考什么"&gt;0. 面试官视角：结构化输出题到底在考什么&lt;a href="#0-%e9%9d%a2%e8%af%95%e5%ae%98%e8%a7%86%e8%a7%92%e7%bb%93%e6%9e%84%e5%8c%96%e8%be%93%e5%87%ba%e9%a2%98%e5%88%b0%e5%ba%95%e5%9c%a8%e8%80%83%e4%bb%80%e4%b9%88" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;结构化输出是 Agent 工程的&lt;strong&gt;地基&lt;/strong&gt;——工具调用、下游解析全靠它。面试官三层递进：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;概念层&lt;/strong&gt;：JSON Schema、Pydantic、原生结构化输出是什么；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实践层&lt;/strong&gt;：你项目里三家厂商怎么实现的？校验失败怎么处理？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;判断层&lt;/strong&gt;：为什么不能只靠 prompt？失败降级怎么设计？流式 + 结构化怎么
组合？——拉开差距的地方。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;回答公式：&lt;strong&gt;一句话结论 → 你项目里的实现/例子 → 原理 → 边界与改进&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-按讲义章节的题目与参考回答"&gt;1. 按讲义章节的题目与参考回答&lt;a href="#1-%e6%8c%89%e8%ae%b2%e4%b9%89%e7%ab%a0%e8%8a%82%e7%9a%84%e9%a2%98%e7%9b%ae%e4%b8%8e%e5%8f%82%e8%80%83%e5%9b%9e%e7%ad%94" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Q1：为什么 Agent 系统不能依赖自然语言解析？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考回答：模型输出要喂给代码——查词结果填卡片、工具参数发请求、SQL 要
执行。自然语言输出换行、加粗、解释文字都会破坏解析；更糟的是解析失败时
分不清是&amp;quot;格式错了&amp;quot;还是&amp;quot;答案错了&amp;quot;。所以原则是协议先行 + 校验兜底 +
失败有出路：先定义输出形状，返回后校验，不过就纠错重试或降级，绝不把脏
数据传给下游。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;考察点&lt;/strong&gt;：能不能说出&amp;quot;解析失败无法区分错误类型&amp;quot;这个深层原因。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Q2：JSON Schema 有哪些关键字段？&lt;code&gt;additionalProperties&lt;/code&gt; 为什么重要？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考回答：&lt;code&gt;type&lt;/code&gt;（对象/数组/标量）、&lt;code&gt;required&lt;/code&gt;（必填）、&lt;code&gt;properties&lt;/code&gt;
（字段类型）、数组的 &lt;code&gt;items&lt;/code&gt;/&lt;code&gt;minItems&lt;/code&gt;、字符串的 &lt;code&gt;enum&lt;/code&gt;。&lt;code&gt;additionalProperties: false&lt;/code&gt; 很重要——它禁止模型自作主张加字段，协议边界一旦被突破，下游解析
就容易悄悄出错。我 &lt;code&gt;/v1/structured&lt;/code&gt; 的 schema 都关掉了多余字段。&lt;/p&gt;</description></item><item><title>第 1 章面试 · 03 Prompt Engineering</title><link>https://haokw.github.io/posts/2026-08-10-ch1-interview-03-prompt-engineering/</link><pubDate>Mon, 10 Aug 2026 20:30:00 +0800</pubDate><guid>https://haokw.github.io/posts/2026-08-10-ch1-interview-03-prompt-engineering/</guid><description>&lt;blockquote&gt;
&lt;p&gt;目标岗位：Agent Harness 研发/工程方向（参考 &lt;code&gt;~/agent/jb/jd.md&lt;/code&gt;）
配套讲义：&lt;a
 href="../lectures/03-prompt-engineering.md"
 
 
&gt;讲义 03 · Prompt Engineering&lt;/a&gt;
用法：先自己口头答一遍，再对照&amp;quot;参考回答&amp;quot;；重点看&amp;quot;考察点&amp;quot;和&amp;quot;坑&amp;quot;。
原则：所有回答&lt;strong&gt;结论先行 → 项目证据 → 原理 → 边界与改进&lt;/strong&gt;，不要背概念。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="0-面试官视角prompt-题到底在考什么"&gt;0. 面试官视角：Prompt 题到底在考什么&lt;a href="#0-%e9%9d%a2%e8%af%95%e5%ae%98%e8%a7%86%e8%a7%92prompt-%e9%a2%98%e5%88%b0%e5%ba%95%e5%9c%a8%e8%80%83%e4%bb%80%e4%b9%88" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Prompt 题最容易答成&amp;quot;背技巧&amp;quot;，面试官想听的是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;概念层&lt;/strong&gt;：System Prompt、Few-shot、注入是什么；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实践层&lt;/strong&gt;：你的模板怎么管理、注入怎么防、版本怎么回滚，代码在哪；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;判断层&lt;/strong&gt;：隔离为什么不是银弹？Prompt 变更怎么灰度？怎么评估 Prompt
好坏？——这里拉开差距。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;回答公式：&lt;strong&gt;一句话结论 → 你项目里的实现/例子 → 背后的原理 → 边界与可改进点&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-按讲义章节的题目与参考回答"&gt;1. 按讲义章节的题目与参考回答&lt;a href="#1-%e6%8c%89%e8%ae%b2%e4%b9%89%e7%ab%a0%e8%8a%82%e7%9a%84%e9%a2%98%e7%9b%ae%e4%b8%8e%e5%8f%82%e8%80%83%e5%9b%9e%e7%ad%94" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Q1：System Prompt 和普通用户消息有什么区别？你们怎么管理 System Prompt？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考回答：System Prompt 是&amp;quot;岗位说明书&amp;quot;——定义角色、目标、边界和输出约定，
独立于用户消息（&lt;code&gt;role: system&lt;/code&gt;），模型通常给它更高权重。我把 System Prompt
当成模板资产管理：&lt;code&gt;prompts.json&lt;/code&gt; 里存 &lt;code&gt;reading_assistant&lt;/code&gt; 这类模板，带变量
（&lt;code&gt;{user_level}&lt;/code&gt;）和版本号，网关 &lt;code&gt;/v1/prompts&lt;/code&gt; 统一渲染，业务层只传变量。
这样角色设定变更走模板版本，不碰业务代码。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;考察点&lt;/strong&gt;：能不能区分&amp;quot;角色设定&amp;quot;和&amp;quot;用户消息&amp;quot;两个通道；模板化管理的动机。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Q2：角色定义怎么写才有效？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考回答：角色定义 = &amp;ldquo;你是谁 + 怎么干活&amp;rdquo;，关键是&lt;strong&gt;行为约束&lt;/strong&gt;要具体。弱约束
&amp;ldquo;你是代码审查助手&amp;quot;模型会自由发挥；强约束要写明审查维度、每个问题的输出
要素、以及&amp;quot;没有问题时明确说无问题，不要编造&amp;rdquo;。我的种子模板
&lt;code&gt;translate_assistant&lt;/code&gt; 就是&amp;quot;只输出译文&amp;quot;这种带边界的角色，约束和输出协议分开写。&lt;/p&gt;</description></item><item><title>第 1 章面试 · 02 Streaming 流式输出</title><link>https://haokw.github.io/posts/2026-08-10-ch1-interview-02-streaming/</link><pubDate>Mon, 10 Aug 2026 20:20:00 +0800</pubDate><guid>https://haokw.github.io/posts/2026-08-10-ch1-interview-02-streaming/</guid><description>&lt;blockquote&gt;
&lt;p&gt;目标岗位：Agent Harness 研发/工程方向（参考 &lt;code&gt;~/agent/jb/jd.md&lt;/code&gt;）
配套讲义：&lt;a
 href="../lectures/02-streaming.md"
 
 
&gt;讲义 02 · Streaming 流式输出&lt;/a&gt;
用法：先自己口头答一遍，再对照&amp;quot;参考回答&amp;quot;；重点看&amp;quot;考察点&amp;quot;和&amp;quot;坑&amp;quot;。
原则：所有回答&lt;strong&gt;结论先行 → 项目证据 → 原理 → 边界与改进&lt;/strong&gt;，不要背概念。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="0-面试官视角流式题到底在考什么"&gt;0. 面试官视角：流式题到底在考什么&lt;a href="#0-%e9%9d%a2%e8%af%95%e5%ae%98%e8%a7%86%e8%a7%92%e6%b5%81%e5%bc%8f%e9%a2%98%e5%88%b0%e5%ba%95%e5%9c%a8%e8%80%83%e4%bb%80%e4%b9%88" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;流式是&amp;quot;理论简单、工程全是坑&amp;quot;的题目，面试官按三层递进：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;概念层&lt;/strong&gt;：SSE 是什么、TTFB 是什么；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实践层&lt;/strong&gt;：你的网关/前端怎么实现的，能不能现场演示；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;判断层&lt;/strong&gt;：两段流式缺一段会怎样？取消怎么贯穿三层？流中出错为什么不能
重试？长文本断了怎么办？——这一层才是拉开差距的地方。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;回答公式：&lt;strong&gt;一句话结论 → 你项目里的实现/例子 → 背后的原理 → 边界与可改进点&lt;/strong&gt;。
主动说&amp;quot;这里我做得不彻底，我的方案是 X&amp;quot;，比被追问出来强得多。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-按讲义章节的题目与参考回答"&gt;1. 按讲义章节的题目与参考回答&lt;a href="#1-%e6%8c%89%e8%ae%b2%e4%b9%89%e7%ab%a0%e8%8a%82%e7%9a%84%e9%a2%98%e7%9b%ae%e4%b8%8e%e5%8f%82%e8%80%83%e5%9b%9e%e7%ad%94" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="11-为什么需要-streaming"&gt;1.1 为什么需要 Streaming&lt;a href="#11-%e4%b8%ba%e4%bb%80%e4%b9%88%e9%9c%80%e8%a6%81-streaming" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Q1：流式和非流式在用户体验上差在哪？你项目里有数据吗？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考回答：LLM 生成要几十秒，非流式是&amp;quot;等全部生成完才出现第一个字&amp;quot;，用户
看到一片空白；流式是&amp;quot;边生成边显示&amp;quot;，用户感知延迟从&amp;quot;总耗时&amp;quot;降到&amp;quot;第一个
token 的时间&amp;quot;。我首页有个对比面板：同一消息 × 两种模式并排跑，流式栏会
显示首字节耗时、总耗时、分片数和分片表。改流式链路之前实测过一次：
非流式总耗时 20662ms，流式首字节 20655ms——首字节几乎等于总耗时，这恰恰
暴露了&amp;quot;上游整体缓冲后回放&amp;quot;的问题，说明只传 &lt;code&gt;stream: true&lt;/code&gt; 而不打通传输层，
用户体验没有任何提升。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;考察点&lt;/strong&gt;：是否真的理解&amp;quot;感知延迟&amp;quot;；能不能用自己项目里的指标讲，而不是背概念。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Q2：首字节耗时（TTFB）和总耗时有什么区别？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考回答：TTFB 是请求发出到收到第一块内容的时间，总耗时是收到最后一块的
时间。非流式里两者基本相等（必须等完整结果）；真流式里 TTFB 约等于&amp;quot;模型
生成第一个 token 的时间&amp;quot;，总耗时不变但感知变快。工程上这是流式最重要的
监控指标——如果首字节≈总耗时，说明链路里某一段被缓冲了（浏览器、反向代理、
或者上游 HTTP 客户端整体读 body）。&lt;/p&gt;</description></item><item><title>第 1 章面试 · 01 LLM API 与模型调用基础</title><link>https://haokw.github.io/posts/2026-08-10-ch1-interview-01-llm-api-basics/</link><pubDate>Mon, 10 Aug 2026 20:10:00 +0800</pubDate><guid>https://haokw.github.io/posts/2026-08-10-ch1-interview-01-llm-api-basics/</guid><description>&lt;blockquote&gt;
&lt;p&gt;目标岗位：Agent Harness 研发/工程方向（参考 &lt;code&gt;~/agent/jb/jd.md&lt;/code&gt;）
用法：先自己口头答一遍，再对照&amp;quot;参考回答&amp;quot;；重点看&amp;quot;考察点&amp;quot;和&amp;quot;坑&amp;quot;。
原则：所有回答&lt;strong&gt;结论先行 → 项目证据 → 原理 → 边界与改进&lt;/strong&gt;，不要背概念。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="0-面试官视角这类题到底在考什么"&gt;0. 面试官视角：这类题到底在考什么&lt;a href="#0-%e9%9d%a2%e8%af%95%e5%ae%98%e8%a7%86%e8%a7%92%e8%bf%99%e7%b1%bb%e9%a2%98%e5%88%b0%e5%ba%95%e5%9c%a8%e8%80%83%e4%bb%80%e4%b9%88" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;同样的知识点，面试官会按三层递进考察：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;概念层&lt;/strong&gt;：懂不懂（Chat Completions 结构、token 是什么）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实践层&lt;/strong&gt;：做没做过（你项目里怎么实现的，代码在哪）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;判断层&lt;/strong&gt;：为什么这么设计、哪里做得不好、怎么改（这是拉开差距的地方）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;回答公式：&lt;strong&gt;一句话结论 → 你项目里的实现/例子 → 背后的原理 → 边界与可改进点&lt;/strong&gt;。
最后一步尤其重要——主动说&amp;quot;这里我还没做/做得不好，我的方案是 X&amp;quot;，比被追问出来
强得多。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-按讲义章节的题目与参考回答"&gt;1. 按讲义章节的题目与参考回答&lt;a href="#1-%e6%8c%89%e8%ae%b2%e4%b9%89%e7%ab%a0%e8%8a%82%e7%9a%84%e9%a2%98%e7%9b%ae%e4%b8%8e%e5%8f%82%e8%80%83%e5%9b%9e%e7%ad%94" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="11-chat-completions--responses-api"&gt;1.1 Chat Completions / Responses API&lt;a href="#11-chat-completions--responses-api" class="post-heading__anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Q1：你们网关为什么对外暴露 chat.completions，而不是直接调各家 SDK？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考回答：因为 chat.completions 是事实标准，DeepSeek、DashScope、Moonshot、
本地 Ollama 都提供兼容端点。我在 provider 层定义了统一接口 &lt;code&gt;ChatProvider&lt;/code&gt;，
各家用 adapter 做格式转换（&lt;code&gt;openai_compatible.py&lt;/code&gt; / &lt;code&gt;anthropic.py&lt;/code&gt; /
&lt;code&gt;gemini.py&lt;/code&gt;），上层代码只认一个接口。收益是：换模型不改业务代码、
可以跨厂商回退、用量和错误统一统计。本质是把&amp;quot;协议差异&amp;quot;收敛到 adapter 层。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;考察点&lt;/strong&gt;：是否理解&amp;quot;统一抽象&amp;quot;的动机（协议差异、切换成本、回退、可观测）。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Q2：Chat Completions 和 Responses API 有什么区别？你们为什么没做 Responses？&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>