【AI】十分钟理解 Codex:从 Prompt 到可运行代码的魔法
·
十分钟理解 Codex:从 Prompt 到可运行代码的魔法
目标:不搞数学公式,不用 PyTorch 代码,用人话讲清楚 Codex 怎么把一句话变成可运行程序。
第一分钟:Codex 是什么?一句话定位
Codex = 只读过代码的 GPT
| GPT-4 | Codex | |
|---|---|---|
| 读过什么 | 互联网所有文本 | GitHub 公开仓库 + Stack Overflow |
| 擅长什么 | 聊天、写作、推理、通才 | 写代码、改 Bug、工程化 |
| 输出特点 | 可能跑不通 | 大概率能编译 |
核心能力:你描述需求,它生成可执行的代码。
第二分钟:Token —— AI 理解代码的最小单位
什么是 Token?
不是字符,不是单词,是语义片段。
# 人类看到的
def calculate_sum(a, b):
return a + b
# Codex 看到的(示意)
["def", " calculate", "_sum", "(", "a", ", ", "b", "):", "\n ", "return", " a", " + ", "b"]
代码专用 Token 优化
Codex 对代码做了特殊切分:
| 场景 | 普通 Tokenizer | Codex Tokenizer |
|---|---|---|
function_name |
["function", "_", "name"] |
["function_name"](保留完整标识符) |
| 缩进(4空格) | [" ", " ", " ", " "] |
[" "](保留结构信息) |
=> |
["=", ">"] |
["=>"](箭头函数整体识别) |
| 换行符 | 普通空白 | 保留缩进层级信息 |
关键洞察:Codex 的 Token 保留了代码的结构特征(缩进、括号配对、语法块),所以更懂代码逻辑。
第三分钟:上下文窗口 —— AI 的"工作记忆"
概念
Codex 一次能"看"多少 Token。早期 4K,新版 128K+。
[系统提示] + [文件1内容] + [文件2内容] + [当前光标位置] + [待生成区域]
↓ ↓ ↓ ↓ ↓
约100 2000 Token 3000 Token 500 Token 预留 4000
Token
实战影响
| 场景 | 4K 窗口 | 128K 窗口 |
|---|---|---|
| 补全单行代码 | ✅ 轻松 | ✅ 轻松 |
| 生成一个函数 | ✅ 可以 | ✅ 轻松 |
| 理解整个类文件 | ⚠️ 刚好 | ✅ 轻松 |
| 重构整个项目 | ❌ 不可能 | ✅ 可以 |
Cursor 等工具的技巧:自动选择最相关的文件塞进上下文,而不是把整个项目扔进去。
第四分钟:Prompt 工程 —— 怎么跟 Codex 说话
核心原则:给上下文,不是给指令
❌ 差 Prompt
写一个登录功能
✅ 好 Prompt
# 当前文件:auth.py
# 已有代码:
from flask import Flask, request
app = Flask(__name__)
# 需求:实现 /login 接口,验证用户名密码,返回 JWT token
# 数据库表:users(id, username, password_hash)
# 使用:PyJWT 库,密码用 bcrypt 验证
@app.route('/login', methods=['POST'])
def login():
# [Codex 从这里开始生成]
Codex 专属 Prompt 技巧
| 技巧 | 示例 | 效果 |
|---|---|---|
| 代码注释当需求 | # 实现二分查找,处理边界情况 |
生成带边界处理的代码 |
| 类型提示引导 | def process(data: list[dict]) -> pd.DataFrame: |
自动 import pandas,处理 DataFrame 逻辑 |
| 示例驱动 | // 输入:[1,2,3], 输出:6 |
生成符合输入输出格式的代码 |
| 错误示范 | // 注意:不要用递归,防止栈溢出 |
主动避开特定实现方式 |
| 文件路径暗示 | // utils/date_helper.js |
自动使用 Node.js 日期库 |
第五分钟:代码生成逻辑 —— 从概率到程序
简单理解:高级自动补全
传统 IDE 补全:
user.get → 提示:getName(), getEmail(), getId()
Codex 补全:
# 从数据库查询用户信息,缓存到 Redis,返回 JSON
def get_user(user_id):
→ 生成完整函数实现,包含 SQL 查询、Redis 操作、异常处理
生成过程(简化版)
1. 编码:你的 Prompt → Token 序列
["def", " get", "_user", "(", "user", "_id", "):"...]
2. 预测:模型计算每个位置可能的 Token 概率
下一个 Token 可能是:
- " " (缩进,概率 95%) ✅
- "\"" (字符串,概率 3%)
- "class" (错误,概率 0.1%)
3. 采样:按概率选择 Token,拼接成序列
4. 解码:Token 序列 → 人类可读的代码
5. 验证:检查语法正确性(括号匹配、缩进合法)
关键机制:语法约束解码
Codex 在生成时会强制遵守语法规则:
# 生成中检测到 if 语句开始
if user_id > 0:
# 下一个 Token 必须是缩进(不能是 else:)
# 检测到括号未闭合
def foo(a, b # 检测到缺少 ):,强制补全
这就是为什么 Codex 代码语法错误率远低于通用模型。
第六分钟:温度参数 —— 控制创造性
Temperature(温度)
| 温度值 | 特点 | 适用场景 |
|---|---|---|
| 0.0 | 确定性最强,每次输出一样 | 标准算法、需要稳定结果 |
| 0.2-0.4 | 保守,变化小 | 生产代码、Bug 修复 |
| 0.7-1.0 | 创造性高,多样化 | 探索性编程、原型设计 |
代码专用策略
Codex 实际使用动态温度:
- 语法结构部分(
def,if,return):低温(0.1),确保合法 - 变量命名、注释内容:中温(0.4),保持可读性
- 算法实现细节:根据场景调整
第七分钟:少样本学习 —— 用例子教 AI
原理:给几个例子,Codex 模仿风格
# 示例 1:处理空值
def safe_get(data, key):
"""安全获取字典值,不存在返回 None"""
return data.get(key) if data else None
# 示例 2:类型转换
def parse_int(value):
"""安全转整数,失败返回 0"""
try:
return int(value)
except (ValueError, TypeError):
return 0
# 需求:按同样风格,实现安全除法
def safe_divide(a, b):
# Codex 生成:
"""安全除法,除零或类型错误返回 0"""
try:
return a / b if b != 0 else 0
except (TypeError, ZeroDivisionError):
return 0
Codex 自动学到了:
- 函数命名风格(
safe_前缀) - 文档字符串格式(三引号、功能+参数说明)
- 异常处理模式(try-except + 默认返回值)
- 防御性编程习惯(前置条件检查)
第八分钟:工具调用 —— 从写代码到做工程
新版 Codex 的 Agent 能力
# 用户 Prompt
"创建一个 Python 项目,实现 REST API,包含用户注册登录,用 SQLite 数据库"
# Codex 的思考过程(ReAct 模式)
1. Thought: 需要创建项目结构
Action: call_tool("create_directory", path="my_api")
2. Thought: 需要依赖管理文件
Action: call_tool("write_file", path="requirements.txt",
content="flask\nflask-sqlalchemy\nbcrypt\npyjwt")
3. Thought: 需要主应用文件
Action: call_tool("write_file", path="app.py", content="...")
4. Thought: 需要验证能否运行
Action: call_tool("execute_command", cmd="pip install -r requirements.txt")
5. Thought: 安装成功,测试启动
Action: call_tool("execute_command", cmd="python app.py")
工具类型
| 工具 | 用途 |
|---|---|
read_file |
理解现有代码 |
write_file |
创建/修改文件 |
execute_command |
运行命令、测试代码 |
search_code |
在项目中查找相关代码 |
web_search |
查文档、解决依赖问题 |
第九分钟:常见误区与优化
❌ 误区 1:Prompt 越长越好
真相:上下文有长度限制,冗长信息会挤占生成空间。
优化:
# ❌ 差:粘贴整个文件
[1000 行无关代码]
# 在这个函数里加缓存
# ✅ 好:只给相关部分
def fetch_data(url):
# TODO: 添加 Redis 缓存,TTL 5分钟
response = requests.get(url)
return response.json()
❌ 误区 2:一次要太多
真相:复杂需求分步骤,降低认知负荷。
优化:
步骤 1:生成基础结构
步骤 2:添加数据库模型
步骤 3:实现业务逻辑
步骤 4:加单元测试
❌ 误区 3:不验证就接受
真相:AI 会"幻觉"(生成看起来对但跑不通的代码)。
必须做的检查:
- 语法检查(直接运行或 IDE 标红)
- 依赖检查(import 的库是否存在)
- 边界测试(空值、异常输入)
- 安全审查(SQL 注入、XSS 风险)
第十分钟:总结 —— 三张图记住核心
图 1:工作流程
你的需求 → Token 化 → 模型预测 → 语法约束 → 代码输出
↑ ↓
└──────── 验证反馈 ← 运行测试 ←──────┘
图 2:Prompt 层次
Level 1: 一句话需求(能用,但可能不对)
↓
Level 2: 代码上下文 + 需求(生成符合风格的代码)
↓
Level 3: 示例 + 约束 + 需求(精准控制输出)
↓
Level 4: 多轮对话 + 工具调用(工程级开发)
图 3:选择策略
快速原型 → 高温度 + 简短 Prompt
生产代码 → 低温度 + 详细上下文 + 示例
复杂项目 → 分步骤 + 工具调用 + 人工审查
一句话带走
Codex 不是魔法,是概率 + 结构 + 上下文的艺术。
写好 Prompt = 给足上下文 + 明确约束 + 提供示例
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)