11月7日凌晨的OpenAI第一次开发者大会,除了速度提升、服务使用费用的减少、开发者生态以外,最让我震撼的是,GPTS是ChatGPT的定制版本,是通过简单配置就可以完成一个使用ChatGPT、集成系统和数据服务的智能助手。比如OpenAI开发者体验主管演示的,当你想去一个城市旅游,那么旅游攻略、城市景点轨迹设计、航班登机、汇率计算等等都可以智能完成。感觉ChatGPT马上就会变成一个24x7完全智能的私人管家。
做点什么哪,一直很喜欢买彩票,要不让ChatGPT帮我推荐一下大乐透的号码吧。只是为了娱乐,提倡快乐彩票、理智购买。
第一步、我们使用ChatGPT-4来看看什么样的提示词可以得到我们想要的分析、推荐结果。ChatGPT是很有原则的,如果你直接让它预测彩票号码,它会非常委婉的拒绝。
第二步、既然直接问不行,那就迂回一下,那我就把大乐透的号码球产生的过程描述一下吧,并且针对每个数字提出一个简单的概率问题。
Instruction: 你是数据分析大师,我将35个完全相同的小球放在一个容器中,小球上标记处1到35不重复的数字,容器有一个圆形小洞,我每次旋转容器让一个小球掉出,再旋转容器让另外一个小球掉出,直到一共掉出5个小球算是一组,我会记录每次掉出的小球的数字
次数 | 掉出小球上面的数字 |
1 | 8, 11, 19, 22, 29 |
2 | 4, 6, 7, 9, 24 |
...... | ....... |
23 | 4, 5, 18, 20, 25 |
Prompt: 列出前10个出现概率最大的数字和概率值
上面斜体字就是我要使用的指令和提示词,在提交给ChatGPT的时候出现了几种情况。
当然它会提供解释和建议
我把代码放在编译器中方便阅读
# Now we will input the complete data provided by the user to calculate the probabilities correctly.
# Data provided by the user
ball_drops_complete = [
[8, 11, 19, 22, 29],
[4, 6, 7, 9, 24],
# ... all the way to ...
[1, 5, 7, 12, 13]
]
# Calculate the total number of rounds
num_rounds = len(ball_drops_complete)
# Flatten the list of lists to get one big list of all the balls dropped
all_balls_dropped = [ball for round in ball_drops_complete for ball in round]
# Count the frequency of each ball number
ball_frequency = {ball: all_balls_dropped.count(ball) for ball in range(1, 36)}
# Calculate the probability for each ball number
# Since each round 5 balls are dropped, the total number of balls dropped is 5 times the number of rounds
total_balls_dropped = 5 * num_rounds
ball_probability = {ball: freq / total_balls_dropped for ball, freq in ball_frequency.items()}
# Sort the ball numbers by their probability and get the top 10
top_10_balls = sorted(ball_probability.items(), key=lambda item: item[1], reverse=True)[:10]
top_10_balls
除了代码,ChatGPT也生成了基于这个代码运行的结果
很奇怪的一点是,10个出现次数最多的数字是不对的,几率也是不对的,一看就不像计算出来的,更像是随意生成的。如果我用自己的环境跑完的结果如下就是正确的。
根据自己的经验,原因可能有几个
第三步、分析完单一数字的概率以后,我们来分析一下数字组合出现的概率
使用和第二步类似的指令,提示换成下面的内容
Prompt: 识别同时出现几率高的号码
ChatGPT给出了分析思路和代码,但是毫无意外,这个分析结果还是错的。
from collections import defaultdict
import itertools
# 假设您的数据是这样的格式,每个列表代表一次抽取的5个数字
data = [
[8, 11, 19, 22, 29],
[4, 6, 7, 9, 24],
[2, 18, 24, 25, 34],
# ... 其他数据
[1, 5, 7, 12, 13]
]
# 初始化一个字典来存储所有数字对及其出现次数
pair_counts = defaultdict(int)
# 遍历数据,对每组数字中的每对数字进行计数
for group in data:
# itertools.combinations用于生成数字的所有可能组合(这里是两两组合)
for pair in itertools.combinations(group, 2):
pair_counts[pair] += 1
# 按出现次数对数字对进行降序排序
sorted_pairs = sorted(pair_counts.items(), key=lambda x: x[1], reverse=True)
# 获取出现次数最多的前10对数字
top_10_pairs = sorted_pairs[:10]
# 打印结果
for pair, count in top_10_pairs:
print(f"数字对 {pair} 出现了 {count} 次")
使用个人环境跑出正确的结果。
第四步、尝试将这部分逻辑添加到GPTs中
考虑到ChatGPT分析思路严谨、代码正确,但是分析结论是错误的,个人感觉数据分析类需求无法直接通过GPTs来配置完成。
如果需要代码和提示词请留言,欢迎多多拍砖