<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ChatGPT on 拾光集</title>
        <link>https://www.tood.win/tags/chatgpt/</link>
        <description>Recent content in ChatGPT on 拾光集</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Fri, 24 Jul 2026 22:30:00 +0800</lastBuildDate><atom:link href="https://www.tood.win/tags/chatgpt/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>国内信用卡订阅 ChatGPT、Gemini、Grok：安卓端完整操作指南</title>
            <link>https://www.tood.win/posts/%E5%9B%BD%E5%86%85%E4%BF%A1%E7%94%A8%E5%8D%A1%E8%AE%A2%E9%98%85-chatgpt-gemini-grok-%E5%AE%89%E5%8D%93%E7%AB%AF%E5%AE%8C%E6%95%B4%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97/</link>
            <pubDate>Fri, 24 Jul 2026 22:30:00 +0800</pubDate>
            <guid>https://www.tood.win/posts/%E5%9B%BD%E5%86%85%E4%BF%A1%E7%94%A8%E5%8D%A1%E8%AE%A2%E9%98%85-chatgpt-gemini-grok-%E5%AE%89%E5%8D%93%E7%AB%AF%E5%AE%8C%E6%95%B4%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97/</guid>
            <description>&lt;p&gt;在订阅 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/chatgpt/&#34; &gt;ChatGPT&lt;/a&gt; Plus、&lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/google/&#34; &gt;Google&lt;/a&gt; Gemini、Grok 等海外 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/ai/&#34; &gt;AI&lt;/a&gt; 服务时，很多国内用户都会遇到同一个问题：&lt;/p&gt;&#xA;&lt;p&gt;明明手里有 Visa 或 Mastercard 信用卡，但在官网付款时仍然被拒绝；使用虚拟卡又要承担开卡费、充值费、汇率差价和平台稳定性等问题。&lt;/p&gt;&#xA;&lt;p&gt;经过实际尝试后，我更倾向于优先使用官方应用商店提供的应用内订阅渠道。&lt;/p&gt;&#xA;&lt;p&gt;对于安卓用户来说，可以尝试通过 Google Play 完成付款。整个过程不需要将银行卡交给第三方代充平台，订阅和续费也可以直接在 Google Play 中管理。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;QQ20260724-223558&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://www.tood.win/uploads/2026/07/QQ20260724-223558-2cb2d2ba.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;不过需要提前说明：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;能否成功绑定，取决于银行卡、发卡银行、Google 账号地区和商户风控。&lt;/li&gt;&#xA;&lt;li&gt;Google Play 显示的价格可能包含税费或汇率换算。&lt;/li&gt;&#xA;&lt;li&gt;不同地区的订阅价格可能不同。&lt;/li&gt;&#xA;&lt;li&gt;账单信息应与银行卡和实际使用情况保持一致。&lt;/li&gt;&#xA;&lt;li&gt;本文不能保证所有国内信用卡都能成功付款。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;下面我以安卓手机为例，整理一套相对完整的操作流程。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;一先了解基本原理&#34;&gt;一、先了解基本原理&#xA;&lt;/h2&gt;&lt;p&gt;部分海外 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/ai/&#34; &gt;AI&lt;/a&gt; 服务的官网支付会使用 Stripe 等国际支付渠道。&lt;/p&gt;&#xA;&lt;p&gt;即使银行卡本身支持 Visa 或 Mastercard，付款仍有可能因为以下原因被拒绝：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;发卡地区不受商户支持&lt;/li&gt;&#xA;&lt;li&gt;银行关闭了境外线上支付&lt;/li&gt;&#xA;&lt;li&gt;商户不接受当前卡段&lt;/li&gt;&#xA;&lt;li&gt;账单地址不一致&lt;/li&gt;&#xA;&lt;li&gt;IP 地址、账号地区和银行卡地区冲突&lt;/li&gt;&#xA;&lt;li&gt;触发平台的支付风控&lt;/li&gt;&#xA;&lt;li&gt;不支持 3D Secure 验证&lt;/li&gt;&#xA;&lt;li&gt;银行拦截了自动续费交易&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;而在安卓客户端中，一些 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/ai/&#34; &gt;AI&lt;/a&gt; 应用支持 Google Play 应用内订阅。&lt;/p&gt;&#xA;&lt;p&gt;此时，实际支付流程通常是：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AI 应用发起订阅&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play 显示订阅价格&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;用户通过 Google Play 付款&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play 将订阅状态同步给应用&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;也就是说，银行卡主要绑定在 Google Play 付款资料中，而不是直接绑定到 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/chatgpt/&#34; &gt;ChatGPT&lt;/a&gt;、Gemini 或 Grok 的官网账户。&lt;/p&gt;&#xA;&lt;p&gt;这种方式的优势是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;通过官方应用商店付款&lt;/li&gt;&#xA;&lt;li&gt;不需要使用来历不明的代充平台&lt;/li&gt;&#xA;&lt;li&gt;可以在 Google Play 中统一管理订阅&lt;/li&gt;&#xA;&lt;li&gt;可以直接查看续费日期&lt;/li&gt;&#xA;&lt;li&gt;可以随时取消自动续费&lt;/li&gt;&#xA;&lt;li&gt;退款和订单记录相对清晰&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;但最终能否成功，仍取决于 Google Play、发卡银行和应用本身的地区政策。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;二准备一张支持境外支付的信用卡&#34;&gt;二、准备一张支持境外支付的信用卡&#xA;&lt;/h2&gt;&lt;p&gt;我更建议使用带有以下标识的信用卡：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Visa&lt;/li&gt;&#xA;&lt;li&gt;Mastercard&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;部分全币种信用卡或双币信用卡也可以尝试。&lt;/p&gt;&#xA;&lt;p&gt;在操作之前，应先通过银行 App 或联系银行客服确认以下功能已经开启：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;境外线上支付&lt;/li&gt;&#xA;&lt;li&gt;无卡支付&lt;/li&gt;&#xA;&lt;li&gt;外币交易&lt;/li&gt;&#xA;&lt;li&gt;自动续费&lt;/li&gt;&#xA;&lt;li&gt;3D Secure 验证&lt;/li&gt;&#xA;&lt;li&gt;小额境外交易&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;有些信用卡虽然印有 Visa 或 Mastercard 标识，但默认关闭了境外线上交易，因此绑定或扣款时仍可能失败。&lt;/p&gt;&#xA;&lt;p&gt;另外还要注意卡片额度。部分平台在绑卡时可能产生一笔很小的预授权验证，之后再自动撤销。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;三准备安卓手机和-google-play&#34;&gt;三、准备安卓手机和 Google Play&#xA;&lt;/h2&gt;&lt;h3 id=&#34;1-确认手机支持-google-服务&#34;&gt;1. 确认手机支持 Google 服务&#xA;&lt;/h3&gt;&lt;p&gt;打开手机设置，搜索：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;查看是否存在以下功能：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Google 基础服务&lt;/li&gt;&#xA;&lt;li&gt;Google Play 服务&lt;/li&gt;&#xA;&lt;li&gt;Google Play 商店&lt;/li&gt;&#xA;&lt;li&gt;Google 服务框架&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;部分国产安卓手机虽然没有预装 Google Play，但系统中可能保留了 Google 基础服务开关。&lt;/p&gt;&#xA;&lt;p&gt;不同品牌手机的菜单名称可能不同，常见位置包括：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;设置&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 账号与同步&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ Google 基础服务&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;或者：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;设置&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 应用设置&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ Google 服务&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;如果手机完全不支持 Google 移动服务，可能需要使用其他支持 Google Play 的安卓设备。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;2-安装或更新-google-play-商店&#34;&gt;2. 安装或更新 Google Play 商店&#xA;&lt;/h3&gt;&lt;p&gt;可以先在手机自带的应用商店中搜索：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play 商店&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;同时确认以下组件已经更新：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Google Play 商店&lt;/li&gt;&#xA;&lt;li&gt;Google Play 服务&lt;/li&gt;&#xA;&lt;li&gt;Chrome 浏览器&lt;/li&gt;&#xA;&lt;li&gt;Android System WebView&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;如果这些组件版本过旧，可能出现登录失败、付款页面无法打开或订阅窗口闪退等问题。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;3-保持网络环境稳定&#34;&gt;3. 保持网络环境稳定&#xA;&lt;/h3&gt;&lt;p&gt;Google Play 对账号登录、设备环境和付款行为都有风控检测。&lt;/p&gt;&#xA;&lt;p&gt;操作过程中应尽量保持网络稳定，不要频繁切换：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;国家或地区&lt;/li&gt;&#xA;&lt;li&gt;IP 地址&lt;/li&gt;&#xA;&lt;li&gt;设备&lt;/li&gt;&#xA;&lt;li&gt;Google 账号&lt;/li&gt;&#xA;&lt;li&gt;付款资料&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;频繁切换环境可能导致：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;无法添加付款方式&lt;/li&gt;&#xA;&lt;li&gt;Google Play 国家或地区异常&lt;/li&gt;&#xA;&lt;li&gt;付款被拒绝&lt;/li&gt;&#xA;&lt;li&gt;要求重新验证身份&lt;/li&gt;&#xA;&lt;li&gt;账号触发临时保护&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;我更建议使用自己长期稳定使用的网络和 Google 账号进行操作。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;四登录或注册-google-账号&#34;&gt;四、登录或注册 Google 账号&#xA;&lt;/h2&gt;&lt;p&gt;打开 Google Play 商店，登录自己的 Google 账号。&lt;/p&gt;&#xA;&lt;p&gt;建议使用长期正常使用的个人账号，而不是刚刚注册、购买或来源不明的账号。&lt;/p&gt;&#xA;&lt;p&gt;新注册账号如果立刻进行以下操作，可能更容易触发风控：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;修改账号地区&lt;/li&gt;&#xA;&lt;li&gt;添加境外信用卡&lt;/li&gt;&#xA;&lt;li&gt;高频下载应用&lt;/li&gt;&#xA;&lt;li&gt;立即购买高价值订阅&lt;/li&gt;&#xA;&lt;li&gt;短时间内更换多个设备&lt;/li&gt;&#xA;&lt;li&gt;频繁切换网络位置&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;因此，账号最好已经有一段正常使用记录。&lt;/p&gt;&#xA;&lt;p&gt;不建议购买所谓的“成品谷歌账号”，原因包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;原注册人可能找回账号&lt;/li&gt;&#xA;&lt;li&gt;恢复邮箱和手机号不属于自己&lt;/li&gt;&#xA;&lt;li&gt;账号可能曾被多人登录&lt;/li&gt;&#xA;&lt;li&gt;可能存在历史违规记录&lt;/li&gt;&#xA;&lt;li&gt;付款信息和身份信息不一致&lt;/li&gt;&#xA;&lt;li&gt;订阅后仍可能触发安全审查&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;五开启-google-账号两步验证&#34;&gt;五、开启 Google 账号两步验证&#xA;&lt;/h2&gt;&lt;p&gt;在添加银行卡和购买订阅之前，我建议先开启两步验证。&lt;/p&gt;&#xA;&lt;p&gt;操作路径大致如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play 商店&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 点击右上角头像&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 管理你的 Google 账号&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 安全性&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 两步验证&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;可以选择以下验证方式：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Google 提示&lt;/li&gt;&#xA;&lt;li&gt;手机短信&lt;/li&gt;&#xA;&lt;li&gt;身份验证器&lt;/li&gt;&#xA;&lt;li&gt;安全密钥&lt;/li&gt;&#xA;&lt;li&gt;备用验证码&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;我通常会同时保留两种验证方式，避免手机丢失后无法登录账号。&lt;/p&gt;&#xA;&lt;h3 id=&#34;使用身份验证器&#34;&gt;使用身份验证器&#xA;&lt;/h3&gt;&lt;p&gt;可以使用：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Google Authenticator&lt;/li&gt;&#xA;&lt;li&gt;Microsoft Authenticator&lt;/li&gt;&#xA;&lt;li&gt;其他兼容 TOTP 的验证器&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;绑定时，系统通常会显示二维码或密钥。&lt;/p&gt;&#xA;&lt;p&gt;添加完成后，身份验证器会每隔一段时间生成一个新的六位验证码。输入当前验证码，即可完成绑定。&lt;/p&gt;&#xA;&lt;p&gt;同时建议保存备用验证码，并放在安全的位置。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;六在-google-play-中添加信用卡&#34;&gt;六、在 Google Play 中添加信用卡&#xA;&lt;/h2&gt;&lt;p&gt;可以在 Google Play 中进入付款设置。&lt;/p&gt;&#xA;&lt;p&gt;操作路径通常为：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play 商店&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 点击右上角头像&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 付款和订阅&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 付款方式&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;如果应用内页面无法完成添加，可以继续点击：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;更多付款设置&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;系统通常会调用 Chrome 浏览器，打开 Google 付款中心。&lt;/p&gt;&#xA;&lt;p&gt;也可以直接进入 Google 付款中心：&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://payments.google.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;打开 Google 付款中心&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;填写银行卡信息&#34;&gt;填写银行卡信息&#xA;&lt;/h3&gt;&lt;p&gt;根据页面提示填写：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;信用卡卡号&lt;/li&gt;&#xA;&lt;li&gt;到期时间&lt;/li&gt;&#xA;&lt;li&gt;CVC 或 CVV 安全码&lt;/li&gt;&#xA;&lt;li&gt;持卡人姓名&lt;/li&gt;&#xA;&lt;li&gt;账单地址&lt;/li&gt;&#xA;&lt;li&gt;邮政编码&lt;/li&gt;&#xA;&lt;li&gt;联系电话&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;其中，账单地址建议填写与银行记录相符的真实地址。&lt;/p&gt;&#xA;&lt;p&gt;不要为了改变订阅地区而随意填写陌生住宅、酒店、商场或地图上找到的地址。&lt;/p&gt;&#xA;&lt;p&gt;虚构账单地址可能造成：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;银行地址验证失败&lt;/li&gt;&#xA;&lt;li&gt;Google 付款资料被暂停&lt;/li&gt;&#xA;&lt;li&gt;订阅订单被取消&lt;/li&gt;&#xA;&lt;li&gt;后续付款持续失败&lt;/li&gt;&#xA;&lt;li&gt;要求提交身份或地址证明&lt;/li&gt;&#xA;&lt;li&gt;Google 账号受到限制&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;如果页面不接受当前国家或地区的付款信息，说明该付款资料或订阅渠道可能暂时不支持当前地区。此时应更换官方支持的付款方式，而不是通过虚构信息绕过限制。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;七添加信用卡失败怎么办&#34;&gt;七、添加信用卡失败怎么办？&#xA;&lt;/h2&gt;&lt;p&gt;国内信用卡绑定 Google Play 失败并不少见。&lt;/p&gt;&#xA;&lt;p&gt;可以依次检查以下项目。&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-确认银行卡支持境外线上交易&#34;&gt;1. 确认银行卡支持境外线上交易&#xA;&lt;/h3&gt;&lt;p&gt;通过银行 App 查看银行卡设置，确认已经开启：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;境外交易&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;线上支付&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;无卡支付&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;外币支付&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;自动续费&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;部分银行还需要单独开启安全锁或调整境外支付限额。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;2-确认卡片余额和额度&#34;&gt;2. 确认卡片余额和额度&#xA;&lt;/h3&gt;&lt;p&gt;即使是订阅付款，也可能先进行小额预授权。&lt;/p&gt;&#xA;&lt;p&gt;因此，信用卡需要保留一定可用额度。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;3-检查姓名和账单信息&#34;&gt;3. 检查姓名和账单信息&#xA;&lt;/h3&gt;&lt;p&gt;持卡人姓名应尽量与银行系统记录一致。&lt;/p&gt;&#xA;&lt;p&gt;英文姓名通常可以按照信用卡卡面或银行账单中的拼写填写。&lt;/p&gt;&#xA;&lt;p&gt;不要频繁更改：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;姓名&lt;/li&gt;&#xA;&lt;li&gt;国家&lt;/li&gt;&#xA;&lt;li&gt;地址&lt;/li&gt;&#xA;&lt;li&gt;邮政编码&lt;/li&gt;&#xA;&lt;li&gt;电话号码&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;4-联系发卡银行&#34;&gt;4. 联系发卡银行&#xA;&lt;/h3&gt;&lt;p&gt;如果 Google Play 只显示“付款方式被拒绝”，可以联系银行客服查询是否存在被拦截的境外交易。&lt;/p&gt;&#xA;&lt;p&gt;向银行说明这是：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play 境外线上订阅付款&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;让客服确认是否被风控系统拒绝。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;5-不要连续重复提交&#34;&gt;5. 不要连续重复提交&#xA;&lt;/h3&gt;&lt;p&gt;短时间内多次添加同一张银行卡，可能触发 Google 的支付风控。&lt;/p&gt;&#xA;&lt;p&gt;如果连续失败，建议先停止操作，检查原因后再重新尝试，而不是不断点击提交。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;八通过-google-play-订阅-ai-服务&#34;&gt;八、通过 Google Play 订阅 AI 服务&#xA;&lt;/h2&gt;&lt;p&gt;信用卡成功添加到 Google Play 后，就可以尝试订阅支持应用内购买的 AI 服务。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;第一步从-google-play-安装官方应用&#34;&gt;第一步：从 Google Play 安装官方应用&#xA;&lt;/h3&gt;&lt;p&gt;在 Google Play 中搜索并下载安装需要订阅的应用，例如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/chatgpt/&#34; &gt;ChatGPT&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Google Gemini&lt;/li&gt;&#xA;&lt;li&gt;Grok&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;安装前应仔细核对：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;应用名称&lt;/li&gt;&#xA;&lt;li&gt;开发者名称&lt;/li&gt;&#xA;&lt;li&gt;下载量&lt;/li&gt;&#xA;&lt;li&gt;应用图标&lt;/li&gt;&#xA;&lt;li&gt;官方网站&lt;/li&gt;&#xA;&lt;li&gt;隐私政策&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;不要安装名称相似的第三方应用。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;第二步登录-ai-账号&#34;&gt;第二步：登录 AI 账号&#xA;&lt;/h3&gt;&lt;p&gt;打开应用，登录自己的账号。&lt;/p&gt;&#xA;&lt;p&gt;需要注意：&lt;/p&gt;&#xA;&lt;p&gt;Google Play 账号和 AI 服务账号通常是两套独立账号。&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play 账号：负责付款&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ChatGPT 账号：负责使用会员权益&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;两者的邮箱不一定必须相同。&lt;/p&gt;&#xA;&lt;p&gt;但是在支付前，一定要确认当前登录的是自己真正需要升级的 AI 账号。&lt;/p&gt;&#xA;&lt;p&gt;如果订阅到了错误的账号，后续转移会员可能会比较麻烦。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;第三步选择升级会员&#34;&gt;第三步：选择升级会员&#xA;&lt;/h3&gt;&lt;p&gt;进入应用的个人中心或设置页面，找到类似选项：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Upgrade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get Plus&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;订阅&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;升级会员&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;购买高级版&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;点击后，系统会弹出 Google Play 官方付款窗口。&lt;/p&gt;&#xA;&lt;p&gt;付款窗口通常会显示：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;套餐名称&lt;/li&gt;&#xA;&lt;li&gt;每月或每年价格&lt;/li&gt;&#xA;&lt;li&gt;税费&lt;/li&gt;&#xA;&lt;li&gt;试用期限&lt;/li&gt;&#xA;&lt;li&gt;下次续费日期&lt;/li&gt;&#xA;&lt;li&gt;当前付款方式&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;确认信息无误后，再点击订阅。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;第四步确认订阅状态&#34;&gt;第四步：确认订阅状态&#xA;&lt;/h3&gt;&lt;p&gt;付款成功后，可以在 Google Play 中查看：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play 商店&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 头像&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 付款和订阅&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 订阅&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这里通常可以看到：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;当前订阅&lt;/li&gt;&#xA;&lt;li&gt;订阅价格&lt;/li&gt;&#xA;&lt;li&gt;下次续费日期&lt;/li&gt;&#xA;&lt;li&gt;付款方式&lt;/li&gt;&#xA;&lt;li&gt;取消订阅入口&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;同时回到 AI 应用中，检查高级会员权益是否已经生效。&lt;/p&gt;&#xA;&lt;p&gt;部分订单可能需要等待几分钟才能同步。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;九google-play-账号与-ai-账号的关系&#34;&gt;九、Google Play 账号与 AI 账号的关系&#xA;&lt;/h2&gt;&lt;p&gt;很多人会误以为，只要在某个 Google 账号中付款，会员就一定跟着 Google 账号走。&lt;/p&gt;&#xA;&lt;p&gt;实际上，通常涉及三层关系：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play 账号&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 负责付款和订单记录&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AI 应用账号&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 接收会员权益&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;手机中的应用安装来源&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 决定由哪个应用商店处理购买&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;订阅前需要同时确认：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Google Play 当前登录的是哪个账号。&lt;/li&gt;&#xA;&lt;li&gt;AI 应用当前登录的是哪个账号。&lt;/li&gt;&#xA;&lt;li&gt;Google Play 付款窗口显示的是哪张银行卡。&lt;/li&gt;&#xA;&lt;li&gt;订阅页面显示的是哪个套餐。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;只要其中一个环节弄错，就可能出现：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;扣款成功但会员开错账号&lt;/li&gt;&#xA;&lt;li&gt;应用找不到订阅&lt;/li&gt;&#xA;&lt;li&gt;恢复购买失败&lt;/li&gt;&#xA;&lt;li&gt;付款时调用了另一个 Google 账号&lt;/li&gt;&#xA;&lt;li&gt;无法判断订阅由谁管理&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;十如何切换用于付款的-google-账号&#34;&gt;十、如何切换用于付款的 Google 账号？&#xA;&lt;/h2&gt;&lt;p&gt;如果手机中同时登录了多个 Google 账号，应用内付款时可能会调用错误的付款账号。&lt;/p&gt;&#xA;&lt;p&gt;可以先打开 Google Play 商店，点击右上角头像，切换到需要用于付款的账号。&lt;/p&gt;&#xA;&lt;p&gt;如果应用仍然调用原来的账号，可以尝试：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;卸载目标 AI 应用。&lt;/li&gt;&#xA;&lt;li&gt;在 Google Play 中切换到正确账号。&lt;/li&gt;&#xA;&lt;li&gt;重新从 Google Play 安装应用。&lt;/li&gt;&#xA;&lt;li&gt;登录需要升级的 AI 账号。&lt;/li&gt;&#xA;&lt;li&gt;再次打开订阅页面。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;仍然无法切换时，可以检查手机中的 Google 账号列表：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;设置&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 账号与同步&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ Google&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;暂时移除不需要用于付款的 Google 账号，可能有助于减少账号调用混乱。&lt;/p&gt;&#xA;&lt;p&gt;移除账号前，应先确认：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;已经保存密码&lt;/li&gt;&#xA;&lt;li&gt;两步验证方式可用&lt;/li&gt;&#xA;&lt;li&gt;联系人和数据已经同步&lt;/li&gt;&#xA;&lt;li&gt;不会影响其他应用&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;十一chatgpt-订阅注意事项&#34;&gt;十一、ChatGPT 订阅注意事项&#xA;&lt;/h2&gt;&lt;p&gt;通过 Google Play 订阅 ChatGPT 后，会员权益通常归属于付款时登录的 OpenAI 账号。&lt;/p&gt;&#xA;&lt;p&gt;订阅前应确认：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;当前 ChatGPT 账号正确&lt;/li&gt;&#xA;&lt;li&gt;Google Play 付款账号正确&lt;/li&gt;&#xA;&lt;li&gt;选择的是所需套餐&lt;/li&gt;&#xA;&lt;li&gt;页面价格和续费周期正确&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;如果付款成功但会员没有立即生效，可以尝试：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;重新启动 ChatGPT App&lt;/li&gt;&#xA;&lt;li&gt;退出后重新登录&lt;/li&gt;&#xA;&lt;li&gt;检查 Google Play 订单是否成功&lt;/li&gt;&#xA;&lt;li&gt;使用应用内的恢复购买功能&lt;/li&gt;&#xA;&lt;li&gt;联系官方支持并提供 Google Play 订单信息&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;不要在订单状态不明时重复购买，以免产生多笔扣款。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;十二gemini-订阅注意事项&#34;&gt;十二、Gemini 订阅注意事项&#xA;&lt;/h2&gt;&lt;p&gt;Gemini 的高级服务可能与 Google One 或特定 Google AI 套餐关联。&lt;/p&gt;&#xA;&lt;p&gt;订阅前需要仔细确认：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;购买的是哪一个 Google 套餐&lt;/li&gt;&#xA;&lt;li&gt;是否包含 Gemini 高级功能&lt;/li&gt;&#xA;&lt;li&gt;是否包含云存储空间&lt;/li&gt;&#xA;&lt;li&gt;优惠期结束后的正式价格&lt;/li&gt;&#xA;&lt;li&gt;当前 Google 账号是否符合购买条件&lt;/li&gt;&#xA;&lt;li&gt;所在地区是否支持该套餐&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;由于 Gemini 与 Google 账号体系绑定较深，付款账号与实际使用账号通常应保持一致，以免会员权益出现在另一个 Google 账号中。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;十三grok-订阅注意事项&#34;&gt;十三、Grok 订阅注意事项&#xA;&lt;/h2&gt;&lt;p&gt;Grok 的订阅入口、套餐名称和权益可能随着官方产品调整而变化。&lt;/p&gt;&#xA;&lt;p&gt;订阅时应重点查看：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;是通过 Grok App 订阅，还是通过其他平台订阅&lt;/li&gt;&#xA;&lt;li&gt;套餐是否包含完整模型权限&lt;/li&gt;&#xA;&lt;li&gt;是否有使用次数限制&lt;/li&gt;&#xA;&lt;li&gt;是否自动续费&lt;/li&gt;&#xA;&lt;li&gt;会员权益绑定到哪个账号&lt;/li&gt;&#xA;&lt;li&gt;Google Play 订单能否在其他平台使用&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;确认清楚后再付款，不要只根据应用中的宣传按钮直接购买。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;十四claude-订阅需要更加谨慎&#34;&gt;十四、Claude 订阅需要更加谨慎&#xA;&lt;/h2&gt;&lt;p&gt;Claude 对账号地区、网络环境、付款来源和使用行为可能有较严格的风控。&lt;/p&gt;&#xA;&lt;p&gt;如果官方应用或当前地区没有明确提供订阅入口，不建议通过频繁切换地区、购买账号或虚构账单资料的方式强行订阅。&lt;/p&gt;&#xA;&lt;p&gt;这类操作可能导致：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;付款失败&lt;/li&gt;&#xA;&lt;li&gt;账号验证&lt;/li&gt;&#xA;&lt;li&gt;订阅被取消&lt;/li&gt;&#xA;&lt;li&gt;账号功能受限&lt;/li&gt;&#xA;&lt;li&gt;无法获得退款&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;更稳妥的方式是使用 Claude 官方在所在地区明确支持的付款渠道，并保持账号信息、付款信息和使用环境真实一致。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;十五google-play-订阅不等于-api-充值&#34;&gt;十五、Google Play 订阅不等于 API 充值&#xA;&lt;/h2&gt;&lt;p&gt;本文介绍的是 AI 应用客户端中的会员订阅，不适用于 API 账户充值。&lt;/p&gt;&#xA;&lt;p&gt;两者的区别是：&lt;/p&gt;&#xA;&lt;h3 id=&#34;应用会员订阅&#34;&gt;应用会员订阅&#xA;&lt;/h3&gt;&lt;p&gt;主要用于：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ChatGPT App&lt;/li&gt;&#xA;&lt;li&gt;Gemini App&lt;/li&gt;&#xA;&lt;li&gt;Grok App&lt;/li&gt;&#xA;&lt;li&gt;其他支持 Google Play 应用内购买的客户端&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;付款渠道可能是：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;api-费用&#34;&gt;API 费用&#xA;&lt;/h3&gt;&lt;p&gt;主要用于：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;程序调用模型&lt;/li&gt;&#xA;&lt;li&gt;网站集成 AI&lt;/li&gt;&#xA;&lt;li&gt;自动化工具&lt;/li&gt;&#xA;&lt;li&gt;开发测试&lt;/li&gt;&#xA;&lt;li&gt;按 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/token/&#34; &gt;Token&lt;/a&gt; 计费&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;API 通常需要直接在对应平台的开发者后台添加付款方式。&lt;/p&gt;&#xA;&lt;p&gt;Google Play 中绑定的信用卡，一般不能直接用于以下平台的 API 账单：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;OpenAI API&lt;/li&gt;&#xA;&lt;li&gt;Anthropic API&lt;/li&gt;&#xA;&lt;li&gt;Google AI Studio 或 Google Cloud API&lt;/li&gt;&#xA;&lt;li&gt;xAI API&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;API 平台是否接受国内信用卡，需要以各平台当前的支付政策和银行卡风控结果为准。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;十六如何取消自动续费&#34;&gt;十六、如何取消自动续费？&#xA;&lt;/h2&gt;&lt;p&gt;通过 Google Play 订阅后，可以在以下位置取消：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Google Play 商店&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 点击头像&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 付款和订阅&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 订阅&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 选择对应服务&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 取消订阅&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;取消自动续费后，通常不会立即失去会员权益。&lt;/p&gt;&#xA;&lt;p&gt;一般可以继续使用到当前账单周期结束，具体时间以订阅页面显示为准。&lt;/p&gt;&#xA;&lt;p&gt;需要注意：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;卸载 App 不等于取消订阅。&lt;/li&gt;&#xA;&lt;li&gt;退出 AI 账号不等于取消订阅。&lt;/li&gt;&#xA;&lt;li&gt;删除银行卡不一定会自动取消订阅。&lt;/li&gt;&#xA;&lt;li&gt;删除 Google 账号前应先处理所有订阅。&lt;/li&gt;&#xA;&lt;li&gt;取消后应确认页面显示“不再续费”或明确的到期日期。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;十七我的实际建议&#34;&gt;十七、我的实际建议&#xA;&lt;/h2&gt;&lt;p&gt;如果只有国内信用卡，我建议按照以下顺序尝试：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;优先检查 AI 服务官网是否支持当前银行卡。&lt;/li&gt;&#xA;&lt;li&gt;官网付款失败后，再查看官方安卓 App 是否支持 Google Play 订阅。&lt;/li&gt;&#xA;&lt;li&gt;使用自己的长期 Google 账号。&lt;/li&gt;&#xA;&lt;li&gt;使用真实的持卡人和账单信息。&lt;/li&gt;&#xA;&lt;li&gt;提前开启银行卡境外线上支付。&lt;/li&gt;&#xA;&lt;li&gt;付款前确认 AI 账号和 Google Play 账号。&lt;/li&gt;&#xA;&lt;li&gt;保存订单邮件和 Google Play 订单号。&lt;/li&gt;&#xA;&lt;li&gt;订阅成功后检查自动续费日期。&lt;/li&gt;&#xA;&lt;li&gt;不使用来源不明的代充平台。&lt;/li&gt;&#xA;&lt;li&gt;不购买无法完全控制的成品账号。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这套方式的核心并不是绕过支付限制，而是在官方允许的范围内，尝试使用 Google Play 提供的应用内订阅渠道。&lt;/p&gt;&#xA;&lt;p&gt;不同银行、账号和地区的结果可能不一样。遇到付款失败时，应先查清楚是银行拒付、Google 风控还是应用地区限制，再决定下一步操作。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&#xA;&lt;/h2&gt;&lt;p&gt;使用国内 Visa 或 Mastercard 信用卡，通过 Google Play 订阅 ChatGPT、Gemini、Grok 等 AI 服务，在部分情况下是可行的。&lt;/p&gt;&#xA;&lt;p&gt;它的主要优势包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用官方应用商店付款&lt;/li&gt;&#xA;&lt;li&gt;不需要向第三方代充平台提供账号&lt;/li&gt;&#xA;&lt;li&gt;订阅记录清晰&lt;/li&gt;&#xA;&lt;li&gt;自动续费可以统一管理&lt;/li&gt;&#xA;&lt;li&gt;可以随时取消订阅&lt;/li&gt;&#xA;&lt;li&gt;相比不明来源的虚拟卡更容易控制风险&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;但它并不是百分之百成功的方法。&lt;/p&gt;&#xA;&lt;p&gt;银行卡类型、发卡银行、Google 账号地区、应用支持范围和支付风控，都会影响最终结果。&lt;/p&gt;&#xA;&lt;p&gt;我更建议把账号安全和长期稳定放在第一位，使用真实资料、官方应用和官方付款渠道。只要订阅入口、账号地区或付款信息存在明显冲突，就不要急着反复尝试，更不要通过虚构地址或购买账号的方式强行绕过限制。&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Codex 钩子是什么？用途与使用方法</title>
            <link>https://www.tood.win/posts/codex-%E9%92%A9%E5%AD%90%E6%98%AF%E4%BB%80%E4%B9%88-%E7%94%A8%E9%80%94%E4%B8%8E%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/</link>
            <pubDate>Fri, 24 Jul 2026 17:55:00 +0800</pubDate>
            <guid>https://www.tood.win/posts/codex-%E9%92%A9%E5%AD%90%E6%98%AF%E4%BB%80%E4%B9%88-%E7%94%A8%E9%80%94%E4%B8%8E%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/</guid>
            <description>&lt;p&gt;在 ChatGPT 的 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/codex/&#34; &gt;Codex&lt;/a&gt; 设置中，你可能会看到一个名为“钩子”的页面。&lt;/p&gt;&#xA;&lt;p&gt;这里的钩子，英文叫 &lt;strong&gt;Hooks&lt;/strong&gt;。它不是聊天记忆，也不是定时任务，而是一套给 Codex 使用的自动触发机制。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;2a132536-a6ab-45c9-bcc5-2c945898f266&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://www.tood.win/uploads/2026/07/2a132536-a6ab-45c9-bcc5-2c945898f266-c989dc4e.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;简单理解就是：&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;当 Codex 执行到某个步骤时，自动运行你提前设置好的脚本。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;例如，Codex 准备执行命令时，可以先检查命令是否危险；修改代码后，可以自动运行测试；会话结束时，也可以自动保存日志或整理交接信息。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;钩子可以做什么&#34;&gt;钩子可以做什么？&#xA;&lt;/h2&gt;&lt;p&gt;钩子常见的用途包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;执行命令前检查危险操作；&lt;/li&gt;&#xA;&lt;li&gt;防止用户误贴 API Key；&lt;/li&gt;&#xA;&lt;li&gt;修改代码后自动运行测试；&lt;/li&gt;&#xA;&lt;li&gt;检查代码格式是否符合规范；&lt;/li&gt;&#xA;&lt;li&gt;会话开始时加载项目说明；&lt;/li&gt;&#xA;&lt;li&gt;上下文压缩前保存重要信息；&lt;/li&gt;&#xA;&lt;li&gt;会话结束时生成日志或清理临时文件。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Codex 官方支持多个生命周期节点，包括 &lt;code&gt;SessionStart&lt;/code&gt;、&lt;code&gt;PreToolUse&lt;/code&gt;、&lt;code&gt;PostToolUse&lt;/code&gt;、&lt;code&gt;UserPromptSubmit&lt;/code&gt;、&lt;code&gt;PreCompact&lt;/code&gt;、&lt;code&gt;Stop&lt;/code&gt; 和 &lt;code&gt;SessionEnd&lt;/code&gt; 等。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;常见钩子类型&#34;&gt;常见钩子类型&#xA;&lt;/h2&gt;&lt;h3 id=&#34;sessionstart&#34;&gt;&lt;code&gt;SessionStart&lt;/code&gt;&#xA;&lt;/h3&gt;&lt;p&gt;在 Codex 会话开始、恢复或清空后触发。&lt;/p&gt;&#xA;&lt;p&gt;适合自动加载：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;项目开发规范；&lt;/li&gt;&#xA;&lt;li&gt;环境说明；&lt;/li&gt;&#xA;&lt;li&gt;当前任务进度；&lt;/li&gt;&#xA;&lt;li&gt;必须遵守的注意事项。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;pretooluse&#34;&gt;&lt;code&gt;PreToolUse&lt;/code&gt;&#xA;&lt;/h3&gt;&lt;p&gt;在 Codex 调用工具之前触发。&lt;/p&gt;&#xA;&lt;p&gt;例如，Codex 准备执行 Bash 命令时，可以先检查：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;如果脚本判断命令危险，就可以阻止执行。&lt;code&gt;PreToolUse&lt;/code&gt; 能拦截 Bash、文件修改和部分 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/mcp/&#34; &gt;MCP&lt;/a&gt; 工具调用。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;h3 id=&#34;posttooluse&#34;&gt;&lt;code&gt;PostToolUse&lt;/code&gt;&#xA;&lt;/h3&gt;&lt;p&gt;在命令或工具执行结束后触发。&lt;/p&gt;&#xA;&lt;p&gt;适合：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;检查命令返回结果；&lt;/li&gt;&#xA;&lt;li&gt;自动记录日志；&lt;/li&gt;&#xA;&lt;li&gt;发现测试失败后提醒 Codex；&lt;/li&gt;&#xA;&lt;li&gt;修改文件后运行格式检查。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;需要注意，&lt;code&gt;PostToolUse&lt;/code&gt; 是在操作已经执行后运行，因此它无法撤销已经产生的文件修改或其他副作用。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;h3 id=&#34;userpromptsubmit&#34;&gt;&lt;code&gt;UserPromptSubmit&lt;/code&gt;&#xA;&lt;/h3&gt;&lt;p&gt;在用户的提示词正式提交给模型前触发。&lt;/p&gt;&#xA;&lt;p&gt;可以用来：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;检查提示词中是否包含密码或密钥；&lt;/li&gt;&#xA;&lt;li&gt;自动补充开发规范；&lt;/li&gt;&#xA;&lt;li&gt;对不清楚的需求增加提醒；&lt;/li&gt;&#xA;&lt;li&gt;阻止某些不符合要求的提示词。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;该钩子能够读取即将提交的 &lt;code&gt;prompt&lt;/code&gt; 内容，并可以添加额外上下文或阻止提交。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;h3 id=&#34;sessionend&#34;&gt;&lt;code&gt;SessionEnd&lt;/code&gt;&#xA;&lt;/h3&gt;&lt;p&gt;当主会话正式结束时触发。&lt;/p&gt;&#xA;&lt;p&gt;适合：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;保存最后的工作记录；&lt;/li&gt;&#xA;&lt;li&gt;清理临时文件；&lt;/li&gt;&#xA;&lt;li&gt;记录会话结束状态；&lt;/li&gt;&#xA;&lt;li&gt;生成简单的交接信息。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;不过它属于结束后的辅助操作，无法继续控制已经结束的对话。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;钩子配置放在哪里&#34;&gt;钩子配置放在哪里？&#xA;&lt;/h1&gt;&lt;p&gt;Codex 可以从以下位置读取钩子：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.codex/hooks.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.codex/config.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;项目目录/.codex/hooks.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;项目目录/.codex/config.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;前两种属于用户级配置，会影响你打开的多个项目。&lt;/p&gt;&#xA;&lt;p&gt;后两种属于项目级配置，只对当前项目生效。项目级钩子只有在该项目被信任后才会加载。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;p&gt;对于普通用户，更推荐使用：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;项目目录/.codex/hooks.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这样配置不会影响其他项目，也方便随项目一起管理。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;一个最简单的钩子示例&#34;&gt;一个最简单的钩子示例&#xA;&lt;/h1&gt;&lt;p&gt;下面创建一个非常基础的钩子：&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;每次 Codex 会话开始时，提醒它先阅读项目规范。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;第一步创建目录&#34;&gt;第一步：创建目录&#xA;&lt;/h2&gt;&lt;p&gt;在项目根目录创建：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.codex&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;目录结构如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;你的项目/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─ .codex/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│  ├─ hooks.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│  └─ hooks/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│     └─ session_start.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─ AGENTS.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└─ 其他项目文件&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;第二步创建脚本&#34;&gt;第二步：创建脚本&#xA;&lt;/h2&gt;&lt;p&gt;创建文件：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.codex/hooks/session_start.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;写入下面的内容：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Codex 会通过标准输入传入钩子事件信息。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stdin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JSONDecodeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;pass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;hookSpecificOutput&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;hookEventName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;SessionStart&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;additionalContext&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;开始处理项目之前，请先阅读项目根目录中的 &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;AGENTS.md，并遵守其中的开发规范。&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dumps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ensure_ascii&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Codex 的命令型钩子会通过标准输入接收一个 JSON 对象，其中通常包含当前目录、会话编号、事件名称和模型信息。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;第三步创建-hooksjson&#34;&gt;第三步：创建 hooks.json&#xA;&lt;/h2&gt;&lt;p&gt;在：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.codex/hooks.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;中写入：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;当前项目的 Codex 自动化钩子&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;SessionStart&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;matcher&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;startup|resume|clear|compact&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;python .codex/hooks/session_start.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;statusMessage&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;正在加载项目开发规范&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;timeout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这里各项含义如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SessionStart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;表示在会话开始时运行。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;matcher&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;表示哪些启动方式能够触发钩子。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;command&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;表示需要运行的脚本。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;statusMessage&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;表示运行钩子时显示的提示。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timeout&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;表示脚本最长允许运行多少秒。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;windows-用户需要注意&#34;&gt;Windows 用户需要注意&#xA;&lt;/h1&gt;&lt;p&gt;在 Windows 中，如果 &lt;code&gt;python&lt;/code&gt; 命令不能使用，可以改成：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;py .codex/hooks/session_start.py&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;或者使用 Python 的完整路径：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;C:\\Python312\\python.exe .codex\\hooks\\session_start.py&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;项目可能从子目录启动，正式使用时最好通过项目根目录定位脚本，避免相对路径失效。官方文档也建议项目钩子尽量从 Git 根目录解析脚本位置。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;如何启用和检查钩子&#34;&gt;如何启用和检查钩子？&#xA;&lt;/h1&gt;&lt;p&gt;保存文件后，重新打开 Codex。&lt;/p&gt;&#xA;&lt;p&gt;然后在 Codex CLI 中输入：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/hooks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;你可以在这里：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;查看已经发现的钩子；&lt;/li&gt;&#xA;&lt;li&gt;查看钩子来自哪个配置文件；&lt;/li&gt;&#xA;&lt;li&gt;信任新钩子；&lt;/li&gt;&#xA;&lt;li&gt;禁用某个钩子；&lt;/li&gt;&#xA;&lt;li&gt;重新启用钩子。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;出于安全原因，普通命令钩子在首次运行前需要用户检查并信任。钩子内容发生改变后，Codex 会重新要求确认。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;p&gt;因此，看到“未找到钩子”，只是表示当前没有安装或配置可用钩子，并不是程序发生故障。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;再举一个实用例子修改代码后提醒运行测试&#34;&gt;再举一个实用例子：修改代码后提醒运行测试&#xA;&lt;/h1&gt;&lt;p&gt;创建：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.codex/hooks/post_edit.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;写入：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stdin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tool_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tool_name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tool_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;apply_patch&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;hookSpecificOutput&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;hookEventName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;PostToolUse&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;additionalContext&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;s2&#34;&gt;&amp;#34;代码文件刚刚发生修改。继续任务前，请检查 Git diff，&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;s2&#34;&gt;&amp;#34;并运行与本次修改相关的测试。&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dumps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ensure_ascii&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;然后把 &lt;code&gt;hooks.json&lt;/code&gt; 修改为：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;当前项目的 Codex 自动化钩子&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;SessionStart&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;matcher&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;startup|resume|clear|compact&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;python .codex/hooks/session_start.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;statusMessage&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;正在加载项目规范&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;timeout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;PostToolUse&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;matcher&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;apply_patch&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;python .codex/hooks/post_edit.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;statusMessage&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;正在检查代码修改&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;timeout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这样 Codex 修改文件后，钩子会提醒它检查差异并运行测试。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;如何关闭钩子&#34;&gt;如何关闭钩子？&#xA;&lt;/h1&gt;&lt;p&gt;临时禁用单个钩子，可以在 Codex 中输入：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/hooks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;然后选择对应钩子并禁用。&lt;/p&gt;&#xA;&lt;p&gt;要彻底关闭所有生命周期钩子，可以打开：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.codex/config.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;加入：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;hooks&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Codex 的钩子功能默认启用，上面的配置会关闭所有钩子。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;使用钩子需要注意什么&#34;&gt;使用钩子需要注意什么？&#xA;&lt;/h1&gt;&lt;p&gt;钩子本质上可以执行本地脚本，因此不要随意信任来历不明的钩子。&lt;/p&gt;&#xA;&lt;p&gt;尤其要检查：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;是否包含删除文件的命令；&lt;/li&gt;&#xA;&lt;li&gt;是否上传本地代码；&lt;/li&gt;&#xA;&lt;li&gt;是否读取环境变量和 API Key；&lt;/li&gt;&#xA;&lt;li&gt;是否自动运行网络请求；&lt;/li&gt;&#xA;&lt;li&gt;是否安装未知软件；&lt;/li&gt;&#xA;&lt;li&gt;是否使用管理员权限；&lt;/li&gt;&#xA;&lt;li&gt;是否修改 Git 仓库以外的文件。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;多个符合条件的命令钩子可能同时运行，而且一个钩子不一定能阻止另一个钩子开始执行。官方因此要求非托管钩子在首次运行及修改后重新接受信任检查。([OpenAI Developers][1])&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;总结&#34;&gt;总结&#xA;&lt;/h1&gt;&lt;p&gt;Codex 钩子可以理解为一套自动化规则：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;发生某个事件&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;自动运行指定脚本&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;检查、提醒、补充信息或阻止操作&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;它最适合用来完成：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;自动加载项目规范；&lt;/li&gt;&#xA;&lt;li&gt;阻止危险命令；&lt;/li&gt;&#xA;&lt;li&gt;修改后自动检查；&lt;/li&gt;&#xA;&lt;li&gt;自动运行测试；&lt;/li&gt;&#xA;&lt;li&gt;保存日志和项目状态。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;普通用户不配置钩子，也可以正常使用 Codex。只有当你希望 Codex 的工作流程更加固定、安全和自动化时，才需要使用它。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
