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及最终错误信息。

判定通过条件:程序能根据自然语言生成可执行代码,且对可修复错误能自动完成至少一轮调试并输出正确结果。