使用 OpenAI API 生成 JavaScript 代码的开发方式

使用 OpenAI API 生成 JavaScript 代码的开发方式

在现代软件开发中,自动化代码生成工具变得越来越重要。本文将介绍一种基于 OpenAI API 的开发方式,通过描述需求自动生成 JavaScript 代码。这种方式不仅提高了开发效率,还减少了手动编写代码的错误率。

1. 概述

本文展示的开发方式利用 OpenAI 的 API 来生成 JavaScript 代码。通过向 API 提供代码生成的需求描述,API 会返回符合要求的 JavaScript 代码片段。这种方式特别适合快速生成单一功能的代码,尤其是在需要频繁生成类似代码的场景中。

2. 代码结构

2.1 OpenAI API 初始化

首先,我们需要初始化 OpenAI API 客户端,并指定使用的模型和 API 密钥。

javascript 复制代码
import OpenAI from "openai";

const model = "claude-3-5-sonnet-20240620";
const openai = new OpenAI({
    baseURL: 'https://xxx/v1',
    apiKey: 'xxx'
});

2.2 代码生成函数

接下来,我们定义一个 jsFunctionGenerate 函数,该函数接收一个代码生成的需求描述,并返回生成的 JavaScript 代码。

javascript 复制代码
async function jsFunctionGenerate(functionDescription) {
    try {
        const completion = await openai.chat.completions.create({
            messages: [
                {
                    role: "system",
                    content: `
                    1. 你是一个代码生成器,负责根据用户需求生成单一的 JavaScript 代码。
                    2. 生成的代码格式为:function fnName(...) { return ... }。
                    3. 所有函数的参数都会由调用的时候传入,不需要多余的判断,
                    4. 输出仅包含纯 JavaScript 代码.
                    5. 仅返回文本代码,无需任何特殊格式或说明解释,不需要md格式!这一条是强制要求!。
                    `
                },
                {
                    role: "user",
                    content: functionDescription
                }
            ],
            model: model,
            stream: true,
            temperature: 0.2
        });

        console.log("Completion request initiated...");

        const stream = completion.toReadableStream();
        let generatedCode = "";

        for await (const chunk of stream) {
            let decode = new TextDecoder("utf-8").decode(chunk);
            const completion = JSON.parse(decode);
            const content = completion.choices[0].delta.content;
            if (content) {
                generatedCode += content;
            }
        }
        return generatedCode;
    } catch (error) {
        console.error("Error generating code:", error);
        throw error;
    }
}

2.3 生成中文名称函数

我们可以使用 jsFunctionGenerate 函数来生成一个生成中文名称的函数。

javascript 复制代码
const generateChineseName = await jsFunctionGenerate(`
    创建一个js方法,生成百家姓开头的中文名称(包括复姓),名称长度在2-4位长度(长度为4的只能是复姓开头),函数内部可以提供两个数组,
    firstName数组存储百家姓。lastName数组存储100个常用的中文汉字且不重复,
    要求函数能够控制生成名称长度的频率,名称长度为2和3的频率分别为0.3, 四位长度的为0.01。
    输出只是一个名称字符串即可。
    这是函数输入(firstNameList, lastNameList)
`).then(code => {
    console.log(code);
    return eval(`(${code})`);
});

2.4 生成百家姓和常用汉字数组

同样地,我们可以生成包含百家姓和常用汉字的数组。

javascript 复制代码
const firstNameList = await jsFunctionGenerate(`
    1. 生成一个 JavaScript 数组,包含不超过 100 个常见的百家姓(包括单姓和复姓)。
    2. 数组必须严格控制在 100 个以内,例如:['赵', '钱', '孙', '李', '欧阳', '诸葛', ...]。
    3. 仅返回数组,无需任何说明或解释。
`).then(code => {
    console.log(code);
    return eval(`(${code})`);
});

const lastNameList = await jsFunctionGenerate(`
    1. 生成一个包含常用汉字的 JavaScript 数组。
    2. 数组长度严格为 100 个,不包含生僻字。
    3. 仅返回数组内容,例如:['安', '柏', '博', '才', '德', '栋', ...],确保字数不超过 100
    4. 仅返回数组,无需任何说明或解释。
`).then(code => {
    console.log(code);
    return eval(`(${code})`);
});

2.5 测试生成的函数

最后,我们可以测试生成的 generateChineseName 函数,生成 100 个中文名称。

javascript 复制代码
for (let i = 0; i < 100; i++) {
    const name = generateChineseName(firstNameList(), lastNameList());
    console.log(name);
}

2.6 运行结果

