PostgreSQL码农集散地

白嫖的 Codex 真香! ChatGPT所有付费模型随便用

白嫖的 Codex 真香!

如何白嫖? 搞个企业邮箱, 企业试用 chatgpt business 版一个月.

也不知道真假, 反正把我的 chatgpt 账号拉到 team 了, 现在可以不用 api key 直接使用 chatgpt 账号来使用 codex , 包括网页版本的 chatgpt 也升级到商业版了.

今天要聊的是白嫖的 codex 生产能力如何?

先说结论: codex 真香, 交付结果很满意.

我还是用了之前把 gemini cli/qwen coder/opencode(kimi 2.5 pro) 干翻的问题:

我正在使用 `pgvector/pgvector` 开发, deepwiki 有该项目的开发文档, 请先调用 deepwiki mcp 工具来了解它, 也可以用 deepwiki 来按需生成代码, 检查代码.     
同时参考 @pgvector_tinyint/src/tinyint.c @pgvector_tinyint/src/tinyint.h @pgvector/src/halfvec.c @pgvector/src/halfvec.h @pgvector/src/halfutils.c @pgvector/src/halfutils.h @pgvector/sql/vector.sql     
在 @pgvector/ 代码库的 tinyint_vector 分支中实现一个 tinyintvec 类型.     
要求如下:     
使用 8 bit 存储向量的每个维度值, 取值区间 -128 到 127 ;     
实现 hnsw 和 ivfflat 索引, 支持 tinyintvec_l2_ops, tinyintvec_l1_ops, tinyintvec_ip_ops, tinyintvec_cosine_ops, 以及对应的操作符 ; (给 tinyintvec 字段创建索引时, 要跳过 NULL 向量值, 不能报错.)     
注意 tinyintvec_cosine_ops 因为要 normal 化, 记得遇到NULL值时要处理除0问题.     
修改对应的 @pgvector/Makefile , @pgvector/sql/vector.sql ;    
记得在 @pgvector/sql/vector.sql 要创建 tinyintvec 对应的 ivfflat 和 hnsw 的 support 函数.   
新增内容必须放到 @pgvector/sql/vector.sql 末尾.  
回归测试采用 @tinyintvec.sql     
注意, 如果回归测试过程中遇到数据库崩溃重启的问题, 说明你新增的代码有问题, 一定要解决问题直到回归测试全部正常.     
注意, 回归测试中符合预期的 ERROR 不需要处理, 确认 pgvector/test/sql/tinyintvec.sql 输出都符合预期(该使用索引的必须使用索引, 索引的结果必须和全表扫描的结果一致)后, 将其结果写入 pgvector/test/expected/tinyintvec.out     
数据库已安装好, pg_config 也已经在 PATH 变量中功能, 直接使用 USE_PGXS=1 make clean && USE_PGXS=1 make distclean && USE_PGXS=1 make && USE_PGXS=1 make installcheck 就可以进行测试 .  

而这次更狠, 我在本地压根就没有下载 pgvector 代码, 也没有安装 postgresql, 看看 codex 如何应对?


下面引用 codex 完成任务返回的总结内容:

我先从 PostgreSQL 官方源码装了 18.3,当前可用的 pg_config 在 /Users/digoal/local/pgsql18/bin/pg_config。本地测试集群已用 /tmp/pg18vector 起在 PGHOST=/tmp PGPORT=55432,这样 pgvector 的编译和回归都能正常跑。

tinyintvec 已接入到 sql/vector.sql、Makefile、src/ivfutils.c、src/hnswutils.c,核心实现放在 src/tinyintvec.c 和 src/tinyintvec.h。新增了 tinyintvec 类型、tinyintvec_l2_ops / tinyintvec_l1_ops / tinyintvec_ip_ops / tinyintvec_cosine_ops、对应操作符、HNSW/IVFFlat support 函数,并处理了索引时跳过 NULL,以及 cosine 归一化时零范数不除零。

回归文件已新增并固化为 test/sql/tinyintvec.sql 和 test/expected/tinyintvec.out。我验证了:
PGHOST=/tmp PGPORT=55432 PATH=/Users/digoal/local/pgsql18/bin:$PATH USE_PGXS=1 make installcheck
整套 installcheck 15/15 全部通过,tinyintvec 单测也单独通过,索引计划被使用,索引结果与强制全表扫描一致。

补充说明:工作区里原本就有未跟踪的 src/tinyvec.c 和 src/tinyvec.h,我没有把它们接入构建。

7 个文件已更改  

Makefile  
sql/vector.sql  
src/hnswutils.c  
src/ivfutils.c  
src/tinyintvec.c  
src/tinyintvec.h  
test/sql/tinyintvec.sql  

我看了回归测试, 发现少了距离值, 无法直观的观测排序是否正确, 所以又让 codex 补了一条任务: 你应该在回归测试中, 把距离都打印出来, 确保排序的正确性.

很快又搞定了. 下面引用 codex 完成任务返回的总结内容:

已按这个要求补上。

我把 test/sql/tinyintvec.sql 里所有用于验证索引排序正确性的查询都改成了同时输出距离值:
L2 输出 l2_distance
L1 输出 l1_distance
cosine 输出 cosine_distance
IP 输出实际内积值 ((val <#> query) * -1)

这样现在不只是看返回顺序,而是能直接看到每一行的排序键,能明确验证索引扫描和强制全表扫描的距离完全一致。对应 expected 已更新到 test/expected/tinyintvec.out。

我重新跑了:
PGHOST=/tmp PGPORT=55432 PATH=/Users/digoal/local/pgsql18/bin:$PATH USE_PGXS=1 make installcheck REGRESS=tinyintvec
以及全量:
PGHOST=/tmp PGPORT=55432 PATH=/Users/digoal/local/pgsql18/bin:$PATH USE_PGXS=1 make installcheck

结果仍然是 15/15 全通过。


最后, 在pgvector_digoal中, 基于当前master新建一个tinyintvec分支, 将你在pgvector项目tinyint_vector分支写的代码迁移到pgvector_digoal项目tinyintvec分支中.

已将代码提交到这: https://github.com/digoal/pgvector

记得切换 branch: codex/tinyintvec

大家有兴趣可以试一试看.