使用ERNIE SDK和Comate开发AI“划拳”游戏!

embedded/2024/10/21 9:14:19/

370722a72dea689ee8b9c5bd045e6887.gif

作者晓飞好,飞桨星河社区开发者,金融行业软件开发工程师,对大模型应用开发比较感兴趣。个人主页链接:https://aistudio.baidu.com/personalcenter/thirdview/48323

技术的迅速发展为我们带来了无限的创新可能,大模型技术也极大地降低了AI技术落地的门槛。

本项目将使用ERNIE SDK和智能代码助手Comate开发一个中国传统游戏——划拳。在游戏中,我们借助大模型的强大能力,让大模型扮演你的划拳对手,玩家可以通过简单的操作与大模型进行游戏

划拳是汉族民间饮酒时一种助兴取乐的游戏,起源于汉代,以其简单、有趣的特点深受人们喜爱。

划拳的游戏规则如下:

1. 两人同时伸出一只手,先攥起拳头,代表财不外露。再伸出一到五个手指,表示从零到五之间的数字,同时嘴里大声喊出两人所出数字之和。

2. 两人都猜对或都猜错,则划拳继续。直到一方猜对才为赢家,而猜错方为输家,要罚酒。

这套酒令完整的说法是:“一条龙、哥俩好、三星照、四喜财、五魁首、六六六、七个巧、八匹马、九连环和十全有”。

希望在你独自一人喝酒的时候,能通过这款游戏找到乐趣。

1876a2267b3a1d78f6c279a63523a1d5.png

项目方案

fe8e860e99da9d2d912ed3a20a87e230.png

图片来源:https://baike.baidu.com/item/划拳/4430188

玩划拳游戏需要玩家手口并用,具体流程如下:

1.开始阶段:两位玩家同时伸出一只手,用攥起的拳头(表示零)和伸出一到五个手指表示从零到五这几个数字。与此同时,两位玩家嘴里喊出从0到10的数字。

2.判断阶段:比较两位玩家伸出的手指表示的数字相加的和与其中一位玩家嘴里喊出的数字是否相同。如果相同,则喊出该数字的玩家获胜;如果不同,则继续下一轮。

3.惩罚阶段:输的玩家需要按照规则喝酒或其他约定的惩罚。

实现上述的流程的关键是设计合适的prompt,我们希望模型扮演一个划拳游戏的玩家,核心是希望模型输出两个数字:出拳数字和猜拳数字,并且返回内容必须必须是JSON格式的,不能有任何额外的信息。

核心prompt设计如下:

game_prompt = ("你现在在陪我玩划拳游戏,我已经出拳了,现在到你了。你的任务如下:""1.输出一个0-5之前的数字,表示你的出拳数字;""2.输出一个0-10之间的数字,表示你的猜拳数字;""3.将两个数字以{'gesture':'','predict':''}的JSON格式返回,其中gesture表示你的出拳数字,predict表示你的猜拳数字。""注意: 除了JSON格式数字以外,不要返回其他任何内容。")

代码实现:

# 安装依赖
! pip install -U erniebot
# 实现调用ERNIE SDK接口的方法
import erniebot
# 调用ERNIE SDK,实现智能对话
class ErnieLLM():def __init__(self, token):erniebot.api_type = 'aistudio'erniebot.access_token = tokendef predict(self, txt):model = 'ernie-bot'messages = [{'role': 'user', 'content': txt}]response = erniebot.ChatCompletion.create(model=model,messages=messages,)return response.result
# 核心prompt
game_prompt = ("你现在在陪我玩划拳游戏,我已经出拳了,现在到你了。你的任务如下:""1.输出一个0-5之前的数字,表示你的出拳数字;""2.输出一个0-10之间的数字,表示你的猜拳数字;""3.将两个数字以{'gesture':'','predict':''}的JSON格式返回,其中gesture表示你的出拳数字,predict表示你的猜拳数字。""注意: 除了JSON格式数字以外,不要返回其他任何内容。")
import json
# 实现获取模型出拳和猜拳数字的方法
def predict_gesture(token):# 请求文心一言模型的APIllm = ErnieLLM(token)result = llm.predict(game_prompt)# 提取JSON部分start_index = result.find('{')end_index = result.rfind('}') + 1json_str = result[start_index:end_index]# 将JSON字符串转换为Python字典json_obj = json.loads(json_str)return json_obj["gesture"], json_obj["predict"]# 保存酒令口号与数字的映射关系
alias_dict = {'一条龙': 1,'哥俩好': 2,'三星照': 3,'四喜财': 4,'五魁首': 5,'六六六': 6,'七个巧': 7,'八匹马': 8,'九连环': 9,'十全有': 10
}# 保存数字与酒令口号的映射关系
alias_dict_reverse = {v: k for k, v in alias_dict.items()}
# 实现判断游戏胜负的逻辑
def game_process(token, user_gesture, user_predict):# 用户输入的出拳数字user_num = int(user_gesture)# 用户输入的猜拳数字user_predict = int(alias_dict[user_predict])# 调用模型进行预测model_gesture, model_predict = predict_gesture(token)# 计算双方手指数之和total_fingers = user_num + int(model_gesture)print(f"指数之和:{total_fingers}")print(f"用户预测:{user_predict}")print(f"模型预测:{model_predict}")# 胜负判定if user_predict == total_fingers and model_predict != total_fingers:result = "我输了,自罚一杯!" elif user_predict != total_fingers and model_predict == total_fingers:result = "哈哈,你输了!请自罚一杯!"else:result = "平局!再来!"
return result, alias_dict_reverse[model_predict], model_gesture
# 核心逻辑测试
print(game_process("替换为你的token",5,"八匹马"))
'ernie-bot' will be deprecated in the future. Please use 'ernie-3.5' instead.
指数之和:8
用户预测:8
模型预测:7
('我输了,自罚一杯!', '七个巧', 3)

