OpenAI Codex 是基于 GPT 系列微调的代码生成模型,能够将自然语言指令转换为多种编程语言的代码。上一篇文章介绍了基础调用方法,本文将进一步深入 API 参数调优、高级提示技巧,并实战构建一个 FastAPI 代码生成微服务,帮助开发者将 Codex 集成到生产环境。
Codex 的 Completion.create 接口提供了多个参数来控制生成行为,正确调参可显著提升代码质量与稳定性。
\n\n、""" 或 # End 时停止,避免生成无关内容。import os 等敏感语句。以下代码展示了参数调优后的调用示例:
import openai
openai.api_key = "your-api-key"
def generate_code(prompt, max_tokens=500, temperature=0, stop=None):
response = openai.Completion.create(
model="code-davinci-002",
prompt=prompt,
temperature=temperature,
max_tokens=max_tokens,
top_p=1.0,
frequency_penalty=0.0,
presence_penalty=0.0,
stop=stop or ["\n\n", "```"]
)
return response.choices[0].text.strip()Codex 对提示中的上下文极其敏感。以下技巧可大幅提升生成代码的准确率:
prompt = '''def quicksort(arr):
"""对列表进行快速排序,返回新列表,不修改原列表。"""
if len(arr) <= 1:
return arr
pivot = arr[0]
left = [x for x in arr[1:] if x <= pivot]
right = [x for x in arr[1:] if x > pivot]
return quicksort(left) + [pivot] + quicksort(right)
'''在 prompt 中先给出部分实现,Codex 会延续风格。若需要更完整实现,可只给出签名和描述,让模型补充。
Codex 能从少量示例中学习模式。例如生成 SQL 查询:
prompt = """-- 示例1:查询所有年龄大于18的用户
SELECT * FROM users WHERE age > 18;
-- 示例2:查询最近7天注册的用户
SELECT * FROM users WHERE created_at > DATE_SUB(NOW(), INTERVAL 7 DAY);
-- 任务:查询购买了商品ID为100的用户姓名和邮箱
SELECT
"""在 prompt 开头注明“使用 Python 3 + FastAPI”或“使用 React Hooks”,帮助模型选择正确的库和语法。
下面使用 FastAPI 封装 Codex,提供一个 REST API,接收自然语言描述,返回生成的代码片段。
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import openai
import os
from dotenv import load_dotenv
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
app = FastAPI()
class CodeRequest(BaseModel):
description: str
language: str = "python"
max_tokens: int = 500
temperature: float = 0.0
@app.post("/generate")
async def generate_code(req: CodeRequest):
prompt = f"使用{req.language}实现以下功能:\n{req.description}\n\n代码:\n"
try:
response = openai.Completion.create(
model="code-davinci-002",
prompt=prompt,
temperature=req.temperature,
max_tokens=req.max_tokens,
stop=["\n\n", "```"]
)
code = response.choices[0].text.strip()
return {"code": code}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))运行服务:
uvicorn main:app --reload --port 8000调用示例:
curl -X POST http://localhost:8000/generate \
-H "Content-Type: application/json" \
-d '{"description":"读取CSV文件并计算每列平均值","language":"python"}'该服务可进一步扩展:加入缓存、用户认证、日志记录,或作为内部工具供团队使用。
stream=True 参数实现 token 级流式输出,提升用户体验(可通过 WebSocket 或 SSE 实现)。import subprocess、eval)。max_tokens 上限,防止滥用。gpt-3.5-turbo-instruct 或更新的代码模型,它们在多轮对话和指令遵循上表现更佳。通过深入理解 API 参数和提示工程,开发者可以构建高质量、稳定的代码生成服务。Codex 不仅适合个人效率工具,也可集成到 IDE 插件、CI/CD 流水线或内部开发平台中。随着模型能力的演进,代码生成将成为软件开发流程中不可或缺的一环。掌握这些进阶技巧,你将能够充分利用 Codex 的潜力,显著提升生产力。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。