先上 prompt
作为一个精通 JavaScript 的软件开发者,你的挑战是编写一段指定功能的代码片段。
你要编写的代码是一个函数体部分,即不包含最外层的 function fn_name {}。
所有需要使用的变量都会在代码执行时替换成真实值,你需要在最开始定义这些变量,例如 var date = $日期$;。示例
INPUT:
实现从日期字段中提取年份的函数
OUTPUT:
```
var date = $日期$;
const dateObj = new Date(date);
return dateObj.getFullYear();
```RULES:
返回的是一个可以放到 new Function 参数内执行的函数体。
函数的运行环境是一个沙盒,所以你不可以使用任何类库,所有的代码都是原生实现。
返回的代码要保证可执行,不要返回伪代码,不要出现未定义的函数。
DO NOT USE TEMPLATE LITERALS.
函数体最后一定要 return 结果!你的挑战是编写一段指定功能的代码片段
上面的只是例子,下面我会给你真实的任务,理解了请回复 OK
结果返回格式如下:
函数体代码
把这段 prompt 作为内容发送到对话,后面就可以发送具体要求了。在 ChatGPT 3.5 和通义千问下测试都取得了不错的效果,生成的代码把顶部定义的变量替换成真实字段就能直接跑起来了。
文心一言,星火大模型,智谱清言均无法理解 prompt,表现结果甚至不如开源模型 Yi-34B-Chat。Yi-34B-Chat 虽然回答的代码一直有 bug,但是它理解了指令。
回答结果不满意时可以发送修改要求让它继续调整。对话回合较多后大模型可能会忘记它要做什么(通义千问记性不行,忘的很快),当它开始胡言乱语时再发一次 prompt 就好。
可能的问题:
函数使用模板字符串,模板字符串出现了成对的 $ 导致函数编辑器识别成了字段变量。解决方法是回复『不要使用模板字符串』。
有一定的几率出现函数体最后没有 return 结果,这时回复 『需要 return 结果』。
返回的代码定义变量时加了引号,比如 var date = '$日期$'; 替换成字段时记得不要保留引号。
一些 ChatGPT3.5 的回复:
生成唯一编号,由数字和大写字母组成,日期开头
function generateUniqueCode() {
var date = new Date();
var year = date.getFullYear().toString().slice(-2);
var month = (date.getMonth() + 1).toString().padStart(2, '0');
var day = date.getDate().toString().padStart(2, '0');
var characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var codeLength = 8;
var uniqueCode = year + month + day;
for (var i = 0; i < codeLength; i++) {
var randomIndex = Math.floor(Math.random() * characters.length);
uniqueCode += characters.charAt(randomIndex);
}
return uniqueCode;
}
var uniqueCode = generateUniqueCode();
return uniqueCode;
从一段文字提取中国大陆手机号邮箱换行分隔返回
var text = $文本$;
function extractPhoneAndEmail(text) {
var phoneRegex = /1[3456789]\d{9}/g;
var emailRegex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g;
var phones = text.match(phoneRegex) || [];
var emails = text.match(emailRegex) || [];
var result = phones.concat(emails).join('\n');
return result;
}
return extractPhoneAndEmail(text);
把小数转换成分数,需要化简到最简
var decimal = $小数$;
function gcd(a, b) {
if (b === 0) {
return a;
} else {
return gcd(b, a % b);
}
}
function decimalToFraction(decimal) {
var numerator = decimal;
var denominator = 1;
while (numerator % 1 !== 0) {
numerator *= 10;
denominator *= 10;
}
var divisor = gcd(numerator, denominator);
numerator /= divisor;
denominator /= divisor;
return numerator + '/' + denominator;
}
return decimalToFraction(decimal);
输入 prompt 试试吧!