和 InternLM 解锁“谁是卧底”新玩法

news2024/9/20 0:35:59

本文来自社区投稿,作者LangGPT联合发起人、东北大学在读博士生王明

在大模型技术日益普及的今天,AI 的应用已经渗透到各个领域,带来了无数创新和乐趣。今天,我们将一起探索如何搭建一个 AI 版的“谁是卧底”游戏。通过 InternStudioSiliconCloud 平台,你将学会如何配置环境、调用大模型接口,最后和 internlm2_5-20b-chat 展开一场关于“谁是卧底”的脑力对决。

页面效果图

在线体验地址:

https://huggingface.co/spaces/sci-m-wang/Who_is_The_Spy

InternLM 系列模型 GitHub 链接:

https://github.com/InternLM/InternLM

InternLM 系列模型 Hugging Face 链接:

https://huggingface.co/internlm

(欢迎使用 InternLM 系列开源大模型开发有趣有用的 AI 应用)

1. 准备工作

首先我们需要学习书生大模型实战营第 3 期的前置基础课程内容的 Linux 部分,并在 InternStudio 平台上创建开发机。

学习链接:https://github.com/InternLM/Tutorial/tree/camp3/docs/L0/Linux

InternStudio 链接:https://studio.intern-ai.org.cn/

创建成功后点击 进入开发机 打开 WebIDE。进入后在 WebIDE 的左上角有三个 logo,依次表示 JupyterLab、Terminal 和 Code Server,本次实践需要使用 Terminal Code Server

1.1 环境配置

首先点击左上角图标,打开 Terminal,运行如下脚本创建虚拟环境:

# 创建虚拟环境
conda create -n langgpt python=3.10 -y

运行下面的命令,激活虚拟环境:

conda activate langgpt

之后的操作都要在这个环境下进行。激活环境后,安装必要的 Python 包,依次运行下面的命令:

pip install streamlit==1.37.0
pip install openai==1.37.1

1.2 获取项目

运行如下命令创建并打开项目路径:

# 创建项目路径
mkdir langgpt
# 进入项目路径
cd langgpt

从 GitHub 获取项目,运行如下命令:

git clone https://github.com/sci-m-wang/Spy-Game.git

下载完成后,运行如下命令进入项目所在的路径:

cd Spy-Game

接下来的实践环节都在这个路径下进行。

1.3 模型接口获取与测试

本次实践由 SiliconCloud 平台提供模型接口支持。

访问其官方网站:硅基流动统一登录,注册账户并登录。

之后点击左侧边栏的 “API 密钥”,创建访问模型服务的 API Key。

之后可以使用下面的代码测试接口能否成功访问:

from openai import OpenAI
client = OpenAI(
    api_key="YOUR-API-KEY",
    base_url=" https://api.siliconflow.cn/v1"
)

model = "internlm/internlm2_5-20b-chat"

response = client.chat.completions.create(
    model=model,
    messages=[
        {"role":"system", "content":"你好"}
    ],
    max_tokens=100
)

print(response.choices[0].message.content)

其中 “YOUR-API-KEY” 应该替换为上一步创建的 API Key。如果上述代码返回了正确的回复,证明能够正常访问模型接口服务。

2. 系统结构设计

系统主要由基本游戏设计、消息栈、玩家等几部分组成。

2.1 基本游戏设计

基本游戏设计为构成游戏的基本元素,例如:

  • 总人数:参与游戏的玩家总数,包括人类玩家。可以设置为 5-10 人;

  • 卧底人数:玩家中卧底身份玩家的任务,可以设置为 1 至总人数的一半;

  • 最大回合数:可以设置为 5-10 之间的整数,即如果没有提前分出胜负,最少可以玩 5 轮,最多 10 轮;

2.2 消息栈

分为两部分,其中一个为消息具体记录,包括主持人的消息(游戏流程信息)及人类玩家的消息,格式如下:

{"id":"host", "message": "第1轮游戏开始"}

其中主持人的 id 为" host",人类玩家的 id 为 "H",AI 玩家可以为 "P1" 至 "P10"。

此外,还有仅保存玩家描述的消息栈,设计为 list 类型,例如:

[
    "P1: 这是一个能做凉菜也能当零食的新鲜食材。",
    "P2: 这是一种既可以生食也可以烹饪的多功能食材。"
]

纯描述记录用于玩家游戏中参考,不包含主持人的消息。

2.3 玩家实现

游戏中 AI 玩家由 internlm2_5-20b-chat 扮演,提示词如下:

# Role: 谁是卧底游戏玩家

## Profile
- author: Mingle
- version: 0.1
- language: 中文
- description: 谁是卧底游戏玩家,能够用简短的一句话描述自己得到的关键词,分析场上的描述历史以判断自己和其他玩家的身份,投票敌对玩家出局,并在发现自己是卧底时伪装成平民身份。

## Background
- 你是“谁是卧底”游戏中的一个玩家;
- 你获得的关键词是:{};

## Skills
- 熟悉“谁是卧底”的游戏规则,了解游戏的胜利条件;
- 了解“谁是卧底”游戏的制胜技巧;

