chatGLM3刚发布(10.27),打算尝试一下其code和计算能力。
共选取三个问题,难度从中等,偏困难,到困难。测试内容是正好手头上在做的事想让LLM来完成(偷懒),之前都是直接使用GPT,这次正好对比测试一下。
测试产品包括GPT3.5、文心一言、chatGLM,均使用web端版本(1105当天)。
测试问题一(难度中等):
我想要对一个int类型十进制数字x进行1024取余(即x%1024),为此我做了一个计算方法,计算方法如下:
1. 先将int类型数字转成二进制字符串
2. 保留二进制字符串的最后10位得到新字符串
3. 新字符串转成十进制数字
该计算是否可以得到原十进制数字对1024取余
期望答案:
本题为求余计算公式,LLM应知道计算方法正确,并能做出一定解释。
测试问题二(偏难):
我想要对一个int类型十进制数字x进行1024取余(即x%1024),为此我做了一个计算方法,计算方法如下:
1. 先将int类型数字转成二进制字符串
2. 保留二进制字符串的最后5位得到新字符串
3. 新字符串转成十进制数字
该计算是否可以得到原十进制数字对1024取余
期望答案:
本题为求余计算公式(1024求余应该是二进制10位,这里故意写5位),期望LLM指出计算方法错误,如果能解释错误和修改意见为优秀。
测试问题三(困难):
我有一个java语言int类型字段来记录字符串的特征值,该特征值用来做去重使用,意思是如果再遇到一个新的字符串的特征值与该特征值相同则认为这两个字符串相同。
需求如下:
#01 我希望提取字符串的md5+字符串长度两个特征合并放到这个int特征值里,字符串长度占最后10位,其他位放md5,不足的位数用0占位。
#02 字符串长度如果超过1024则取余计算字符串长度(字符串长度%1024)。
请根据需求帮我编写一个Java程序。
期望答案:
自定义字符串特征值算法,前22位md5+后10位字符串长度取余
总的来说:
GPT3.5还是完全领先;chatGLM在前两个问题上还可以拼一拼,在最后一个代码生成上还是很难提供有效帮助;文心一言三题均无法提供指导(差距太大)。
对比详情见腾讯文档:
https://docs.qq.com/sheet/DZWJXTHZQS0tLeXNl?tab=BB08J2
附GPT3.5第三题的代码
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.nio.charset.StandardCharsets;
public class FeatureValueGenerator {
public static int generateFeatureValue(String input) {
try {
// 计算MD5哈希值
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5Hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
// 计算字符串长度并取余
int length = input.length() % 1024;
// 将MD5哈希值的前面位数组成int值
int md5Value = 0;
for (int i = 0; i < Math.min(4, md5Hash.length); i++) {
md5Value = (md5Value << 8) | (md5Hash[i] & 0xFF);
}
// 将字符串长度合并到特征值的最后10位
int featureValue = (md5Value << 10) | length;
return featureValue;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return -1; // 错误情况下返回-1
}
}
public static void main(String[] args) {
String input = "YourStringHere"; // 替换成你的字符串
int featureValue = generateFeatureValue(input);
System.out.println("特征值: " + featureValue);
}
}