背景介绍
GPT Engineer 是一个基于需求描述自动生成项目源码的开源项目,主打轻量,灵活生成项目源码,可以在 AI 生成与人工生成之间进行切换,底层是基于 GPT-4 对应的编程能力,目前 Github 上 star 数量已经达到了 50k,算是一个十分火热的 AI 项目。
与大热的 AutoGPT 相比,GPT Engineer 更加轻量,没有使用递归的请求调用,避免陷入反复请求的死循环。同时 GPT Engineer 更加侧重代码生成,因此 prompt 上针对代码生成上做了针对性的优化。
动手实践
使用的 GPT Engineer 版本为 0.1.0,此版本提供的两个能力分别为:
- 创建新工程;
- 优化已有代码;
安装方式很简单,在 Python 环境下安装所需的依赖,然后配置上 OPANAI_KEY 即可,这部分可以查看 github readme,这边就不进一步介绍了。
创建新工程
使用 GPT Engineer 对研发人员相对简单,直接在工程所需的目录下创建一个 prompt
文件,在此文件上描述项目相关的信息,然后调用 gpt-engineer <project_dir>
即可生成所需的代码。下面选择一个实际的需求验证 GPT Engineer 的能力。
在之前的文章中提到了 DICOM 医疗图像,期望使用医疗图像进行机器学习的训练,因此需要构造基于医疗图像的 dataset。同时期望生成 dataset 时可以从 JSON 格式的标注文件中提取标签。对应需求需要具备处理 DICOM 解析,机器学习 dataset 构造,以及必要的标签解析提取标签的能力,对应的 prompt
如下所示:
期望基于 pytorch 实现支持 DICOM 图像的 dataset 用于深度学习训练,每个图像对应一个同名的 json 文件,其中包含 `label` 字段作为图像训练的标签
这部分只是简单的需求描述,没有做太多 prompt 的优化。最终输出了代码结构如下所示:
可以看到输出了对应的代码,并补充了依赖文件 requirements.txt
,并增加了相关测试脚本 run.sh
方便进行测试。下面具体看下主要的代码实现:
import os
import json
import pydicom
import torch
from PIL import Image
from torchvision.transforms import ToTensor
from torch.utils.data import Dataset
class DicomDataset(Dataset):
def __init__(self, image_dir, label_dir):
self.image_dir = image_dir
self.label_dir = label_dir
self.image_files = os.listdir(image_dir)
def __len__(self):
return len(self.image_files)
def __getitem__(self, idx):
image_file = self.image_files[idx]
image_path = os.path.join(self.image_dir, image_file)
label_path = os.path.join(self.label_dir, image_file.replace('.dcm', '.json'))
# Load DICOM image
dicom_image = pydicom.dcmread(image_path).pixel_array
# Convert DICOM image to tensor
image = ToTensor()(Image.fromarray(dicom_image))
# Load label
with open(label_path, 'r') as f:
label = json.load(f)['l