大数跨境

编写其他 Python 脚本的 Python 脚本

编写其他 Python 脚本的 Python 脚本 索引目录
2025-05-08
3
导读:“如果你的代码可以自己编写,甚至修复自己的错误,那会怎样?”这听起来像魔术。

“如果你的代码可以自己编写,甚至修复自己的错误,那会怎样?”

这听起来像魔术。然而,借助一个由 GPT 和智能错误修复循环驱动、能够编写其他 Python 脚本的 Python 脚本,您就可以将其变为现实。您将构建一个可自我演进的脚本生成器:一个能够将简单的提示符转换为可运行的 CLI 实用程序、测试其输出并在出现问题时自动重试的工具

不吹毛求疵,不炒作。只需一步步指导,即可立即使用。最终,您将掌握如何创建自己的 AI 驱动代码生成器,从而减少调试时间,将更多时间投入到构建中。


1. 核心循环:生成 → 执行 → 修复

从本质上讲,我们的自我进化生成器循环执行三件事:

  1. 通过 GPT生成代码

  2. 在沙箱内执行

  3. 通过将错误反馈给 GPT 来修复故障

生成-执行-修复循环将一次性代码生成器转变为自动调试机器

信息:可以将其想象为测试驱动开发,但人工智能会同时编写代码和测试,然后修复故障直到一切通过。

2. 设置:准备好你的环境

2.1 安装依赖项

您只需要两个库:

pip install openai rich
  • openai– 调用 GPT-4

  • rich– 用于彩色、结构化的控制台输出

2.2 配置您的 API 密钥

export OPENAI_API_KEY="your_key_here"

在你的脚本中:

import os, openai
openai.api_key = os.getenv("OPENAI_API_KEY")
信息:将密钥存储在环境变量或 Vault 中。切勿对其进行硬编码。

3. 生成器函数详解

下面是一个完整注释的实现。请阅读每个步骤,然后自己尝试一下。

import openai
from rich.console import Console

console = Console()

def generate_and_debug(prompt: str, max_retries: int = 3) -> str:
"""
Generate Python code for `prompt`, execute it, capture errors,
and ask GPT to fix until success or retries exhausted.
"""
system_msg = {
"role": "system",
"content": (
"You are a Python expert. "
"Write concise, functional Python code. "
"Include necessary imports and error handling."
)
}

user_msg = {"role": "user", "content": prompt}
code = None

for attempt in range(1, max_retries + 1):
console.rule(f"[bold blue]Attempt #{attempt}")
# 1) Generate or repair code
messages = [system_msg, user_msg]
response = openai.ChatCompletion.create(model="gpt-4", messages=messages)
code = response.choices[0].message.content

console.print("[green]Generated code:[/]")
console.print(code, style="dim")

# 2) Try executing in isolated namespace
namespace = {}
try:
exec(code, {"__builtins__": {}}, namespace)
console.print("[bold green]Success![/]")
return code
except Exception as error:
console.print(f"[red]Error:[/] {error}")
# 3) Prepare repair prompt
user_msg = {
"role": "user",
"content": (
f"The code you wrote:\n```
{% endraw %}
python\n{code}\n
{% raw %}
```\n"
f"Raised this error:\n```
{% endraw %}
\n{error}\n
{% raw %}
```\n"
"Please fix the code."
)
}

raise RuntimeError(f"Failed after {max_retries} attempts")
信息:出于安全考虑,我们限制了内置功能。在生产环境中,请考虑使用 Docker 或子进程沙盒。

4. 真实案例:构建网页爬虫

4.1 第一个提示

提示
“编写一个 Python 脚本,从https://suoyinmulu.com/抓取引文,将其保存到 quotes.csv,并处理网络错误。”

4.2 生成的代码(尝试 1)

import requests
from bs4 import BeautifulSoup
import csv

response = requests.get("https://suoyinmulu.com/")
soup = BeautifulSoup(response.text, "html.parser")
quotes = [q.text for q in soup.select(".text")]

with open("quotes.csv", "w", newline="") as f:
writer = csv.writer(f)
for quote in quotes:
writer.writerow([quote])
  • 问题:没有错误处理requests.get

4.3 修复提示与修复(尝试 2)

GPT 增加了重试逻辑:

import requests, time
from bs4 import BeautifulSoup
import csv

for i in range(3):
try:
response = requests.get("https://suoyinmulu.com/", timeout=5)
break
except requests.exceptions.RequestException:
time.sleep(2)
else:
raise SystemExit("Failed to fetch after 3 tries")

soup = BeautifulSoup(response.text, "html.parser")
...
  • 结果:对瞬态网络故障具有鲁棒性。


5. CLI 包装器:单行工具生成

将生成器包装在 CLI 中,以便您可以动态创建工具:

if __name__ == "__main__":
import argparse

parser = argparse.ArgumentParser(description="AI‑powered script generator")
parser.add_argument("task", help="Describe the script to generate")
args = parser.parse_args()

code = generate_and_debug(args.task)
filename = "generated.py"
with open(filename, "w") as f:
f.write(code)
console.print(f"Saved [bold]{filename}[/bold]")
python generator.py "organize my Downloads folder: move all .pdf files into a folder named PDFs"
信息:下一步——使其成为 Web 服务或集成到 CI/CD 中。

6. 统计数据和绩效指标


公制 无AI循环 使用 AI 循环(重试 3 次)
一次通过成功率 ~30% ~85%
平均调试周期 不适用 1.8
每天节省的开发人员时间 0分钟 ~45分钟


来源:对 50 种提示类型(抓取工具、文件工具、机器人)进行内部测试。

7. 常见陷阱及解决方案


陷阱 解决方案
缺少导入 →NameError 在系统提示中添加“确保所有导入都存在”。
生成的代码中的无限循环 将 exec 包装在超时中或添加迭代计数器。
不安全操作 具有限制的沙盒builtins或使用 Docker 进行隔离。
GPT API 截断了较大的输出 要求 GPT 将代码拆分成模块,然后在本地重新组装。


信息:记录对文件的每次尝试可以帮助您审核重试之间发生的变化。

8.高级扩展

  1. 参数扫描

  • 使用不同的超参数(例如,抓取延迟)生成脚本的变体。

  1. 自动化测试


  • 要求 GPT 为生成的代码编写pytest测试,然后在循环中运行它们。

  1. Web 用户界面


  • 构建一个简单的基于 Astro 的前端,以便非开发人员可以输入提示并下载脚本。


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读1.1k
粉丝0
内容444