javascript 复制代码
Completion request initiated...
function generateChineseName(firstNameList, lastNameList) {
    const lengthProbabilities = [0.3, 0.3, 0.4];
    const nameLength = Math.random() < 0.01 ? 4 : (Math.random() < 0.3 ? 2 : 3);
    let name = '';
    if (nameLength === 4) {
        const surname = firstNameList[Math.floor(Math.random() * firstNameList.length)];
        name += surname;
        for (let i = 0; i < 2; i++) {
            name += lastNameList[Math.floor(Math.random() * lastNameList.length)];
        }
    } else {
        const surname = firstNameList[Math.floor(Math.random() * firstNameList.length)];
        name += surname;
        for (let i = 0; i < nameLength - 1; i++) {
            name += lastNameList[Math.floor(Math.random() * lastNameList.length)];
        }
    }

    return name;
}
Completion request initiated...
function getCommonSurnames() {
    return ['赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈', '褚', '卫', '蒋', '沈', '韩', '杨', '朱', '秦', '尤', '许', '何', '吕', '施', '张', '孔', '曹', '严', 
'华', '金', '魏', '陶', '姜', '戚', '谢', '邹', '喻', '柏', '水', '窦', '章', '云', '苏', '潘', '葛', '奚', '范', '彭', '郎', '鲁', '韦', '昌', '马', '苗', '凤', '花', '方', 
'俞', '任', '袁', '柳', '酆', '鲍', '史', '唐', '费', '廉', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', 
'卞', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '臧', '计', '伏', 
'成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', 
'郭', '梅', '盛', '林', '刁', '钟', '徐', '邱', '骆', '高', '夏', '蔡', '田', '樊', '胡', '凌', '霍', '虞', '万', '支', '柯', '昝', '管', '卢', '莫', '经', '房', '裘', '缪', 
'干', '解', '应', '宗', '丁', '宣', '贲', '邓', '郁', '单', '杭', '洪', '包', '诸', '左', '石', '崔', '吉', '钮', '龚', '程', '嵇', '邢', '滑', '裴', '陆', '荣', '翁', '荀', 
'羊', '於', '惠', '甄', '曲', '家', '封', '芮', '羿', '储', '靳', '汲', '邴', '糜', '松', '井', '段', '富', '巫', '乌', '焦', '巴', '弓', '牧', '隗', '山', '谷', '车', '侯', 
'宓', '蓬', '全', '郗', '班', '仰', '秋', '仲', '伊', '宫', '宁', '仇', '栾', '暴', '甘', '钭', '厉', '戎', '祖', '武', '符', '刘', '景', '詹', '束', '龙', '叶', '幸', '司', 
'韶', '郜', '黎', '蓟', '薄', '印', '宿', '白', '怀', '蒲', '邰', '从', '鄂', '索', '咸', '籍', '赖', '卓', '蔺', '屠', '蒙', '池', '乔', '阴', '欎', '胥', '能', '苍', '双', 
'闻', '莘', '党', '翟', '谭', '贡', '劳', '逄', '姬', '申', '扶', '堵', '冉', '宰', '郦', '雍', '舄', '璩', '桑', '桂', '濮', '牛', '寿', '通', '边', '扈', '燕', '冀', '郏', 
'浦', '尚', '农', '温', '别', '庄', '晏', '柴', '瞿', '阎', '充', '慕', '连', '茹', '习', '宦', '艾', '鱼', '容', '向', '古', '易', '慎', '戈', '廖', '庾', '终', '暨', '居', 
'衡', '步', '都', '耿', '满', '弘', '匡', '国', '文', '寇', '广', '禄', '阙', '东', '殴', '殳', '沃', '利', '蔚', '越', '夔', '隆', '师', '巩', '厍', '聂', '晁', '勾', '敖', 
'融', '冷', '訾', '辛', '阚', '那', '简', '饶', '空', '曾', '毋', '沙', '乜', '养', '鞠', '须', '丰', '巢', '关', '蒯', '相', '查', '後', '荆', '红', '游', '竺', '权', '逯', 
'盖', '益', '桓', '公', '仉', '督', '晋', '楚', '闫', '法', '汝', '鄢', '涂', '钦', '段干', '百里', '东郭', '南门', '呼延', '归', '海', '羊舌', '微生', '岳', '帅', '缑', '亢', '况', '后', '有', '琴', '商', '牟', '佘', '佴', '伯', '赏', '南宫', '墨', '哈', '谯', '笪', '年', '爱', '阳', '佟', '第五', '言', '福'];
}
Completion request initiated...
function generateCommonChineseCharacters() {
    return ['安', '柏', '博', '才', '德', '栋', '福', '刚', '海', '杰', '俊', '凯', '良', '明', '宁', '鹏', '强', '荣', '山', '涛', '伟', '祥', '雄', '阳', '勇', '志', '忠', 
'成', '东', '峰', '光', '国', '华', '辉', '建', '军', '林', '民', '明', '南', '平', '庆', '瑞', '生', '世', '顺', '天', '文', '武', '旭', '学', '亚', '义', '永', '友', '宇', 
'远', '泽', '振', '正', '志', '中', '子', '宗', '祖', '宝', '保', '昌', '超', '晨', '诚', '达', '丹', '德', '迪', '定', '东', '恩', '发', '凡', '飞', '丰', '风', '锋', '福', 
'富', '刚', '高', '格', '根', '庚', '光', '贵', '海', '汉', '浩', '和', '恒', '宏', '洪', '鸿', '华', '怀', '辉', '会', '惠', '吉', '纪', '继', '家', '嘉', '坚', '建', '剑', 
'江', '杰', '金', '锦', '进', '景', '敬', '靖', '静', '久', '军', '君', '俊', '骏', '凯', '康', '科', '克', '坤', '兰', '朗', '乐', '磊', '力', '立', '利', '连', '良', '林', 
'霖', '凌', '龙', '隆', '路', '伦', '罗', '迈', '茂', '美', '梦', '米', '敏', '明', '铭', '木', '牧', '慕', '乃', '南', '能', '宁', '诺', '欧', '朋', '鹏', '平', '齐', '启', 
'谦', '乾', '强', '乔', '钦', '青', '清', '庆', '秋', '权', '全', '群', '然', '仁', '荣', '瑞', '润', '若', '森', '山', '善', '尚', '绍', '深', '升', '圣', '盛', '诗', '石', 
'时', '实', '士', '世', '守', '寿', '书', '舒', '顺', '思', '松', '泰', '涛', '腾', '天', '庭', '亭', '通', '同', '桐', '童', '图', '拓', '万', '威', '维', '伟', '卫', '文', 
'武', '熙', '希', '曦', '喜', '先', '贤', '显', '宪', '祥', '翔', '向', '潇', '晓', '孝', '心', '信', '星', '兴', '雄', '修', '旭', '轩', '学', '雪', '勋', '雅', '延', '岩', 
'炎', '彦', '焱', '阳', '洋', '尧', '业', '叶', '一', '伊', '依', '仪', '宜', '义', '毅', '易', '益', '逸', '毅', '银', '英', '永', '勇', '友', '宇', '雨', '玉', '育', '昱', 
'渊', '元', '远', '岳', '云', '泽', '展', '章', '长', '昭', '兆', '哲', '真', '振', '正', '政', '志', '中', '忠', '钟', '仲', '众', '重', '舟', '洲', '竹', '子', '宗', '祖', '尊', '左', '作', '祚'];
}
归实涛
司乃
左银善
通欧思
伊友
詹惠渊
支仪刚
习森竹
广罗剑
戴逸
范平展
欎伟立
阚英亚
步心
况长庭
和松哲
路和乃
濮远
利兴
蔚文友
沃俊
翁良保
边连
归善
於林熙
窦银恒
滑恩
佴富亭
亢喜尧
钱骏丰
韩怀桐
简风朋
水众嘉
狄义全
党升荣
佘宗森
吴久
嵇叶永
水子
元威乔
边竹昱
南门桐
叶山和
舄森
魏齐启
毋瑞
墨尧宇
郎俊
郑牧
桓建勇
龙罗鹏
南宫迈力
韩先叶
籍怀
秋诗刚
杭拓
杨顺
毋静洋
芮童刚
况诗木
索志杰
苏宇
严刚焱
庄通建
祝盛乐
焦童欧
蒯坤鹏
琴刚兴
商显辉
赖钦
景祚荣
连光光
伊玉
奚国涛
那中宇
储恩连
林晓延
吕岩展
王仲
逄然钟
诸飞
宁东秋
百里伦兆
於振
家岩寿
殷兆宁
黎霖
屈江远
姚钦阳
蒙民心
霍先宁
祖元
韦兰时
都亭中
狄乾
富青发
须格昭
廖祥东
卓才隆
鞠展

