用 Codex 把客户需求直接变成代码:Braintrust 的工程实践

2026-05-29 20 预计阅读时间:1 分钟
来源:openai.com AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:11 分钟

客户提了一个需求,工程师打开 IDE,从零开始写代码——这条路径在 AI 时代正在被压缩。Braintrust 团队最近分享了他们如何用 OpenAI 的 Codex 配合 GPT-5.5,把客户请求快速转化为可运行的代码,并在自己的评估平台上完成实验闭环。

这不是"AI 写代码然后人盲审"的粗糙流程,而是把 Codex 嵌进需求→代码→验证的完整链路里,让每一步都有可追溯的评估数据。

Codex 不是聊天窗口,是命令行里的编码代理

OpenAI 的 Codex(CLI 版本)和 ChatGPT 的对话模式有本质区别:它是一个在终端里运行的自主编码代理。你给它一个任务描述,它会自己读项目文件、写代码、跑测试、修 bug,最后把结果推回你的分支。

核心命令很简单:

# 安装 Codex CLI
npm install -g @openai/codex

# 给 Codex 一个任务,让它自主完成
codex "为 Braintrust 的 evaluator 模块添加一个支持 JSON schema 校验的新 evaluator,参考现有 StringMatch evaluator 的结构"

Codex 会自动执行以下步骤:扫描项目结构、定位相关文件、生成代码、运行测试、修复失败。整个过程在沙盒环境中完成,不会直接污染你的主分支。

Braintrust 工程师的关键做法是:把客户需求直接翻译成 Codex 的任务描述。不是写模糊的"帮我做个功能",而是把需求文档中的具体约束——输入格式、输出格式、边界条件——原样塞给 Codex。

需求→任务描述的转化才是核心技能

很多团队试用 Codex 后觉得"效果一般",问题往往不在模型,而在任务描述。Braintrust 的工程师总结了一套实用的描述模板:

## 任务:添加 JSON Schema 校验 Evaluator

### 背景
Braintrust 的 evaluator 模块目前支持 StringMatch、NumericMatch 等类型。
客户请求:在评估流水线中校验 LLM 输出是否符合给定的 JSON Schema。

### 约束
- 新 evaluator 类名:JsonSchemaMatch
- 继承自 BaseEvaluator,遵循现有接口签名
- 输入:value(待校验的字符串或 dict),schema(JSON Schema dict)
- 输出:score 为 1.0(合规)或 0.0(不合规),metadata 包含校验错误详情
- 使用 python-jsonschema 库做校验
- 必须通过 tests/evaluators/test_json_schema_match.py 中的测试

### 参考文件
- src/evaluators/string_match.py(现有 evaluator 结构)
- src/evaluators/base.py(基类定义)
- tests/evaluators/test_string_match.py(测试风格参考)

这种描述方式有几个关键点:明确类名和继承关系(减少 Codex 的猜测空间)、指定输入输出格式(让生成的代码直接可接入现有系统)、列出参考文件(让 Codex 有具体的模仿对象)、要求通过特定测试文件(给 Codex 一个自检闭环)。

Braintrust 工程师发现,用这种结构化描述喂给 Codex,首次生成代码的通过率从约 40% 提升到超过 70%。

在 Braintrust 上跑评估实验:验证 Codex 生成的代码

Codex 生成了代码,但代码是否真的满足客户需求?Braintrust 的做法是:用自己家的评估平台来验证 Codex 的产出。

下面是一个完整的实践示例——搭建一个 Braintrust 评估实验,测试 Codex 生成的 JsonSchemaMatch evaluator:

# experiment_json_schema_eval.py
# 前置:pip install braintrust jsonschema

import braintrust
from autoevals.string import StringMatch  # 现有 evaluator,用于对比

# 假设 Codex 已生成 JsonSchemaMatch evaluator,位于 src/evaluators/json_schema_match.py
from src.evaluators.json_schema_match import JsonSchemaMatch

