掼蛋记分器:Codex上手体验

一直想要找个合适的“项目”来实践一下codex。某日与好友掼蛋中,又出现了“记不住打几”的情况,灵光一闪,用codex来编一个“掼蛋记分器”,似乎是个不错的起点。

一、codex的web版与cli版

首先需要明确的是,codex完全支持订阅用户,无需开通api也可以使用,无论是codex web还是codex cli。

codex web版的入口在chatgpt web版的左侧,或直接访问https://chatgpt.com/codex。它围绕Github设计,因此首先得拥有一个Github账号。初次连接需要按照提示登录Github,授权codex对Github的访问。之后,便可以在codex web的界面上选择你Github上的某一个仓库进行操作了。

需要注意的是,对于一个新建的、空的仓库,codex web无法工作。你必须至少在仓库中新建一个readme.md才算是完成了仓库的“初始化”。readme.md可以极其简单,即使就写一个产品的名称也可以。

codex cli是在本地以命令行的方式运行。安装它首先需要nodejs,可以到这里下载:https://nodejs.org/。nodejs包含npm,之后就可以用npm命令来安装codex了。

无论是安装、更新还是使用,显然都需要代理环境,因此我们可以预先编辑好一个bat文件,双击它即可设置好代理:

@echo off
rem Set proxy environment variables for this session
set "http_proxy=http://127.0.0.1:7897"
set "https_proxy=http://127.0.0.1:7897"
set "HTTP_PROXY=%http_proxy%"
set "HTTPS_PROXY=%https_proxy%"
set "NO_PROXY=localhost,127.0.0.1,::1"
rem Launch an interactive shell with these variables
cmd /k

注意,具体的端口根据软件不同,请自行修改。

安装codex只需要一行命令:

npm i -g @openai/codex

更新也只需要一行命令:

npm update -g @openai/codex

之后,用cd /d进入工作文件夹,输入codex即可运行它。

codex web与codex cli有什么区别呢?

codex web的设计目标是让用户在手机上也能发布指令,因此它简化了操作界面,用户无法选择具体的codex模型,全部交给codex自主决定。而且它的工作对象只能是Github上的仓库。它的优势是可以多人围绕Github仓库进行协作。

codex cli的设计目标则是在用户本地进行操作,用户可以自定义工作环境,提供终端程序,并可以选择使用的模型。对于专业用户来说灵活性和控制性更强,但显然不适合多人协作。

二、掼蛋记分器

最初设想中掼蛋记分器是一个单页面html,已经用chatgpt web将它实现出来了:牌局数据存储在浏览器的localstorage,每把牌的得分情况用6个按钮来输入:A队双上、A队一三、A队一四、B队双上、B队一三、B队一四。支持A打3次不过自动回2。

这在单人操作的时候已经实现了基本功能,但缺点也很明显:

1、只能使用者自己记录,无法将比分分享给牌友,也就缺乏互相“监督”的机制。
2、A队、B队容易记混。

一开始的优化思路是,首先要赋予每个牌局一个唯一id,然后需要一个存储机制,这样分享带id的链接,别人就可以读取牌局了。考虑避免使用过“重”的数据库,一开始比较天生地想用一个json文件来存储牌局信息。

在Github上初始化好一个项目仓库后,codex web启动,一通prompt下达后,codex工作了二十几分钟,宣告工作完成。但把文件部署到服务器上之后,根本无法运行。一番研究发现,原来html+js根本无法在服务器上写文件——这本该是个常识,但codex却没有主动告诉我。

好吧,再次prompt,这次要求codex写一个asp作为后端,用asp来读写json文件。codex自作主张,把asp放到了api子目录中,结果又因为父文件夹权限的问题陷入了无边无际的循环。

改用codex cli,手动选择GPT-5-codex-high,这下好了很多,经过2个多小时的调试,程序终于运行成功。

完事儿之后,我问chatgpt:用json文件来做数据库,有什么问题吗?

chatgpt非常实诚:问题很大,无法支持高并发。

我一看脑袋瓜子嗡嗡的:有道理啊!但codex你怎么不早说?反正这时候已经上了asp,也谈不上“重”不“重”了,考虑换成SQLite单文件数据库。结果发现asp默认不支持SQLite,还需要额外装个驱动。于是让codex cli把asp改写成php,添加了php的SQLite扩展,这一次codex不含糊,php一次性改写成功。

三、细节打磨

实际使用中,不可能绕开微信。实测发现,微信对弹窗的支持有问题,UI非常丑。把问题描述给codex,于是改成了浮动弹窗先隐藏起来的方式。直接分享链接也有问题,微信内置浏览器不支持通常的navigatorshare API,必须用微信自己的API,那只好作罢。

另一个问题在真正部署应用之前很难预先想到:原先的单页面html会自动创建一个新牌局,当你把不带ID的链接发给别人时,它会立即进入一个新的牌局ID。当正在打牌的时候当然没问题,但如果只是给别人介绍这个工具,这就有问题了。

于是新建了一个index.html,作为首页入口,界面上正好加上一些使用说明和版本信息。原先的index.html改成games.html。

掼蛋记分器2.0地址:https://game.lucyqin.cn/gd

四、需求与体验的平衡

和朋友们讨论这个小工具,它当然还是有一些不足之处,比如:无法记录每一局谁是头游,谁是了游;缺乏胜率统计功能等等。

但仔细一想便知,想要记录第一名和第四名信息,每把牌局记分的负担就大大加重了。目前的设计只定义了两个队,记分需要按1次按钮,分名次的话就需要定义4个玩家,对于这样一个轻量级的需求来说,显得不匹配了。

而胜率统计功能更不现实:每次A队、B队具体是谁以及队名都是不确定的。除非为每个真人用户分配用户名,那就需要一个注册系统。而一旦有了注册系统,后面就会有10倍、100倍新的需求……那就失去初心了。

五、codex使用经验

1、codex目前缺少主动建议和提示,只会相对机械地执行你的指示,这对于专业程序员来说可能是好事,但对于小白们来说,会增加被“带歪”的概率。

2、过程中应结合chatgpt使用,这样你才能更好地厘清思路,作出正确的决策,提出更好的prompt。

3、codex cli下的GPT-5-codex-high的能力显著强于codex web版,但如果你是plus用户,需注意用量。

4、codex cli界面最下方的context百分比是当前对话的上下文余量,并不是codex的剩余额度。

5、readme.md可以让codex web帮你写:)