<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>HiKaRi Blog</title><description>AI API 接入、成本与工程实践</description><link>https://blog.hikaripublic.xyz/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.16.8</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年10月25日 23:12:57</lastBuildDate><item><title>从这里开始：HiKaRi API 接入与阅读路线图</title><link>https://blog.hikaripublic.xyz/posts/start-here/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/start-here/</guid><description>第一次接入、排查报错、选择渠道或开展团队项目，从对应入口开始。先验证最小请求，再扩大使用。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HiKaRi Blog 围绕一件事展开：把 AI API 接好、用稳、算清楚。第一次来，可以按你的任务选择一条路线，不必从头读完所有文章。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;第一次调用 API&lt;a href=&quot;#第一次调用-api&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;到 &lt;a href=&quot;https://hikariapi.xyz/register?utm_source=hikari_blog&amp;amp;utm_medium=referral&amp;amp;utm_campaign=launch&amp;amp;utm_content=start-here&quot; target=&quot;_blank&quot;&gt;HiKaRi 主站注册&lt;/a&gt;，完成站内要求的邮箱验证。&lt;/li&gt;
&lt;li&gt;登录后确认可用资金，在 API Key 页面创建密钥、选择实际需要的分组。&lt;/li&gt;
&lt;li&gt;在模型广场复制该 Key 有权使用的精确模型名。模型广场当前需要登录；教程提及的型号不代表你的分组已开放。&lt;/li&gt;
&lt;li&gt;阅读 &lt;a href=&quot;/posts/base-url-and-api-key/&quot;&gt;地址与密钥怎么填&lt;/a&gt;，再用 &lt;a href=&quot;/posts/python-first-api-call/&quot;&gt;Python 最小请求&lt;/a&gt; 验证一条短文本。&lt;/li&gt;
&lt;li&gt;最小请求成功后，再配置客户端、开启流式输出，最后接入长上下文、工具或媒体任务。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;不要同时修改模型、线路和客户端配置。一次只改变一个变量，问题才容易定位。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;已经接入，但遇到问题&lt;a href=&quot;#已经接入但遇到问题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;现象&lt;/th&gt;&lt;th&gt;从哪里开始&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;401、403、404、429&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;/posts/api-errors-401-429/&quot;&gt;HTTP 错误排查&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;请求成功，但不逐字显示&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;/posts/streaming-and-sse/&quot;&gt;流式输出与缓冲&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;终端能用，客户端不能用&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;/posts/client-setup-checklist/&quot;&gt;客户端配置清单&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;超时后不知道是否重发&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;/posts/retry-and-idempotency/&quot;&gt;重试与幂等&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;视频完成却不能下载&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;/posts/image-video-workflow/&quot;&gt;图片与视频任务流程&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;问题仍未解决时，到 &lt;a href=&quot;/guestbook/&quot;&gt;联系与交流&lt;/a&gt; 查看需要提供的脱敏信息。不要发送完整 API Key。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;正在选型或核算成本&lt;a href=&quot;#正在选型或核算成本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先读 &lt;a href=&quot;/posts/channel-selection/&quot;&gt;渠道来源与服务边界&lt;/a&gt;，再看 &lt;a href=&quot;/posts/token-cost-explained/&quot;&gt;Token 成本怎么算&lt;/a&gt; 和 &lt;a href=&quot;/posts/model-evaluation/&quot;&gt;模型评测怎么做&lt;/a&gt;。本博客不维护第二份实时价目表，价格、权限与实际计费以主站当前信息为准。&lt;/p&gt;&lt;p&gt;团队采购可以从 &lt;a href=&quot;/posts/team-onboarding-and-invoices/&quot;&gt;团队接入与开票&lt;/a&gt; 开始；合成数据和蒸馏项目请先看 &lt;a href=&quot;/posts/distillation-data-quality/&quot;&gt;数据质量与验收&lt;/a&gt;。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;HiKaRi 提供什么&lt;a href=&quot;#hikari-提供什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;HiKaRi 以不掺水、明示渠道来源、明确价格为服务定位，提供多模型 API 接入，并承接团队对接、开票及授权数据项目。具体协议、型号、并发与交付范围需要逐项核对，不在博客中作无限额或永久可用承诺。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hikariapi.xyz/docs/overview&quot; target=&quot;_blank&quot;&gt;API 文档&lt;/a&gt;：实际请求格式和支持范围。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hikariapi.xyz/resources&quot; target=&quot;_blank&quot;&gt;服务说明&lt;/a&gt;：渠道、费用、团队与开票入口。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hikariimg.xyz/&quot; target=&quot;_blank&quot;&gt;生图站&lt;/a&gt;：需要图形界面时的图片生成入口。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;文章中的计算例子会标明假设；示例代码不代表已对每个模型进行付费测试。你可以先用一条低成本请求核对，再按自己的任务逐步扩大。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>AI API 返回 401、403、404、429：按顺序排查</title><link>https://blog.hikaripublic.xyz/posts/api-errors-401-429/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/api-errors-401-429/</guid><description>从认证、权限、路径、参数和限流逐步缩小范围，附可用于沟通的脱敏问题模板。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;报错先记录发生时间、HTTP 状态和响应中的具体错误。不要同时切换供应商、线路、模型、Key 后再判断哪个设置有效。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;先看状态，再看具体错误&lt;a href=&quot;#先看状态再看具体错误&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;状态或现象&lt;/th&gt;&lt;th&gt;优先检查&lt;/th&gt;&lt;th&gt;下一步&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;400 / 422&lt;/td&gt;&lt;td&gt;字段名、类型、参数组合和模型限制&lt;/td&gt;&lt;td&gt;按响应指出的字段修正，先去掉非必需参数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;401&lt;/td&gt;&lt;td&gt;本站 Key、认证 Header、前后空白或过期凭据&lt;/td&gt;&lt;td&gt;在本机重新复制有效 Key，检查客户端读取来源&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;403&lt;/td&gt;&lt;td&gt;Key 与分组权限、资金、模型开放状态&lt;/td&gt;&lt;td&gt;核对实际授权，不能靠新建 Key 绕过&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;404&lt;/td&gt;&lt;td&gt;endpoint、重复 &lt;code&gt;/v1&lt;/code&gt;、模型或任务归属&lt;/td&gt;&lt;td&gt;比对实际路径，任务使用有权限的身份查询&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;409&lt;/td&gt;&lt;td&gt;幂等键内容变化或任务状态冲突&lt;/td&gt;&lt;td&gt;保留原业务与任务号，按错误说明继续处理&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;429&lt;/td&gt;&lt;td&gt;请求速率、并发或上游容量&lt;/td&gt;&lt;td&gt;降低并发，尊重 &lt;code&gt;Retry-After&lt;/code&gt;，避免同步重试&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5xx / 连接超时&lt;/td&gt;&lt;td&gt;服务、上游与网络，以及请求是否已受理&lt;/td&gt;&lt;td&gt;先查记录；媒体任务优先续查原 ID&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;状态码只是入口，不同协议可能返回更具体的错误类型。正文是 HTML 时，检查是否访问了网页、被代理改写或经过了登录跳转，不能直接当 JSON 解析。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;用最小请求做对照&lt;a href=&quot;#用最小请求做对照&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;先查询当前 Key 的模型目录。&lt;/li&gt;
&lt;li&gt;使用客户端相同的地址、Key 和模型，发一条无附件、无工具的短文本。&lt;/li&gt;
&lt;li&gt;目录请求失败，先解决认证和权限；短文本成功后，再逐步加回高级参数。&lt;/li&gt;
&lt;li&gt;终端成功、客户端失败，按 &lt;a href=&quot;/posts/client-setup-checklist/&quot;&gt;客户端清单&lt;/a&gt; 比较配置来源。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;调用目录不是完整生成测试；短文本也不能证明长上下文、图片或工具能力全部可用。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;超时后不要立刻重发&lt;a href=&quot;#超时后不要立刻重发&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;连接在途中断开，客户端无法据此证明服务端没有受理。尤其图片、视频、工具执行可能存在成本或副作用。已有任务 ID 就续查，没有 ID 则保留原业务号、幂等键和时间，先核对记录。详见 &lt;a href=&quot;/posts/retry-and-idempotency/&quot;&gt;重试与幂等&lt;/a&gt;。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;提交问题时可以照这个模板&lt;a href=&quot;#提交问题时可以照这个模板&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;时间与时区：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;客户端及版本：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;运行环境：Windows / WSL / Docker / 远端&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;请求路径：只写路径，不附凭据&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;模型与分组：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;HTTP 状态与脱敏错误：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;任务 ID 或请求记录编号：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;已验证的最小请求结果：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;通过 &lt;a href=&quot;/guestbook/&quot;&gt;联系与交流&lt;/a&gt; 找运营方核对。不要提交完整 Key、Cookie、私有素材链接或客户原始数据。&lt;/p&gt;&lt;p&gt;依据：&lt;a href=&quot;https://hikariapi.xyz/docs/troubleshooting&quot; target=&quot;_blank&quot;&gt;HiKaRi 常见错误&lt;/a&gt;。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Base URL、API Key 和模型名分别怎么填？</title><link>https://blog.hikaripublic.xyz/posts/base-url-and-api-key/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/base-url-and-api-key/</guid><description>区分站点地址、协议路径、Key 权限和精确模型名，避免 /v1/v1 与客户端认证配置错误。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;一次 API 请求至少包含四个独立信息：发往哪里、使用什么协议、由哪个 Key 认证、调用哪个模型。把它们分开检查，比反复换 Key 更有效。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;按客户端的拼接规则填写地址&lt;a href=&quot;#按客户端的拼接规则填写地址&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;使用方式&lt;/th&gt;&lt;th&gt;HiKaRi 地址&lt;/th&gt;&lt;th&gt;谁追加接口路径&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;需要填写 OpenAI 兼容 Base URL 的客户端&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://hikariapi.xyz/v1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;客户端通常追加 &lt;code&gt;/chat/completions&lt;/code&gt; 或 &lt;code&gt;/responses&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Claude Code 或 Anthropic 风格客户端&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://hikariapi.xyz&lt;/code&gt;&lt;/td&gt;&lt;td&gt;客户端通常追加 &lt;code&gt;/v1/messages&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;自己编写原始 HTTP 请求&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://hikariapi.xyz&lt;/code&gt;&lt;/td&gt;&lt;td&gt;代码中写完整的 &lt;code&gt;/v1/...&lt;/code&gt; 路径&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;“通常”需要结合客户端的说明确认。有的输入框要求完整 endpoint，有的只接受站点根地址。最终请求日志比输入框标签更有判断价值。&lt;/p&gt;&lt;p&gt;如果返回路径是 &lt;code&gt;/v1/v1/chat/completions&lt;/code&gt;，说明版本前缀重复；如果请求发到了 &lt;code&gt;/chat/completions&lt;/code&gt;，则可能缺少 &lt;code&gt;/v1&lt;/code&gt;。站内“API Key → 使用”提供了已配置线路时，优先使用该入口给出的说明。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Key 是服务凭据，不是网页登录密码&lt;a href=&quot;#key-是服务凭据不是网页登录密码&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 API Key 页面创建本站密钥，按应用分别管理。不要把上游官方平台 Key、网页登录密码或订阅账号 Cookie 填到本站 API Key 输入框。&lt;/p&gt;&lt;p&gt;分开 Key 有助于限额、轮换与排错，但创建更多 Key 不会凭空增加账号并发。Key 绑定分组、用户权限和可用资金仍会影响请求能否通过。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;模型名以目录为准&lt;a href=&quot;#模型名以目录为准&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;从当前 Key 的目录或模型广场复制模型 ID，不要按印象拼写。版本、大小写、前后缀和媒体分辨率后缀可能影响路由。&lt;/p&gt;&lt;p&gt;先查询目录的 Bash 示例：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;API_KEY&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;在本机填写本站密钥&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--fail-with-body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://hikariapi.xyz/v1/models&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &lt;/span&gt;&lt;span&gt;$API_KEY&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Windows PowerShell 使用 &lt;code&gt;curl.exe&lt;/code&gt;，或按 &lt;a href=&quot;/posts/python-first-api-call/&quot;&gt;Python 教程&lt;/a&gt; 请求，避免旧版 PowerShell 中 &lt;code&gt;curl&lt;/code&gt; 别名造成参数混淆。不要把终端里填过的密钥截图发给别人。&lt;/p&gt;&lt;p&gt;目录列出名称，不等于声明该模型支持所有参数。工具调用、图片输入、结构化输出和思考档位需要单独核对。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;按这个顺序验收&lt;a href=&quot;#按这个顺序验收&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先查模型，再发短文本，然后开启流式，最后测试高级能力。若失败，保留请求路径和 HTTP 状态，按 &lt;a href=&quot;/posts/api-errors-401-429/&quot;&gt;报错清单&lt;/a&gt; 排查。&lt;/p&gt;&lt;p&gt;依据：&lt;a href=&quot;https://hikariapi.xyz/docs/overview&quot; target=&quot;_blank&quot;&gt;HiKaRi 开始使用&lt;/a&gt;、&lt;a href=&quot;https://hikariapi.xyz/docs/text-api&quot; target=&quot;_blank&quot;&gt;文字 API&lt;/a&gt;。实时配置以主站文档为准。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>选择 API 中转渠道：除了单价，还要核对哪些信息？</title><link>https://blog.hikaripublic.xyz/posts/channel-selection/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/channel-selection/</guid><description>把渠道来源、模型身份、协议能力、价格单位与验收记录放在同一张检查表中。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HiKaRi 的定位是不掺水、明示渠道、明确价格。对使用者而言，透明应当表现为可以核对的信息：实际买到哪种服务、支持哪些参数、按什么单位收费，以及出现问题后如何核对。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;先问清渠道来源&lt;a href=&quot;#先问清渠道来源&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;不同渠道可能采用不同的采购和接入方式，能力与限制也会不同。查看主站标注的渠道信息，针对你的用途确认来源类型、支持协议、使用限制和可用资金方式。不要仅凭“官方”“直连”等名称推断拥有某种授权或服务等级。&lt;/p&gt;&lt;p&gt;团队采购如果需要更具体的来源材料，应在试点前沟通。博客不会用一个统一标签替代每条渠道的实际说明。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;模型名称与能力需要分开核对&lt;a href=&quot;#模型名称与能力需要分开核对&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;核对项&lt;/th&gt;&lt;th&gt;建议记录&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;精确模型 ID&lt;/td&gt;&lt;td&gt;包含版本、后缀，记录核对日期&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;协议&lt;/td&gt;&lt;td&gt;Chat、Responses、Messages 或其他实际支持方式&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;高级参数&lt;/td&gt;&lt;td&gt;工具调用、图片、输出格式和思考档位&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;限制&lt;/td&gt;&lt;td&gt;上下文、最大输出、并发、文件与素材要求&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;价格&lt;/td&gt;&lt;td&gt;单位、输入输出、缓存、分组倍率与资金折扣&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;交付&lt;/td&gt;&lt;td&gt;错误追踪、媒体下载、文件保留与支持入口&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;模型自述“我是什么模型”、语气相似或一道题的答案，都不足以单独证明模型身份。更合理的验收是核对渠道披露、协议行为和有代表性的固定任务，同时保留可复现参数。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;低价要放进任务成本里看&lt;a href=&quot;#低价要放进任务成本里看&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;假设渠道 A 的单次价格更低，但需要多次重试才能得到可用输出，最终成本可能更高。比较时把失败、返工、延迟和维护时间一起记录。相关方法见 &lt;a href=&quot;/posts/model-evaluation/&quot;&gt;模型评测&lt;/a&gt; 和 &lt;a href=&quot;/posts/token-cost-explained/&quot;&gt;Token 费用&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;本文不发布未经同条件测试的“全网最低”或“绝对优于某站”结论，也不把一次短请求成功写成长期稳定性证明。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;如何查看 HiKaRi 当前信息&lt;a href=&quot;#如何查看-hikari-当前信息&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;到 &lt;a href=&quot;https://hikariapi.xyz/resources/channels&quot; target=&quot;_blank&quot;&gt;服务与渠道说明&lt;/a&gt; 了解原则，登录 &lt;a href=&quot;https://hikariapi.xyz/model-plaza?utm_source=hikari_blog&amp;amp;utm_medium=referral&amp;amp;utm_campaign=launch&amp;amp;utm_content=channel-selection&quot; target=&quot;_blank&quot;&gt;模型广场&lt;/a&gt; 核对当前模型、渠道与价格。大型任务先做小样本验收，再决定是否扩大。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>客户端接入检查清单：终端能用，为什么应用里不能用？</title><link>https://blog.hikaripublic.xyz/posts/client-setup-checklist/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/client-setup-checklist/</guid><description>从协议选择、配置来源、模型能力和运行环境排查客户端接入，不把改地址视为万能兼容。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;终端最小请求成功，证明这组地址、认证和请求体在当时能完成调用。客户端仍然失败，通常需要比较它实际发送的请求，而不是继续重建 Key。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;先确认协议&lt;a href=&quot;#先确认协议&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Chat Completions、Responses、Anthropic Messages、Gemini 风格接口的字段和事件不同。客户端只写着“自定义供应商”，不代表它支持所有协议。&lt;/p&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;核对项&lt;/th&gt;&lt;th&gt;需要确认的事实&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;供应商类型&lt;/td&gt;&lt;td&gt;客户端实际选择的协议，是否与分组一致&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;地址&lt;/td&gt;&lt;td&gt;要求根地址、带 &lt;code&gt;/v1&lt;/code&gt; 的地址还是完整 endpoint&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型&lt;/td&gt;&lt;td&gt;API ID 与显示名称是否分开，是否存在客户端别名&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;高级能力&lt;/td&gt;&lt;td&gt;工具调用、图片、结构化输出是否真的被该模型支持&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;认证&lt;/td&gt;&lt;td&gt;客户端是否仍读取旧环境变量或旧供应商的 Key&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;完整请求路径应与 &lt;a href=&quot;/posts/base-url-and-api-key/&quot;&gt;地址说明&lt;/a&gt; 对照。不要将三个接口的请求体互相混用。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;配置要写在真正运行程序的位置&lt;a href=&quot;#配置要写在真正运行程序的位置&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Windows 桌面应用、WSL、Docker、远程 SSH 扩展可能读取不同的环境变量和配置文件。改了本机文件，但程序运行在远端，设置不会自动过去。&lt;/p&gt;&lt;p&gt;保存后检查客户端显示的供应商和模型。必要时按客户端文档重开进程，让它重新读取环境变量。不要把重装应用当成第一步。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;再比较最小请求与完整会话&lt;a href=&quot;#再比较最小请求与完整会话&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先建一个不带历史、不带工具、不带图片的新会话。如果短文本成功，旧会话失败，逐项加入历史、工具和附件，找出触发差异的部分。上下文过长、附件格式不支持和函数参数不兼容，都可能只在完整会话出现。&lt;/p&gt;&lt;p&gt;流式出问题时，检查 &lt;a href=&quot;/posts/streaming-and-sse/&quot;&gt;SSE 与缓冲&lt;/a&gt;；工具失败时，保留脱敏的工具定义和响应片段，不能用“普通聊天能回复”证明工具协议完整兼容。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;使用对应的站内教程&lt;a href=&quot;#使用对应的站内教程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hikariapi.xyz/docs/clients&quot; target=&quot;_blank&quot;&gt;聊天客户端与编辑器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hikariapi.xyz/docs/cc-switch&quot; target=&quot;_blank&quot;&gt;CC Switch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hikariapi.xyz/docs/claude-code&quot; target=&quot;_blank&quot;&gt;Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hikariapi.xyz/docs/codex&quot; target=&quot;_blank&quot;&gt;Codex&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;这些链接指向 HiKaRi 的接入说明。客户端版本和渠道能力会变化，应在实际使用的版本上验证；博客不承诺所有历史版本都兼容。&lt;/p&gt;&lt;p&gt;需要协助时，在 &lt;a href=&quot;/guestbook/&quot;&gt;联系页&lt;/a&gt; 提交客户端版本、运行环境、实际路径、模型和错误码。请删除 Header 中的 Key、Cookie 与会话令牌。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>蒸馏与合成数据项目：先确定授权、质量标准和验收集</title><link>https://blog.hikaripublic.xyz/posts/distillation-data-quality/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/distillation-data-quality/</guid><description>把数据权利、上游使用条件、任务设计、去重与验收拆开，避免花钱生成大量无法使用的训练样本。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HiKaRi 可沟通蒸馏及合成数据项目。能调用模型只说明接口可用，不自动代表你获得了将输出用于任何训练、转售或商业项目的权利。项目应先核对数据授权、上游条件与交付目的，再安排生成。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;先写出一页项目说明&lt;a href=&quot;#先写出一页项目说明&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;明确目标任务、最终使用场景、学生模型、输入来源、输出用途、数量与预算。逐项核对素材权利、隐私处理、上游条款及输出使用限制；无法确认的渠道不应默认用于训练项目。&lt;/p&gt;&lt;p&gt;有些任务用检索、提示词或规则就能满足要求，未必需要训练。先建立基线，确认蒸馏能解决的具体问题，避免把数据数量当成项目效果。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;小样本先定标准&lt;a href=&quot;#小样本先定标准&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先做少量人工可完整检查的样本，明确输入输出结构和合格条件。比如客服分类应检查类别定义和困难样本；代码任务应运行隔离测试；结构化抽取应验证 Schema、事实来源和缺失字段处理。&lt;/p&gt;&lt;p&gt;不能仅凭模型自评“正确”入库。为常见错误建立标签，例如事实错误、格式错误、答非所问、信息不足却编造、敏感字段未处理。把失败原因反馈给任务设计，而不是只增加生成量。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;数据集至少保留哪些字段&lt;a href=&quot;#数据集至少保留哪些字段&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sample_id、任务类型、输入来源标识、生成模型与渠道&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;提示词版本、参数、生成时间、用量与费用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;校验结果、人工审核状态、淘汰原因、数据版本&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;上述是字段建议，不是声称本站提供现成标注平台。密钥不能进入样本；敏感原文和授权证据应独立受控管理，只给必要人员访问。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;去重、切分与污染检查&lt;a href=&quot;#去重切分与污染检查&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先按来源或业务实体划分训练、验证和测试，避免同一问题的轻微改写同时落入训练集和测试集。除了完全重复，还要检查近似重复和模板化回答；少量措辞变化不等于新知识。&lt;/p&gt;&lt;p&gt;测试集应在大规模生成前固定并控制访问。不要把测试答案再作为训练示例；涉及公开基准时，记录可能的数据重叠，谨慎解释成绩提升。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;验收看学生模型的结果&lt;a href=&quot;#验收看学生模型的结果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;交付数量、格式通过率、人工抽样结果、重复率和成本只是数据验收的一部分。项目效果还需在固定测试集上比较学生模型训练前后表现，记录训练设置和随机性；不能承诺生成某个数量就必然提升多少。&lt;/p&gt;&lt;p&gt;分批生产，每批设置质量门槛、费用上限和异常停止条件。保留可追溯版本，方便回滚有问题的批次。可参考 &lt;a href=&quot;/posts/token-cost-explained/&quot;&gt;成本计算&lt;/a&gt; 和 &lt;a href=&quot;/posts/model-evaluation/&quot;&gt;模型评测&lt;/a&gt;。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;如何沟通项目&lt;a href=&quot;#如何沟通项目&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;通过 &lt;a href=&quot;https://hikariapi.xyz/resources/distillation&quot; target=&quot;_blank&quot;&gt;蒸馏服务说明&lt;/a&gt; 了解对接入口，再按 &lt;a href=&quot;/guestbook/&quot;&gt;联系页面&lt;/a&gt; 提供任务、授权情况、输出结构、质量标准与预算。不要在首次公开咨询中上传整套私有数据；先确定保密、处理和交付边界，再提供最小必要样本。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>图片与视频 API 接入：创建、查询、结算与保存成品</title><link>https://blog.hikaripublic.xyz/posts/image-video-workflow/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/image-video-workflow/</guid><description>图片和视频不要套用同一套同步请求假设；视频任务需分别核对生成、结算和存储状态。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;想先体验图片生成，可以打开 &lt;a href=&quot;https://hikariimg.xyz/&quot; target=&quot;_blank&quot;&gt;HiKaRi 生图站&lt;/a&gt;；要集成到产品中，再按 &lt;a href=&quot;https://hikariapi.xyz/docs/images&quot; target=&quot;_blank&quot;&gt;图片文档&lt;/a&gt; 和 &lt;a href=&quot;https://hikariapi.xyz/docs/video&quot; target=&quot;_blank&quot;&gt;视频文档&lt;/a&gt; 对接。图形界面的操作成功，不代表所有 API 模型的参数都相同。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;图片：先确认输出形式&lt;a href=&quot;#图片先确认输出形式&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;选择模型后，逐项核对生成或编辑接口、支持尺寸、张数、输入格式和计费方式。不同模型可能有各自约束，尤其不能将一个模型的质量枚举直接复制到另一个模型。&lt;/p&gt;&lt;p&gt;返回结果可能是临时 URL 或编码内容，应依据真实响应解析。若要长期使用，及时将成品保存到自己的受控存储；不要假定返回链接永久有效。需要编辑原图时，只上传有权使用且适合交给相关服务处理的文件。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;视频：把提交和完成拆开&lt;a href=&quot;#视频把提交和完成拆开&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;阅读所选模型的专页，准备它接受的请求体。&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;POST /v1/videos&lt;/code&gt; 创建任务，按文档携带幂等键。&lt;/li&gt;
&lt;li&gt;保存返回的任务 ID，并用 &lt;code&gt;GET /v1/videos/{id}&lt;/code&gt; 查询进度。&lt;/li&gt;
&lt;li&gt;生成完成后继续检查结算与成品状态。&lt;/li&gt;
&lt;li&gt;使用带 Bearer 鉴权的 &lt;code&gt;GET /v1/videos/{id}/content&lt;/code&gt; 下载成品，保存到自有存储。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;提交示例不在本文硬编码某个模型和参数，以免误导不同视频渠道的接入。创建接口的兼容别名及具体请求字段以当前文档为准。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;三类状态分别看&lt;a href=&quot;#三类状态分别看&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;维度&lt;/th&gt;&lt;th&gt;文档中的状态示例&lt;/th&gt;&lt;th&gt;应用要做什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;生成&lt;/td&gt;&lt;td&gt;&lt;code&gt;queued&lt;/code&gt;、&lt;code&gt;in_progress&lt;/code&gt;、&lt;code&gt;completed&lt;/code&gt;、&lt;code&gt;failed&lt;/code&gt;&lt;/td&gt;&lt;td&gt;排队或处理中继续查询；失败保留错误信息&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;结算&lt;/td&gt;&lt;td&gt;&lt;code&gt;settled&lt;/code&gt;、&lt;code&gt;review_required&lt;/code&gt;&lt;/td&gt;&lt;td&gt;需要复核时不要把账单当成已最终确认&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;成品&lt;/td&gt;&lt;td&gt;&lt;code&gt;stored&lt;/code&gt;、&lt;code&gt;expired&lt;/code&gt;&lt;/td&gt;&lt;td&gt;确认可下载并在过期前保存，过期后不能假设还能恢复&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;文档提及默认视频有效期，但业务应始终以响应中的 &lt;code&gt;expires_at&lt;/code&gt; 为准，不能把固定 24 小时写成对所有任务的永久规则。已经完成的生成也可能因为文件过期而无法下载。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;查询与下载的工程细节&lt;a href=&quot;#查询与下载的工程细节&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;查询应有间隔、退避和总时限，避免每秒无上限轮询。将任务 ID 关联到实际用户订单，页面刷新后恢复查询，而不是重新提交生成。&lt;/p&gt;&lt;p&gt;&lt;code&gt;/content&lt;/code&gt; 需要 Bearer 鉴权，直接放进不带请求头的普通浏览器链接可能失败。应用后端应在验证用户权限后下载或转存，不要为方便展示把 API Key 拼到 URL、前端源码或日志中。&lt;/p&gt;&lt;p&gt;下载时检查 HTTP 状态与内容类型，避免把错误 JSON 保存为视频文件。网络断开时，先判断任务状态，再决定重试下载或查询；不要重复创建。相关原则见 &lt;a href=&quot;/posts/retry-and-idempotency/&quot;&gt;重试与幂等&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;上线前用少量任务走完整条链路：成功、失败、超时恢复、过期、结算待复核。按 &lt;a href=&quot;/posts/token-cost-explained/&quot;&gt;成本台账&lt;/a&gt; 同时记录任务规格与最终费用。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>如何评测模型与 API 渠道：用自己的任务建立验收表</title><link>https://blog.hikaripublic.xyz/posts/model-evaluation/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/model-evaluation/</guid><description>从固定样本、盲评、时延到每个合格结果的成本，建立可重复的小规模选型流程。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;一次回答漂亮，不能说明某个模型适合你的业务。公开榜单适合缩小范围，最终选型应使用自己的输入分布和验收标准。本文给出评测流程，没有虚构模型成绩或渠道跑分。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;先确定不能妥协的条件&lt;a href=&quot;#先确定不能妥协的条件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;列出协议、上下文、工具调用、结构化输出、媒体输入、响应时间和预算要求。精确到实际需要的能力，例如“输出能通过这份 JSON Schema”，比“支持 JSON”更容易验收。&lt;/p&gt;&lt;p&gt;查看 &lt;a href=&quot;https://hikariapi.xyz/resources/channels&quot; target=&quot;_blank&quot;&gt;渠道说明&lt;/a&gt;，确认模型身份、来源标签、权限与计费。客户端有某个开关，不代表所有渠道都支持该参数。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;用小样本覆盖真实困难&lt;a href=&quot;#用小样本覆盖真实困难&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;初次可以整理 30～50 条有代表性的样本，覆盖高频任务、长输入、歧义、缺失信息和必须拒答的边界。这个数量用于发现明显问题，不足以证明极低故障率；关键业务需要扩大样本并持续观察。&lt;/p&gt;&lt;p&gt;样本应来自你有权使用的数据，去掉身份信息与密钥。将调试集和最终验收集分开，避免不断修改提示词后只在同一批题目上取得好成绩。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;冻结变量并记录版本&lt;a href=&quot;#冻结变量并记录版本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;对同一轮测试，固定提示词、工具定义、输出约束与可共同支持的参数。记录模型 ID、渠道、日期、参数和客户端版本。不同协议无法完全对齐时，把差异写入结果，不要装作严格等价。&lt;/p&gt;&lt;p&gt;部分模型具有随机性，抽取一部分样本重复运行，观察一致性；不要只挑最好的一次。轮换测试顺序，减少特定时段网络负载造成的偏差。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一张可以直接使用的验收表&lt;a href=&quot;#一张可以直接使用的验收表&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;维度&lt;/th&gt;&lt;th&gt;如何判定&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;任务正确性&lt;/td&gt;&lt;td&gt;与参考答案、业务规则或人工评分标准比较&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;格式遵守&lt;/td&gt;&lt;td&gt;用解析器或 Schema 校验，记录是否能直接进入下游&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;工具调用&lt;/td&gt;&lt;td&gt;检查工具名、参数、执行顺序与最终结果&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;首段时延&lt;/td&gt;&lt;td&gt;从发起请求到第一个有效内容片段，区别于连接建立&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;总耗时&lt;/td&gt;&lt;td&gt;到最终输出或任务完成；报告中位数及高分位&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;稳定性&lt;/td&gt;&lt;td&gt;记录错误、超时、拒绝与重复执行，保留分母&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;成本&lt;/td&gt;&lt;td&gt;汇总全部尝试费用，再除以合格结果数量&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;能自动检查的先自动检查；主观质量去掉模型标签后交叉评分。若使用另一个模型评分，抽样人工复核，并记录评分模型的偏好与成本。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;如何写出可信结论&lt;a href=&quot;#如何写出可信结论&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;结论应写成“在这批任务、这组参数和这个时间段，A 的格式通过率更高”，并附样本数量。不要从 20 条样本推导“永不降智”或“99.99% 稳定”。输出风格、速度或某个冷知识的变化，也不能单独证明模型被替换。&lt;/p&gt;&lt;p&gt;上线时先用小流量，保留回退路径；扩容前再做受控并发测试，并与运营方确认并发和额度。团队沟通字段见 &lt;a href=&quot;/posts/team-onboarding-and-invoices/&quot;&gt;团队接入&lt;/a&gt;，成本口径见 &lt;a href=&quot;/posts/token-cost-explained/&quot;&gt;费用计算&lt;/a&gt;。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>用 Python 标准库完成第一次 HiKaRi API 调用</title><link>https://blog.hikaripublic.xyz/posts/python-first-api-call/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/python-first-api-call/</guid><description>无需安装 SDK，先查询 Key 可用模型，再向支持 Chat Completions 的分组发送最小请求。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;下面用 Python 3 标准库验证 OpenAI 兼容的 Chat Completions 接口。你需要一个有可用资金、绑定了相应分组的 HiKaRi Key，以及该分组支持的精确模型 ID。仅支持其他协议的模型不能直接套用这段请求体。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;先在本机设置环境变量&lt;a href=&quot;#先在本机设置环境变量&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Windows PowerShell：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$env:API_KEY&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;输入本站 API Key&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$env:MODEL_ID&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;输入模型广场中的精确模型 ID&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python first_call.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;macOS、Linux 或 Git Bash：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;API Key: &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;API_KEY&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;API_KEY&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;精确模型 ID: &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MODEL_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MODEL_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;first_call.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;示例中的交互输入用于本机验证。共享电脑或生产环境应使用自己的密钥管理方式；不要将 Key 写入 Git 仓库、前端代码或公开笔记。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;保存为 first_call.py&lt;a href=&quot;#保存为-first_callpy&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; urllib.error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; urllib.request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;base &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;https://hikariapi.xyz&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;key &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.environ[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;API_KEY&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;strip&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.environ[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;MODEL_ID&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;strip&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; key}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; payload &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers[&lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; json.&lt;/span&gt;&lt;span&gt;dumps&lt;/span&gt;&lt;span&gt;(payload).&lt;/span&gt;&lt;span&gt;encode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;req &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; urllib.request.&lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(base &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; path, &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;data, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;headers)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;&lt;span&gt; urllib.request.&lt;/span&gt;&lt;span&gt;urlopen&lt;/span&gt;&lt;span&gt;(req, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;120&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; response:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; json.&lt;/span&gt;&lt;span&gt;load&lt;/span&gt;&lt;span&gt;(response)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;catalog &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/v1/models&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ids &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [item[&lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; catalog[&lt;/span&gt;&lt;span&gt;&quot;data&quot;&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; model &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; ids:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SystemExit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;模型不在此 Key 的目录中，请先核对分组与精确名称。&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/v1/chat/completions&quot;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;model&quot;&lt;/span&gt;&lt;span&gt;: model,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;messages&quot;&lt;/span&gt;&lt;span&gt;: [{&lt;/span&gt;&lt;span&gt;&quot;role&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;只回复 OK&quot;&lt;/span&gt;&lt;span&gt;}],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;stream&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(result[&lt;/span&gt;&lt;span&gt;&quot;choices&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;message&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;usage:&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, json.&lt;/span&gt;&lt;span&gt;dumps&lt;/span&gt;&lt;span&gt;(result.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;usage&quot;&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;ensure_ascii&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;except&lt;/span&gt;&lt;span&gt; urllib.error.HTTPError &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; error:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;HTTP 状态：&quot;&lt;/span&gt;&lt;span&gt;, error.code)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;响应内容请在本机查看，分享前移除凭据和私人数据：&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;&lt;span&gt;(error.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;decode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;errors&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;replace&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SystemExit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;except&lt;/span&gt;&lt;span&gt; urllib.error.URLError &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; error:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SystemExit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;网络请求失败；检查本机 DNS、代理、网络，并核对用量后决定是否重发。&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;如何判断成功&lt;a href=&quot;#如何判断成功&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先确认目录请求成功，再看生成结果和主站用量记录。输出未必严格等于 &lt;code&gt;OK&lt;/code&gt;；自然语言遵循程度不是网络连通性的唯一判据。模型返回高级内容块或拒绝信息时，也要检查对应协议说明。&lt;/p&gt;&lt;p&gt;&lt;code&gt;usage&lt;/code&gt; 是接口报告的用量，不应只用回答字数推测成本。完整账单还需核对实际分组、计费模型及倍率。&lt;/p&gt;&lt;p&gt;这段程序不自动重试生成请求：网络超时不证明服务端没有处理。排错见 &lt;a href=&quot;/posts/api-errors-401-429/&quot;&gt;HTTP 状态码&lt;/a&gt;，后续接入见 &lt;a href=&quot;/posts/client-setup-checklist/&quot;&gt;客户端检查清单&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;参考：&lt;a href=&quot;https://hikariapi.xyz/docs/text-api&quot; target=&quot;_blank&quot;&gt;本站文字 API&lt;/a&gt;、&lt;a href=&quot;https://docs.python.org/3/library/urllib.request.html&quot; target=&quot;_blank&quot;&gt;Python urllib.request&lt;/a&gt;。代码依据协议编写；本文没有使用客户 Key 或发起付费模型调用。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>API 超时后能直接重试吗？先分清失败与结果未知</title><link>https://blog.hikaripublic.xyz/posts/retry-and-idempotency/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/retry-and-idempotency/</guid><description>区分连接失败、处理中断和业务失败；视频创建复用同一幂等键，避免重复任务与费用。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;客户端超时只表示它没有在期限内拿到完整结果。请求可能尚未送达，也可能已经被接收、生成甚至结算。对会创建任务或产生费用的请求，“看不到结果”应先进入结果未知状态。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;按操作决定处理方法&lt;a href=&quot;#按操作决定处理方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作或现象&lt;/th&gt;&lt;th&gt;建议&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;查询模型、查询已知任务 ID&lt;/td&gt;&lt;td&gt;可以有限重试，遵循限流并设置总时限&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;401、403、参数校验失败&lt;/td&gt;&lt;td&gt;修正配置或权限；重复原请求通常无效&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;429&lt;/td&gt;&lt;td&gt;检查余额、并发与错误正文；按实际规则退避&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;创建任务后连接断开&lt;/td&gt;&lt;td&gt;先查业务记录、任务 ID 和用量，避免直接创建第二个任务&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;流式输出已经收到一部分&lt;/td&gt;&lt;td&gt;保存已接收部分和请求 ID；重新生成属于新的尝试&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;对允许重试的操作，可使用带随机抖动的指数退避，同时限制次数、单次超时和总体时间。若服务端提供有效的 &lt;code&gt;Retry-After&lt;/code&gt;，按其指示等待。不要让 SDK、代理、队列消费者三层各自重试，导致次数相乘。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;HiKaRi 视频创建的幂等规则&lt;a href=&quot;#hikari-视频创建的幂等规则&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;依据 &lt;a href=&quot;https://hikariapi.xyz/docs/video&quot; target=&quot;_blank&quot;&gt;视频文档&lt;/a&gt;，创建视频使用 &lt;code&gt;POST /v1/videos&lt;/code&gt;，也提供 &lt;code&gt;/v1/videos/generations&lt;/code&gt; 兼容入口。对同一个业务动作，在第一次提交前生成并持久化 &lt;code&gt;Idempotency-Key&lt;/code&gt;，它应是 1～128 个 ASCII 字符。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;业务 ID → 幂等键 → 提交请求 → 保存任务 ID → 查询任务 → 保存成品&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;例如使用 Python 的 &lt;code&gt;uuid.uuid4().hex&lt;/code&gt; 生成键。&lt;strong&gt;相同业务、相同请求体、相同 Key 凭据的安全重发使用同一幂等键&lt;/strong&gt;；不要每次网络重试生成新键。修改模型、提示词等请求内容应视作新的业务版本，不能强行复用旧键。&lt;/p&gt;&lt;p&gt;请求头示意：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Authorization&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Bearer &amp;lt;你的 API Key&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Content-Type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;application/json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Idempotency-Key&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;已持久化的本次业务幂等键&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这里描述的是视频文档明确提供的规则，不意味着文字、图片或所有第三方接口都自动支持相同幂等行为。幂等有效范围与冲突响应以实际文档和接口为准，不承诺永久去重。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;任务队列怎么存状态&lt;a href=&quot;#任务队列怎么存状态&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在业务库中为一次用户动作建立唯一记录，保存请求摘要、幂等键、任务 ID、最近一次查询时间和最终状态。消费者重启后从这条记录恢复，先查后续进度。&lt;/p&gt;&lt;p&gt;若提交后未拿到任务 ID，保留“结果未知”，使用同一幂等规则核对，不直接宣告失败并自动另起任务。长时间无法确定时携带脱敏记录联系支持。&lt;/p&gt;&lt;p&gt;媒体生成完成、结算确认和成品存储是不同状态，详见 &lt;a href=&quot;/posts/image-video-workflow/&quot;&gt;图片与视频流程&lt;/a&gt;。短期重试不能代替业务对账；最终应核对已创建任务与费用，排除重复执行。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>流式输出不逐字显示？检查 SSE、缓冲和事件解析</title><link>https://blog.hikaripublic.xyz/posts/streaming-and-sse/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/streaming-and-sse/</guid><description>区分首包等待、服务端事件、代理缓冲和前端渲染，避免把整个流当成单个 JSON。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;开启 &lt;code&gt;stream&lt;/code&gt; 后，响应通常是连续到达的事件，而不是一次性返回的完整 JSON。请求成功但全部文字最后一起出现，需要沿“上游生成 → 代理转发 → 客户端读取 → UI 渲染”逐段检查。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;先分清两个时间&lt;a href=&quot;#先分清两个时间&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;首个有效输出时间&lt;/strong&gt;反映用户什么时候开始看到内容；&lt;strong&gt;总完成时间&lt;/strong&gt;反映整次请求多久结束。有的模型先进行内部推理，开始输出较晚；这和代理把已生成内容攒住再发不是同一个问题。&lt;/p&gt;&lt;p&gt;不要只看平均总耗时。比较相同任务时，记录首次有效输出、完成时间、输出数量和失败比例，才有可比性。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;检查协议与解析方式&lt;a href=&quot;#检查协议与解析方式&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;请求体确认使用了目标接口支持的 &lt;code&gt;stream: true&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;读取响应的 Content-Type 和实际事件；不要对整个 SSE 响应直接执行 &lt;code&gt;response.json()&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;使用对应协议的事件解析器。Chat、Responses 和 Messages 的事件类型不能混用。&lt;/li&gt;
&lt;li&gt;网络数据块不等于事件边界，也不等于一个字或一个完整 Token。解析器需要缓冲未完成的行与事件。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;用 curl 排查时可加 &lt;code&gt;-N&lt;/code&gt; 关闭本地输出缓冲，并保持其他参数与原请求一致。Bash 例子：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-N&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--fail-with-body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://hikariapi.xyz/v1/chat/completions&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &lt;/span&gt;&lt;span&gt;$API_KEY&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;{&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;$MODEL_ID&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;:[{&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;role&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;用三句话说明什么是 API&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;}],&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;stream&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;:true}&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;先在本机设置本站 Key 和支持该协议的精确模型 ID。该例子用于连通性检查，不保证所有模型产生相同分块节奏。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;curl 正常而网页集中出现&lt;a href=&quot;#curl-正常而网页集中出现&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;检查自建反代是否开启响应缓冲、应用是否先读完整个响应才返回，以及前端是否只在结束事件后更新状态。把流先转成完整字符串，再展示给页面，自然不会逐段显示。&lt;/p&gt;&lt;p&gt;如果只在某个网络环境发生，继续比较代理、VPN、网关和远程开发环境。不要直接调整主站配置，先定位自己能控制的那一层。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;流中断怎么办&lt;a href=&quot;#流中断怎么办&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;记录最后收到的事件和错误，并核对主站用量。已经生成一部分内容的请求，不能把中断简单当作“完全没有执行”。涉及工具动作的应用还需要按业务 ID 防止重复执行。&lt;/p&gt;&lt;p&gt;参考：&lt;a href=&quot;https://hikariapi.xyz/docs/text-api&quot; target=&quot;_blank&quot;&gt;HiKaRi 文字 API 的流式说明&lt;/a&gt;。后续阅读：&lt;a href=&quot;/posts/retry-and-idempotency/&quot;&gt;重试与幂等&lt;/a&gt;。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>团队接入与开票：开始前把技术、费用和交付边界讲清楚</title><link>https://blog.hikaripublic.xyz/posts/team-onboarding-and-invoices/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/team-onboarding-and-invoices/</guid><description>团队采购的需求清单、Key 隔离、验收步骤和开票沟通字段，帮助从个人试用过渡到正式项目。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HiKaRi 可对接团队使用与开票需求。团队采购前，应先确认技术可行性、费用口径和交付边界，再扩大预算。具体套餐、额度、发票项目、税务信息与服务约定通过主站沟通确认，本文不代替合同或订单。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;一次说明白的需求清单&lt;a href=&quot;#一次说明白的需求清单&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;事项&lt;/th&gt;&lt;th&gt;建议提供的信息&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;业务场景&lt;/td&gt;&lt;td&gt;内部助手、开发工具、媒体生成或授权研究任务&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型与协议&lt;/td&gt;&lt;td&gt;需要的精确型号、Chat / Responses / Messages 等协议&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;流量&lt;/td&gt;&lt;td&gt;预计日用量、峰值并发、输入输出长度、上线时间&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;功能&lt;/td&gt;&lt;td&gt;工具、结构化输出、长上下文、图片或视频等必要能力&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;预算&lt;/td&gt;&lt;td&gt;试用预算、月度预算、预算告警和停止条件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;对账与开票&lt;/td&gt;&lt;td&gt;采购主体、对账周期、发票需求与接收方式&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;数据要求&lt;/td&gt;&lt;td&gt;数据类别、处理限制、日志及保留要求&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;用量不确定时，先给范围并安排小样本试用。不要将“支持主流模型”解释成所有型号、全部参数和任意并发均已向每个 Key 开放。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Key 与环境隔离&lt;a href=&quot;#key-与环境隔离&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;开发、测试、生产使用独立密钥，按项目和责任人分配，禁止多人共享个人 Key。预算和权限能力以实际控制台为准，不能假设任何管理功能已默认开启。&lt;/p&gt;&lt;p&gt;密钥只放后端或受控的秘密管理服务；人员变更及时轮换。日志保留请求 ID、模型、状态和用量即可定位大部分问题，不应默认收集完整敏感输入。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;先验收，再迁移&lt;a href=&quot;#先验收再迁移&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先完成一条真实工作流，验证必需参数、格式、错误恢复与账单。然后做受控小流量迁移，再按双方确认的额度扩容。质量验收表可参照 &lt;a href=&quot;/posts/model-evaluation/&quot;&gt;模型评测&lt;/a&gt;，超时恢复参照 &lt;a href=&quot;/posts/retry-and-idempotency/&quot;&gt;重试与幂等&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;保留配置版本和回退路径。如果有特定响应时间、保障窗口或专属资源要求，应在采购前书面确认，不能从博客宣传推导出 SLA。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;开票前核对哪些信息&lt;a href=&quot;#开票前核对哪些信息&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先通过 &lt;a href=&quot;https://hikariapi.xyz/resources/invoicing&quot; target=&quot;_blank&quot;&gt;开票说明&lt;/a&gt; 和站内实际流程核对可开票订单及金额，再按要求提供抬头、税号、发票类型和接收信息。公司财务可能另有项目名称或合同要求，应提前沟通；不要把税号、个人地址或订单凭证发到公开群聊。&lt;/p&gt;&lt;p&gt;未核实前不要假设任何充值都能按同一种发票类型、时限和项目开具。退款、折扣、已开票订单等特殊情形以双方确认及实际规则为准。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;现在可以从哪里开始&lt;a href=&quot;#现在可以从哪里开始&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;阅读 &lt;a href=&quot;https://hikariapi.xyz/resources/teams&quot; target=&quot;_blank&quot;&gt;团队对接说明&lt;/a&gt;，到 &lt;a href=&quot;https://hikariapi.xyz/?utm_source=hikari_blog&amp;amp;utm_medium=referral&amp;amp;utm_campaign=teams&amp;amp;utm_content=team-guide&quot; target=&quot;_blank&quot;&gt;HiKaRi 主站&lt;/a&gt; 核对服务并发起沟通。通知与交流 QQ 群为 &lt;strong&gt;1107270061&lt;/strong&gt;；进群先说明需求类别，涉及采购资料请与经核实的运营人员私下对接，不在群中公开敏感信息。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>AI API 成本怎么算：Token、缓存、图片与视频分开核对</title><link>https://blog.hikaripublic.xyz/posts/token-cost-explained/</link><guid isPermaLink="true">https://blog.hikaripublic.xyz/posts/token-cost-explained/</guid><description>用一份明确标注假设的账单例子，区分输入、输出、缓存和媒体任务费用，避免只比较模型标价。</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;选择 API 时，先比较完成同一件事花多少钱。每百万 Token 的价格只是其中一项；输出长度、失败重做、缓存命中和质量验收都会影响最终成本。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;先确认计费口径&lt;a href=&quot;#先确认计费口径&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;文字调用通常需要分别核对输入、输出及缓存相关字段。不同渠道对缓存读取、缓存写入的展示与收费方式可能不同，不能把所有缓存 Token 都当成免费，也不能把已经包含在输入总量中的 Token 重复计算。&lt;/p&gt;&lt;p&gt;在 &lt;a href=&quot;https://hikariapi.xyz/resources/pricing&quot; target=&quot;_blank&quot;&gt;主站价格说明&lt;/a&gt; 和 &lt;a href=&quot;https://hikariapi.xyz/docs/billing&quot; target=&quot;_blank&quot;&gt;计费文档&lt;/a&gt; 中确认：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;使用的是哪个分组、渠道、精确模型与计费模型。&lt;/li&gt;
&lt;li&gt;单位是元、账户余额单位还是其他单位，是否存在分组倍率。&lt;/li&gt;
&lt;li&gt;输入、输出、缓存分别如何计价，用量字段之间是否存在包含关系。&lt;/li&gt;
&lt;li&gt;图片按张还是按 Token，视频按任务还是按秒，哪些参数改变价格。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一次文字调用的假设例子&lt;a href=&quot;#一次文字调用的假设例子&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;以下数字只演示计算，不是 HiKaRi 报价。&lt;/strong&gt; 假设输入单价为每百万 Token 2 元，输出为每百万 Token 8 元；本次没有缓存，输入 10,000 Token，输出 2,000 Token，没有额外倍率。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;输入费用 = 10,000 ÷ 1,000,000 × 2 = 0.020 元&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;输出费用 =  2,000 ÷ 1,000,000 × 8 = 0.016 元&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;本次合计 = 0.036 元&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;若 1,000 次调用完全相同，理论合计为 36 元。实际任务长度不一，应从用量记录汇总，不能拿一条短提示词的费用直接代表整批数据。&lt;/p&gt;&lt;p&gt;有缓存时，先按渠道文档拆出可计费部分，再套入相应单价。长对话反复携带历史消息会增加输入；工具返回的内容也可能进入后续上下文。中文字数与 Token 数没有固定换算比例。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;衡量“每个合格结果”的费用&lt;a href=&quot;#衡量每个合格结果的费用&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;假设方案 A 每次 0.02 元，100 次中 70 次通过；方案 B 每次 0.03 元，100 次中 95 次通过。未计人工复核时：&lt;/p&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;假设方案&lt;/th&gt;&lt;th&gt;总调用费&lt;/th&gt;&lt;th&gt;合格结果&lt;/th&gt;&lt;th&gt;每个合格结果费用&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;A&lt;/td&gt;&lt;td&gt;2 元&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;td&gt;约 0.0286 元&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;B&lt;/td&gt;&lt;td&gt;3 元&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;约 0.0316 元&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;A 在这组假设里仍便宜，但差距已经缩小。再加入人工改写时间，结论可能变化。评估方法见 &lt;a href=&quot;/posts/model-evaluation/&quot;&gt;模型与渠道评测&lt;/a&gt;。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;图片与视频另建账目&lt;a href=&quot;#图片与视频另建账目&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;图片记录尺寸、质量、数量和编辑输入；视频记录时长、分辨率、是否带音频以及实际结算状态。不要仅看任务进入 &lt;code&gt;completed&lt;/code&gt; 就认定所有计费和存储步骤都结束。&lt;/p&gt;&lt;p&gt;媒体任务的提交、查询与下载要分开记录。网络异常后重复创建任务，可能带来第二笔费用，参见 &lt;a href=&quot;/posts/retry-and-idempotency/&quot;&gt;重试与幂等&lt;/a&gt; 和 &lt;a href=&quot;/posts/image-video-workflow/&quot;&gt;媒体任务流程&lt;/a&gt;。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;最低限度的成本台账&lt;a href=&quot;#最低限度的成本台账&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;每条业务记录保存时间、内部业务 ID、请求或任务 ID、模型、渠道、用量、结算金额、成功状态、人工验收结果。不要把完整提示词和用户隐私默认写入通用日志。&lt;/p&gt;&lt;p&gt;先跑小样本，估算平均值与高分位费用，给批任务设预算和停止条件。发现异常长输出、重复任务或渠道切换时及时复核；博客不维护另一份可能过期的实时价格表。&lt;/p&gt;&lt;/section&gt;</content:encoded></item></channel></rss>