3. 总结

通过使用 OpenAI API 生成 JavaScript 代码,我们可以显著提高开发效率,尤其是在需要频繁生成单一功能代码的场景中。这种方式不仅减少了手动编写代码的工作量,还降低了代码错误的风险。希望本文能为你提供一种新的开发思路,帮助你在项目中更高效地生成代码。

相关推荐
雾恋7 分钟前
我用 trae 写了一个菜谱小程序(灶搭子)
前端·javascript·uni-app
烛阴37 分钟前
TypeScript 中的 `&` 运算符:从入门、踩坑到最佳实践
前端·javascript·typescript
Java 码农1 小时前
nodejs koa留言板案例开发
前端·javascript·npm·node.js
ZhuAiQuan2 小时前
[electron]开发环境驱动识别失败
前端·javascript·electron
nyf_unknown2 小时前
(vue)将dify和ragflow页面嵌入到vue3项目
前端·javascript·vue.js
胡gh2 小时前
数组开会:splice说它要动刀,map说它只想看看。
javascript·后端·面试
胡gh2 小时前
浏览器:我要用缓存!服务器:你缓存过期了!怎么把数据挽留住,这是个问题。
前端·面试·node.js
你挚爱的强哥2 小时前
SCSS上传图片占位区域样式
前端·css·scss
奶球不是球2 小时前
css新特性
前端·css
Nicholas682 小时前
flutter滚动视图之Viewport、RenderViewport源码解析(六)
前端