4. 开发一个基于大模型的代码生成助手
任务说明
构建一个基于大模型API的代码生成助手,输入自然语言需求,输出对应的Python代码。若生成代码可直接执行,则自动运行并返回结果;若执行报错,则提取错误信息,将错误与原始需求合并后再次请求模型进行修复,最多重试2次。
环境依赖
需要安装 库(v1.x),并准备一个兼容接口的大模型API服务(如官方、DeepSeek、通义千问等),配置 BASE_URL 与 环境变量。
完整实现
import os
import
client = .(
=os.getenv(""),
base_url=os.getenv("BASE_URL", "https://api..com/v1")
)
SYSTEM_PROMPT = """你是一个Python代码生成助手。根据用户自然语言描述,只输出可直接运行的Python代码,不要输出解释、注释或Markdown围栏。"""
def generate_code(prompt: str) -> str:
resp = client.chat.completions.create(
model=os.getenv("MODEL_NAME", "-mini"),
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": prompt}
],
temperature=0.2
)
return resp.choices[0].message.content.strip()
def debug_code(code: str, error_msg: str, original_prompt: str) -> str:
fix_prompt = f"""原始需求:{original_prompt}
生成的代码执行报错:
{error_msg}
请修复代码,只输出修正后的完整Python代码。"""
return generate_code(fix_prompt)
def run_code(code: str) -> tuple:
"""执行代码,返回 (是否成功, 输出或错误信息)"""
try:
import io, contextlib
output = io.StringIO()
with contextlib.redirect_stdout(output):
exec(code, {"__name__": "__main__"})
return True, output.getvalue().strip()
except Exception as e:
return False, f"{type(e).__name__}: {e}"
def code_assistant(prompt: str, max_retries: int = 2) -> dict:
code = generate_code(prompt)
for attempt in range(max_retries + 1):
success, result = run_code(code)
if success:
return {"status": "success", "code": code, "output": result, "attempts": attempt}
if attempt < max_retries:
code = debug_code(code, result, prompt)
return {"status": "failed", "code": code, "error": result, "attempts": max_retries}
if __name__ == "__main__":
user_input = input("请输入自然语言需求:")
result = code_assistant(user_input)
print("=" * 40)
print("生成代码:")
print(result["code"])
print("=" * 40)
if result["status"] == "success":
print("执行输出:")
print(result["output"])
else:
print("执行失败,最终错误:")
print(result["error"])
运行方式
export ="your-"
export BASE_URL="https://api.deepseek.com/v1" # 按需修改
export MODEL_NAME="deepseek-chat" # 按需修改
python code_assistant.py
验证方法
输入自然语言需求,例如:计算斐波那契数列前10项并打印。观察程序输出:
- 成功路径:若生成代码可执行,输出包含“生成代码”和“执行输出”,且执行输出为
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34](预期输出,与代码逻辑一致)。 - 调试路径:故意输入一个易错需求,如
将字符串'123'转为整数并加10,打印结果,若首次生成代码有误,程序会自动修复并重试,最终输出133。 - 失败路径:输入超出模型能力的需求(如“用Python实现一个完整操作系统”),程序在重试2次后返回
status: failed及最终错误信息。
判定通过条件:程序能根据自然语言生成可执行代码,且对可修复错误能自动完成至少一轮调试并输出正确结果。