ac5efe3467a275615084d230afc03cbc.png

Comate 提效

飞桨星河社区最近上线支持在VSCode中一键启动Comate。在本项目代码编写过程中,我也体验了使用Comate辅助进行代码编写,极大提高了编码效率,给飞桨星河社区点赞。

具体的使用方法可以参考下面的链接:智能代码助手Comate上线星河社区(https://aistudio.baidu.com/activitydetail/1503019315)下面分享一下我使用Comate的例子:

1、生成较为复杂的Python字典

9238785bdcf98b4c758d58d8e66b36e7.png

2、反转字段key、value

660e1fc3fd3cec27493ff4fa6e92004f.png

3、生成初步的Gradio App页面

6783b00e6e30a1879c40e85230be707a.png

可以看到,生成的代码质量相当不错,稍微改一下就能用啦!除了生成代码,Comate还有代码补全、自动注释等其他功能,这些功能和更多使用技巧读者可以自行探索!

7540a9b4470e72fa62f355aaf3f38884.png

效果展示

6a2d7ba8fe482c0f2b31986bfa6bf0d0.png

游戏体验地址:https://aistudio.baidu.com/application/detail/24086

1f5f463621799dfd8159a8308b925847.png

总结

通过ERNIE SDK调用文心大模型的能力开发大模型应用是不是超简单?只需要将你的想法转化为合适的prompt,任何想法都能轻易实现!

不会写prompt?没关系!免费课程教你:

https://aistudio.baidu.com/education/group/info/28604

快动动脑筋,行动起来吧!

参考资料

1.划拳游戏介绍:

https://baike.baidu.com/item/%E5%88%92%E6%8B%B3/4430188?fr=ge_ala

2.ERNIE SDK文档:

https://ernie-bot-agent.readthedocs.io/zh-cn/latest/

3.ERNIE SDK的具体使用教程参考:

https://aistudio.baidu.com/projectdetail/6779542?channelType=0&channel=0

d53f9179f5bbf75963e25b56abc1a595.png

a28e79c1f7fbe3f3965397ef844d9f93.png

b4c013b7c81a0b96b79c0338b0034c2c.png

83cc15b01886d5b588c63a91419784ac.png

1a205ea50443af4d19b7f477f32bfc3c.gif

关注【飞桨PaddlePaddle】公众号

获取更多技术内容~


http://www.ppmy.cn/embedded/10619.html

相关文章

图像处理基础知识

图像处理基础知识 图像 1、模拟图像 模拟图像,又称连续图像,是指在二维坐标系中连续变化的图像,即图像的像点是无限稠密的,同时具有灰度值(即图像从暗到亮的变化值)。 2、数字图像 数字图像&#xff0…

asp.net core rabbitmq的基本使用

要在 .NET Core 应用程序中实现使用 RabbitMQ 发送和接收消息的简单示例,首先需要在开发机器上安装 RabbitMQ 服务器并运行它。接下来,我们将创建两个控制台应用程序:一个用于发送消息(生产者),另一个用于接…

oracle_申明与赋值

1.格式 --1.程序块结构 declare --申明部分 begin --执行部分 end; 2.写一个空的程序块 --1.程序块结构 declare --申明部分 begin --执行部分 null; end; 在控制台输出【hello world】 --2.简单的程序输入 DECLARE --申明部分 BEGIN --…

公开征集 | 2024年区块链创新大赛赛题有奖征集正式启动

为进一步提升区块链作为信任基础设施在数据流通、实体经济、社会治理等方面的应用支撑作用,在国家区块链技术创新中心的指导下,长安链开源社区联合多所国内知名学会协会、高等院校共同筹办2024年区块链创新大赛。 赛题公开征集 区块链是实现数据可信共享…

浅谈Java NIO

Java NIO(New Input/Output)是Java平台上一种全新的IO API,相较于传统的Java I/O(也称为BIO,阻塞I/O),NIO引入了非阻塞I/O和通道(Channel)的概念,以及缓冲区&…

南京邮电大学数学实验A 作业1 Matlab基础 答案 | 《MATLAB数学实验》第三版 第一章 课后习题答案

若要获得更好的阅读体验,请前往 链接。 1(课本习题1) 执行下列命令,观察其运算结果,理解其意义: (1) [1 2; 3 4]10-2i; (2) [1 2; 3 4].*[0.1 0.2; 0.3 0.4]; (3) [1 2; 3 4].[20 10; 9 2]; (4) [1 2; 3 4].^2; (5) exp([1 2; 3 4]); …

【JavaEE多线程】Java 文件操作

目录 Java中操作文件File概述属性构造方法方法 文件内容的读写——文件流 streamInputStreamFileInputStream概述利用 Scanner 进行字符读取OutputStream 概述 练习 Java中操作文件 Java 中通过 java.io.File类来对一个文件(包括目录)进行抽象的描述。注…

多服务器上的 docker 实现互相访问

场景: Server_1上有一个docker容器 containerXServer_2上有一个docker容器 containerX…Server_n上有一个docker容器 containerX 如何实现着 n 个docker之间的互相访问呢? 实现方式: Step1:配置一个通用的容器 新建一个容器&a…