
Codex 类工具的常见用法是"在 IDE 里补全代码"。但工程视角下,它真正的价值在于同一套抽象可以复用到多个场景:代码审查、测试补全、文档生成、数据清洗、运维脚本、CI 修复。本文不讨论单一场景的提示词技巧,而是给出一套可复用的多场景任务抽象,并附可运行代码。
无论什么场景,Codex 类任务都可以拆成四个要素:
把这四个要素抽象成统一任务模型,就能用同一套骨架驱动不同场景。
from dataclasses import dataclass, field
from enum import Enum
from typing import Any, Callable, Awaitable
import uuid
class Scene(str, Enum):
code_review = "code_review"
test_gen = "test_gen"
doc_gen = "doc_gen"
data_clean = "data_clean"
ops_script = "ops_script"
ci_fix = "ci_fix"
@dataclass
class CodexTask:
scene: Scene
payload: dict[str, Any]
constraints: dict[str, Any] = field(default_factory=dict)
task_id: str = field(default_factory=lambda: uuid.uuid4().hex[:8])
result: dict[str, Any] | None = None
status: str = "pending"任务模型统一后,每个场景只需要实现一个处理器。
输入 diff,输出结构化问题清单。重点是让模型只报事实,不编造。
import os, json
from openai import AsyncOpenAI
client = AsyncOpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL"),
)
REVIEW_SYSTEM = """你是代码审查员。只输出 JSON:
{"issues": [{"file": str, "line": int, "severity": "high|mid|low",
"type": "bug|security|style|perf", "msg": str}]}
只报告 diff 中可见的问题,不推测未展示代码。无问题返回空数组。"""
async def review_diff(diff: str) -> dict:
resp = await client.chat.completions.create(
model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"),
messages=[
{"role": "system", "content": REVIEW_SYSTEM},
{"role": "user", "content": diff[:12000]},
],
response_format={"type": "json_object"},
temperature=0,
)
return json.loads(resp.choices[0].message.content)关键约束:只报告 diff 中可见问题、结构化输出、温度 0。审查结果仍需人工确认,不能直接阻断合并。
输入函数源码,输出 pytest 草稿。重点是覆盖边界和异常。
TEST_SYSTEM = """你是测试工程师。为给定函数生成 pytest 测试,
覆盖:正常路径、边界值、异常分支、空输入。
只输出 Python 代码,不输出解释。不要 mock 掉被测函数本身。"""
async def gen_tests(source: str) -> str:
resp = await client.chat.completions.create(
model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"),
messages=[
{"role": "system", "content": TEST_SYSTEM},
{"role": "user", "content": source},
],
temperature=0.2,
)
return resp.choices[0].message.content生成后必须人工检查:是否有有效断言、是否遗漏异常分支、mock 是否失真。
输入表头和样例,输出清洗脚本。重点是显式处理缺失、类型和异常值。
CLEAN_SYSTEM = """你是数据工程师。根据表头和样例生成 Python 清洗函数。
要求:显式处理缺失值、类型转换失败、异常值;不修改原始文件;
不打印敏感字段。只输出函数代码。"""
async def gen_cleaner(schema: str) -> str:
resp = await client.chat.completions.create(
model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"),
messages=[
{"role": "system", "content": CLEAN_SYSTEM},
{"role": "user", "content": schema},
],
temperature=0.1,
)
return resp.choices[0].message.content合规要求:字段涉及个人信息时必须脱敏,不得把原始数据贴给外部模型。
输入错误日志,输出修复建议或脚本草稿。重点是命令白名单和沙箱执行。
OPS_SYSTEM = """你是 SRE。根据错误日志给出最小修复建议。
只输出 JSON:{"cause": str, "fix": str, "commands": [str], "risk": "low|mid|high"}
禁止输出 rm -rf、curl|sh、关闭防火墙、提权等危险命令。"""
async def diagnose(log: str) -> dict:
resp = await client.chat.completions.create(
model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"),
messages=[
{"role": "system", "content": OPS_SYSTEM},
{"role": "user", "content": log[-8000:]},
],
response_format={"type": "json_object"},
temperature=0,
)
return json.loads(resp.choices[0].message.content)
DANGEROUS = ("rm -rf", "curl | sh", "chmod 777", "sudo", "iptables -F")
def audit_commands(cmds: list[str]) -> list[str]:
return [c for c in cmds if any(d in c for d in DANGEROUS)]任何命令执行都应在沙箱中进行,人工确认后再上生产。
把多场景串成同一套调度流程。
import asyncio, logging
logging.basicConfig(level=logging.INFO)
log = logging.getLogger("codex")
HANDLERS: dict[Scene, Callable[[CodexTask], Awaitable[dict]]] = {}
def register(scene: Scene):
def deco(fn):
HANDLERS[scene] = fn
return fn
return deco
async def dispatch(task: CodexTask) -> CodexTask:
handler = HANDLERS.get(task.scene)
if not handler:
task.status = "failed"
return task
try:
task.result = await handler(task)
task.status = "succeeded"
except Exception as e:
task.status = "failed"
task.result = {"error": str(e)}
log.info("scene=%s id=%s status=%s", task.scene, task.task_id, task.status)
return task
async def run_all(tasks: list[CodexTask], concurrency: int = 3):
sem = asyncio.Semaphore(concurrency)
async def wrap(t):
async with sem:
return await dispatch(t)
return await asyncio.gather(*(wrap(t) for t in tasks))要点:场景注册解耦、并发受控、失败不中断其他任务。
Codex 多场景工程的核心,不是为每个场景写一套提示词,而是建立统一任务抽象,把输入、约束、执行、产物四要素标准化,再用注册式处理器扩展场景。代码可以简单,但权限、审核、日志、门禁和合规不能省。先跑通代码审查和测试补全两个场景,再扩展到数据、运维和 CI 修复。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。