## Commands
- /describe:用简短的一句话描述自己得到的关键词,禁止直接说出关键词。
- /vote:从玩家列表中选择一个,得票最多的玩家将会被投票出局。

## Constraints
- 不能直接说出或暗示自己的关键词;
- 描述的内容必须符合关键词;
- 描述的内容不能与已有的描述相同;
- 在不确定自己的身份时,描述应该尽可能模糊,避免暴露;
- 描述内容必须小于20字,禁止输出与描述无关的额外内容;
- 投票时只能回复玩家id,不能输出任何额外内容;

## Workflows
1. 判断需要执行的动作
1.1 如果命令为"/describe",则需要描述关键词
    a. 接收关键词,代表在游戏中的身份。
    b. 构思一句话来描述自己的关键词。这句话应尽量模糊或广义,避免直接暴露具体信息,但也要足够合理,以免引起其他玩家的怀疑。
        例如,如果关键词是“苹果”,玩家可以描述为:“这是一个很常见的水果。”
    c. 分析其他玩家对其关键词的描述,尝试找出其中的模糊之处或与自己关键词的差异点。
        注意关键词之间的微妙差异,例如“苹果”和“橙子”,可能有类似的描述,但在细节上会有区别。
    d. 根据其他玩家的描述和场上的讨论情况,调整自己的策略,如果有必要,稍微修改自己的描述以避免暴露。
    e. 判断自己是否是卧底,如果怀疑自己是卧底,在描述关键词时应更加小心,尽量确保描述内容符合卧底关键词并符合你判断出的平民关键词,避免被其他玩家识破。
    f. 生成最终不超过20字的描述,避免直接暴露关键词。
1.2 如果命令为"/vote",则需要投票,将你认为敌对阵营的玩家投票出局
    a. 接收所有玩家的描述历史记录;
        特别关注与自己描述相似的玩家,这些玩家有可能是同一阵营。
    b. 分析历史记录,描述比较模糊的玩家,尤其是描述与自己的关键词存在明显不同的玩家,就有可能是卧底;
    c. 基于自己的分析,做出投票决定,从场上存活的玩家列表中,选出你认为敌对阵营的玩家;
    d. 回复投票玩家的id,不要回复额外内容。

“谁是卧底”游戏中,玩家主要有两个行为。因此在 LangGPT 结构化提示词框架的基础结构上,增加了 Commands 模块,用以区分 AI 玩家的动作。

2.4 主要流程

本游戏中,主要的执行流程为:保存游戏设置→AI 玩家开始一轮描述→人类玩家描述→AI 玩家根据描述历史投票→人类玩家投票并投出玩家→判断是否满足胜利条件→开始下一轮游戏。

运行下面的命令启动项目:

python -m streamlit run who_is_the_spy.py

启动项目后,界面效果如下:

首先点击“保存设置”,保存基本的游戏设置后,系统会提示人类玩家的关键词(随机获取,请牢记这个词,并在之后的游戏中根据这个词进行描述)。保存设置后,可以点击“开始第 x 轮游戏”按钮开始当前轮游戏,之后 AI 玩家(P1-Pn)会分别输出自己的描述,人类玩家可以通过底部对话框输入自己的描述。

所有玩家描述完之后,可以点击“开始投票”按钮,此时 AI 玩家会分别投票给自己认为应该出局的玩家。AI 玩家投票完之后,人类玩家决定自己的投票对象并根据结果选择投票对象,并点击“投出玩家”投出本轮出局的玩家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity基础】Input中GetAxis和GetAxisRaw的区别

一句话描述:GetAxis使用了平滑过渡,而GetAxisRaw是直接改变。 在Unity中,Input.GetAxisRaw 和 Input.GetAxis 都用于获取输入设备的轴向输入(例如键盘、鼠标或手柄的摇杆),但它们的工作方式和返回值有细微…

GPU 服务器性能评估:多维度深度探索

在深度学习的浩瀚宇宙中,GPU 服务器犹如一颗璀璨的星辰,以其无与伦比的计算能力和效率引领着技术进步的浪潮。为了充分挖掘这一强大工具的潜力,我们需深入探寻其性能评估的奥秘,这不仅仅是对单一指标的简单堆砌,而是从…

从虚拟现实到元宇宙:Facebook引领未来社交的下一步

