
Copilot、Cursor 让编程效率倍增,但它们的内部机制往往是个黑盒。作为一名开发者,你是否想过自己动手实现一个“AI编程助手”——不仅能生成代码,还能自动运行并返回结果?本文使用 Ollama + Qwen2.5-Coder,30 行 Python 代码带你跑通全流程,并深入探讨代码安全与解析技巧。
关键在于约束模型只输出可执行的 Python 代码块,避免额外解释:
SYSTEM_PROMPT = """你是一个专业的 Python 助手。
用户提出编程需求,你只返回可直接运行的 Python 代码,用 ```python ... ``` 包裹。
不要添加任何解释、注释或额外文字。"""使用 Ollama 的 Python SDK 调用模型,并用正则提取代码块:
import ollama
import re
def generate_code(requirement: str) -> str:
response = ollama.chat(
model="qwen2.5-coder:7b",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": requirement}
]
)
raw = response["message"]["content"]
match = re.search(r"```python\n(.*?)\n```", raw, re.DOTALL)
return match.group(1) if match else raw直接 exec() 风险极高。我们利用 Python 的 restricted 模式(__builtins__ 限制)并禁止危险模块:
import subprocess
import tempfile
import os
def safe_run(code: str, timeout: int = 5) -> str:
# 静态检查危险模块
dangerous = ["import os", "import shutil", "import socket", "eval", "exec"]
for word in dangerous:
if word in code:
return "[安全检查] 检测到危险操作,已拦截。"
with tempfile.NamedTemporaryFile(mode="w", suffix=".py", delete=False) as f:
f.write(code)
tmp_path = f.name
try:
result = subprocess.run(
["python", tmp_path],
capture_output=True,
text=True,
timeout=timeout
)
return result.stdout if result.stdout else result.stderr
except subprocess.TimeoutExpired:
return "[超时] 代码执行超过 %s 秒" % timeout
finally:
os.unlink(tmp_path)def ai_programmer(requirement: str):
print(f"需求:{requirement}")
code = generate_code(requirement)
print(f"生成的代码:\n{code}")
output = safe_run(code)
print(f"执行结果:\n{output}")
if __name__ == "__main__":
ai_programmer("计算斐波那契数列第10项并打印")运行输出(示例):
需求:计算斐波那契数列第10项并打印
生成的代码:
def fib(n):
a,b=0,1
for _ in range(n):
a,b=b,a+b
return a
print(fib(10))
执行结果:
55pylint 或 black 对生成代码先格式化再执行。整个实现不足百行代码,却涵盖了 Prompt 工程、代码解析、安全沙箱、异常处理等 AI 编程助手的核心要素。你可以基于此快速定制内部开发工具,或嵌入 CI/CD 流程实现自动化代码生成。AI 编程不是魔法,只要拆解清楚,每个开发者都能打造自己的“副驾驶”。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。