# 定义测试数据集:LLM 输出 vs 期望的 JSON Schema
dataset = [
    {
        "input": '{"name": "Alice", "age": 30}',
        "schema": {
            "type": "object",
            "required": ["name", "age"],
            "properties": {
                "name": {"type": "string"},
                "age": {"type": "integer"}
            }
        },
        "expected": 1.0,  # 应该合规
    },
    {
        "input": '{"name": "Alice", "age": "thirty"}',  # age 不是整数
        "schema": {
            "type": "object",
            "required": ["name", "age"],
            "properties": {
                "name": {"type": "string"},
                "age": {"type": "integer"}
            }
        },
        "expected": 0.0,  # 应该不合规
    },
    {
        "input": '{"name": "Bob"}',  # 缺少 required 字段 age
        "schema": {
            "type": "object",
            "required": ["name", "age"],
            "properties": {
                "name": {"type": "string"},
                "age": {"type": "integer"}
            }
        },
        "expected": 0.0,
    },
]

# 创建 Braintrust 实验
experiment = braintrust.init(
    project="codex-output-validation",
    name="json-schema-evaluator-v1",
    dataset=dataset,
)

# 用 Codex 生成的 evaluator 评估每条数据
for item in dataset:
    result = JsonSchemaMatch().eval(
        input=item["input"],
        schema=item["schema"],
    )
    experiment.log(
        input=item,
        output=result.score,
        expected=item["expected"],
        metadata=result.metadata,  # 包含校验错误详情
    )

# 查看实验结果摘要
print(experiment.summarize())

运行方式:

# 先让 Codex 生成 evaluator 代码
codex "按照上面的任务描述,生成 JsonSchemaMatch evaluator"

# 然后跑评估实验
python experiment_json_schema_eval.py

这个闭环的关键在于:Codex 生成代码 → Braintrust 评估验证 → 评估数据反馈给下一次 Codex 任务描述。如果评估发现某类边界 case 失败,工程师不需要自己修代码,而是把失败 case 补进任务描述,让 Codex 再跑一轮。

GPT-5.5 带来的实际变化

Braintrust 提到他们使用的是 GPT-5.5 驱动的 Codex。相比之前的模型版本,实际工程中可感知的差异集中在几个方面:

  • 长上下文理解更稳定:Codex 需要同时读取项目结构、多个参考文件和任务描述。GPT-5.5 在处理这种跨文件上下文时,混淆和遗漏明显减少。
  • 多轮自修复更高效:Codex 跑测试失败后会自动尝试修复。GPT-5.5 的修复路径更短——往往一轮就能定位问题,而不是反复试错。
  • 复杂约束遵守率更高:像"继承 BaseEvaluator、接口签名必须匹配、输出格式包含 metadata 字段"这种多层约束,GPT-5.5 的遵守率显著好于前代模型。

但模型能力的提升并不意味着可以放松任务描述的质量。Braintrust 工程师反复强调的一点是:更好的模型让好的任务描述产出更好的结果,但不会拯救糟糕的任务描述

采用建议与注意事项

如果你打算在团队中引入类似的 Codex 工作流,以下是几个实操层面的建议:

任务描述是投入产出比最高的环节。 不要花 30 分钟写代码,花 5 分钟写任务描述;反过来,花 15 分钟写一份结构化的任务描述,让 Codex 用 3 分钟生成初版代码,然后你用 10 分钟审查和调整。总时间从 30 分钟降到 25 分钟,但你的精力消耗大幅减少。

给 Codex 可运行的测试作为锚点。 测试文件不是可选的——它是 Codex 自检的唯一标准。先写测试(或者让 Codex 先生成测试再生成实现),比"写完再补测试"的产出质量高得多。

评估闭环不能省。 Codex 生成的代码通过了单元测试,不代表它满足客户的真实需求。用 Braintrust 或类似的评估平台跑端到端实验,才能确认产出是否真正对齐需求。

沙盒环境是安全底线。 Codex 有完整的文件系统访问权限。务必在隔离环境中运行(Codex 默认使用沙盒,但如果你用 --full-auto 模式,它会在真实环境中执行命令)。生产数据库的凭据、敏感配置——这些永远不应该出现在 Codex 可触及的上下文里。

不要对首次生成率抱有过高期待。 即便用 GPT-5.5 和精心设计的任务描述,首次通过率 70% 已经是不错的水平。剩下的 30% 需要人工介入——但这比从零写代码快得多。关键是建立"失败 case → 补充描述 → 重新生成"的快速迭代循环,而不是一次就指望完美。

Codex 不是替代工程师的工具,它是压缩"需求→可验证代码"这段路径的加速器。Braintrust 的实践表明,真正的收益来自把 Codex 嵌进完整的工程流程——任务描述、代码生成、评估验证、反馈迭代——而不是把它当成一个孤立的代码生成器。


相关推荐