随着科技的迅猛发展,社交媒体正在经历一场深刻的变革。从最初的文本和图片交流,到如今的沉浸式虚拟现实(VR)和即将到来的元宇宙,社交互动的方式正在发生根本性的变化。作为行业领军者,Facebook(…

3GPP协议入门——物理层基础(一)

1. 频段/带宽 NR指定了两个频率范围,FR1:通常称Sub 6GHz,也称低频5G;FR2:通常称毫米波(Millimeter Wave),也称高频5G。 2. 子载波间隔 NR中有15kHz,30kHz,6…

数据库类型有哪些?

根据存储方式的不同,数据库可以分为不同种类。每种类型的数据库,都有各自使用场景以及不同的产品。 ​ 关系型数据库 关系型数据库(RDBMS)基于关系模型,通过表(Table)的形式来组织数据&#xf…

利士策分享,如何规划多彩的大学生活?

利士策分享,学习规划多彩的大学生活 踏入大学,如同开启一场充满未知与可能的旅程。 为了让这段旅程不仅充满学术的熏陶,还洋溢着生活的多彩与人际的和谐,我们需要精心规划,积极行动。 一、多彩规划:点亮大学…

双指针的运用

一、双指针 双指针 常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 1.1 对撞指针:⼀般⽤于顺序结构中,也称左右指针。 • 对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始&#xff…

一文揭秘:从零开发一套中小型医院的云HIS系统,需要多少开发成本?

从零开发一套中小型的云HIS(医院信息系统)系统,首先要组建团队,包括招聘、培训、设备购置,然后要经历需求分析、系统设计、编码、测试等多个阶段,这会消耗大量的时间,其开发成本会受到多种因素的…

《凡人歌》重塑现实主义爆款,正午阳光终于“杀”回来了

2024年的现实主义爆款,出自正午阳光之手。 今年剧集市场一个明显的变化在于,最贴近时代生活、最有“爆款潜质”的现实主义题材电视剧的缺位。根据云合数据,截止到2024年9月,年榜前十中没有一部现实主义大剧,古装剧却多…

在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境

目录 在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境 一、为什么要用后端程序操作Docker 二、安装Docker 1、安装Docker 2、启动Docker 三、DockerClient与CMD操作Docker的区别 四、干货!如何使用DockerClient实现在线编程…

通过信息架构提升商业智能:实现数据驱动创新的策略与方法

拥抱数据驱动时代 在当前的数字化转型浪潮中,数据已成为企业最重要的资产之一。全球范围内的网络巨头通过精细的数据管理和分析,已成功颠覆了传统行业。这些企业的成功不仅源于他们掌握了大量数据,还因为他们能有效地利用这些数据来做出精准…

研一小白读论文记录,计算机视觉,Transformer

论文是IEEE收录的一篇论文《CrossFormer: A Versatile Vision Transformer Hinging on Cross-Scale Attention》(《基于跨尺度自注意力机制的多功能视觉Transformer》) 泛读完之后最大的感悟有以下几点: 1、文章在实验的结果中呈现了大量的…

Getty Images推AI训练样本:3750张高质量照片免费开放

近日,全球领先的商业图库Getty Images发布了一项重大决策,宣布将为AI开发者提供一份包含3750张高分辨率照片的免费训练数据集。这份详尽的数据集覆盖了商业、教育、医疗健康、运动健身、物品物体、插图图标等15个不同领域,目的在于助力AI技术…

unity UGUI高性能飘字解决方案(对象池+合并网格)

本方案仅供参考 从需求出发 游戏类型:微信小游戏 帧数限定:60 已知的几种方案: 1:场上只存在一个mesh,每帧把所有字绘制到一个mesh。 优点:每帧都重绘,高度定制化,可以随意添加、删除。 …

HTTP状态码解析:在Haskell中判断响应成功与否

在互联网的世界里,HTTP状态码是服务器与客户端之间通信的一种语言。它们告诉我们请求是否成功,或者遇到了什么问题。在进行网络编程时,正确地解析和处理这些状态码是至关重要的。本文将探讨HTTP状态码的基本概念,并展示如何在Hask…

KUKA中级学习4:修改软件中机器人名字,纠正示教器时间,下载备份文件进示教器

这里写目录标题 一、修改机器人名字1.1、程序安装下载二、示教器时间修改2.1、时间修改,示教器全英文显示三、下载备份文件 一、修改机器人名字 1.1、程序安装下载 选下面这个 二、示教器时间修改 2.1、时间修改,示教器全英文显示 三、下载备份文件 …

FancyVideo环境搭建推理

引子 很少关注360开源的代码,最近360AI团队开源了最新视频模型FancyVideo,据说RTX3090可跑。可以在消费级显卡 (如 GeForce RTX 3090) 上生成任意分辨率、任意宽高比、不同风格、不同运动幅度的视频,其衍生模型还能够完成视频扩展、视频回溯…

springboot+vue+mybatis计算机毕业设计网上购物系统+PPT+论文+讲解+售后

本文首先实现了网上购物系统设计与实现管理技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模…

《JavaEE进阶》----13.<Spring Boot【配置文件】>

本篇博客讲解 1.SpringBoot配置文件的格式以及对应的语法 2.了解两个配置文件格式的差异、优缺点。 我们这里只做简单的介绍。看会,了解,学会读取就行了。 因为配置文件实在太多了,这里只做基础的介绍。 一、配置文件的作用 前言 计算机中有许…

E5053A 微波下变频器

_XLT新利通_ E5053A 微波下变频器 E5052B SSA 专用的微波下变频器 Keysight E5053A 是一款与 E5052B 信号源分析仪(SSA)相关的微波下变频器。 如果您需要设计和测试微波或毫米波频率的信号源,E5053A 支持您扩展该分析仪的频率范围。 从…