基于【文心一言】的小游戏《数到30》

# 一、基于【文心一言】的小游戏《数到30》

视频地址:www.bilibili.com/video/BV1MC...

游戏地址: aistudio.baidu.com/application...

1.游戏设定

轮流报数,每次至少报 1 个数,最多报 2 个数,从 1 到 30 按顺序连续报数,谁先报到 30,谁就获胜。

2.后台支撑

当然是文心一言4.0了,没二选,启用多轮对话。

3.效果

4. erniebot 应用举例

4.1快速安装

执行如下命令,快速安装Python语言的最新版本ERNIE Bot SDK(推荐Python >= 3.8)。

shell 复制代码
pip install --upgrade erniebot

4.2快速使用

大家使用ERNIE Bot SDK之前,请首先申请并设置鉴权参数,具体请参考认证鉴权

** Python接口**

python 复制代码
import erniebot

# List supported models
models = erniebot.Model.list()

print(models)
# ernie-bot             文心一言旗舰版
# ernie-bot-turbo       文心一言轻量版
# ernie-text-embedding  文心百中语义模型
# ernie-vilg-v2         文心一格模型

# Set authentication params
erniebot.api_type = "aistudio"
erniebot.access_token = "<access-token-for-aistudio>"

# Create a chat completion
response = erniebot.ChatCompletion.create(model="ernie-bot", messages=[{"role": "user", "content": "你好,请介绍下你自己"}])

print(response.result)

命令行接口(CLI)

bash 复制代码
# List supported models
erniebot api model.list

# Set authentication params for chat_completion.create
export EB_API_TYPE="aistudio"
export EB_ACCESS_TOKEN="<access-token-for-aistudio>"

# Create a chat completion (using ernie-bot, ernie-bot-turbo, etc.)
erniebot api chat_completion.create --model ernie-bot --message user "请介绍下你自己"

# Set authentication params for image.create
export EB_API_TYPE="yinian"
export EB_ACCESS_TOKEN="<access-token-for-yinian>"

# Generate images via ERNIE-ViLG
erniebot api image.create --model ernie-vilg-v2 --prompt "画一只驴肉火烧" --height 1024 --width 1024 --image-num 1

经典示例

对话补全(Chat Completion)

ERNIE Bot SDK提供具备对话补全能力的文心一言旗舰版模型ernie-bot和文心一言迅捷版模型ernie-bot-turbo。

旗舰版模型的效果更好,迅捷版模型的响应速度更快、推理时延更低,大家可以根据实际场景的需求选择合适的模型。

以下是调用文心一言旗舰版模型进行多轮对话的示例:

python 复制代码
import erniebot

erniebot.api_type = "aistudio"
erniebot.access_token = "<access-token-for-aistudio>"

response = erniebot.ChatCompletion.create(
    model="ernie-bot",
    messages=[{
        "role": "user",
        "content": "请问你是谁?"
    }, {
        "role": "assistant",
        "content":
        "我是百度公司开发的人工智能语言模型,我的中文名是文心一言,英文名是ERNIE-Bot,可以协助您完成范围广泛的任务并提供有关各种主题的信息,比如回答问题,提供定义和解释及建议。如果您有任何问题,请随时向我提问。"
    }, {
        "role": "user",
        "content": "我在深圳,周末可以去哪里玩?"
    }])

print(response)

语义向量(Embedding)

ERNIE Bot SDK提供用于提取语义向量的Embedding模型。

该模型基于文心大模型,使用海量数据训练得到,为文心百中系统提供关键能力。该模型可以将字符串转为384维浮点数表达的语义向量,语义向量具备极其精准的语义表达能力,可以用于度量两个字符串之间的语义相似度。

大家可以使用以下代码提取句子的语义向量。

python 复制代码
import erniebot

erniebot.api_type = "aistudio"
erniebot.access_token = "<access-token-for-aistudio>"

response = erniebot.Embedding.create(
    model="ernie-text-embedding",
    input=[
        "我是百度公司开发的人工智能语言模型,我的中文名是文心一言,英文名是ERNIE-Bot,可以协助您完成范围广泛的任务并提供有关各种主题的信息,比如回答问题,提供定义和解释及建议。如果您有任何问题,请随时向我提问。",
        "2018年深圳市各区GDP"
        ])

print(response)

大家可以登陆文心百中体验中心,体验更多大模型语义搜索的能力。

文生图(Image Generation)

ERNIE Bot SDK提供具备文生图能力的ERNIE-ViLG大模型。

该模型具备丰富的风格与强大的中文理解能力,支持生成多种尺寸的图片。

python 复制代码
import erniebot

erniebot.api_type = "yinian"
erniebot.access_token = "<access-token-for-yinian>"

response = erniebot.Image.create(
    model="ernie-vilg-v2",
    prompt="雨后的桃花,8k,辛烷值渲染",
    width=512,
    height=512
)

print(response)

我们推荐两个撰写文生图Prompt提示词的文档,大家可以组合使用,创作出更加精美的图片。

大家也可登陆文心一格平台,体验更多AI艺术与创意辅助的能力。

函数调用(Function Calling)

ERNIE Bot SDK提供函数调用功能,即由大模型根据对话上下文确定何时以及如何调用函数。

借由函数调用,用户可以从大模型获取结构化数据,进而利用编程手段将大模型与已有的内外部API结合以构建应用。

以下是调用文心一言旗舰版模型进行函数调用的示例:

python 复制代码
import erniebot

erniebot.api_type = "aistudio"
erniebot.access_token = "<access-token-for-aistudio>"

response = erniebot.ChatCompletion.create(
    model="ernie-bot",
    messages=[
        {
            "role": "user",
            "content": "深圳市今天气温如何?",
        }, ],
    functions=[{
        "name": "get_current_temperature",
        "description": "获取指定城市的气温",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {
                    "type": "string",
                    "description": "城市名称",
                },
                "unit": {
                    "type": "string",
                    "enum": ["摄氏度", "华氏度"],
                },
            },
            "required": ["location", "unit"],
        },
        "responses": {
            "type": "object",
            "properties": {
                "temperature": {
                    "type": "integer",
                    "description": "城市气温",
                },
                "unit": {
                    "type": "string",
                    "enum": ["摄氏度", "华氏度"],
                },
            },
        },
    }, ],
)
print(response)

二、实现

1.prompt概要

主要是交代游戏规则。

你将扮演一个游戏高手,和我轮流报数,每次至少报 1 个数,最多报 2 个数,从 1 到 30 按顺序连续报数,谁先报到 30,谁就获胜,我先开始。

2.界面设置

  • 设置了对话框
  • 输入框
  • 发送按钮
  • 清空按钮
python 复制代码
with gr.Blocks(theme=gr.themes.Glass()) as demo:
    with gr.Row():
        gr.HTML(
            """<h1 align="center">我的穿越</h1>""")
    with gr.Row():
        gr.HTML(
            """<img align="center" src='https://ai-studio-static-online.cdn.bcebos.com/5f1287bbfeb04bcd8206076cf5726c2c4e500aab274a4d368b6aabf858d9521b' width='100%'> <br>""")
    with gr.Row():
        gr.HTML(
            """<h2 align="center">请和我一起数到30,谁先数到30谁获胜。</h2>""")
    with gr.Row():
        chatbot = gr.Chatbot()
    with gr.Row():
        msg = gr.Textbox(
            value="你将扮演一个游戏高手,和我轮流报数,请严格按照规则进行,具体规则为:每次至少报 1 个数,最多报 2 个数,从 1 到 30 按顺序连续报数,谁先报到 30,谁就获胜,我先开始报数,下面是我的报数。")
    with gr.Row():
        submit = gr.Button("Submit")
        clear = gr.Button("Clear")
        msg.submit(predict, [msg, chatbot], [msg, chatbot])
        submit.click(predict, [msg, chatbot], [msg, chatbot])
        clear.click(lambda: None, None, chatbot)

3.对话

  • 启用多轮对话
  • ak、sk我打码了(需要的替换成自己的)
python 复制代码
def predict(message, history):
    # 从页面输入建立历史对话列表
    mess_dict = []
    if len(history) > 0:
        for item in history:
            tmp_user = {
                "role": "user",
                "content": item[0]
            }
            mess_dict.append(tmp_user)
            tmp_assistant = {
                "role": "assistant",
                "content": item[1]
            }
            mess_dict.append(tmp_assistant)
    # 将user输入加入对话列表
    tmp_message = {
        "role": "user",
        "content": message
    }
    mess_dict.append(tmp_message)
    # 千帆鉴权,由于aistudio送的100w token用完了,买的千帆的token,这里打码了。
    erniebot.api_type = "qianfan"
    erniebot.ak = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
    erniebot.sk = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
    chat_completion = erniebot.ChatCompletion.create(model="ernie-bot-4",
                                                     messages=mess_dict)
    # 获取输出
    result = chat_completion.result
    history.append((message, result))
    return "", history

4.完整代码

python 复制代码
import os
os.system("pip install -U erniebot -i https://mirrors.aliyun.com/pypi/simple/")


import gradio as gr
import erniebot


def predict(message, history):
    # 从页面输入建立历史对话列表
    mess_dict = []
    if len(history) > 0:
        for item in history:
            tmp_user = {
                "role": "user",
                "content": item[0]
            }
            mess_dict.append(tmp_user)
            tmp_assistant = {
                "role": "assistant",
                "content": item[1]
            }
            mess_dict.append(tmp_assistant)
    # 将user输入加入对话列表
    tmp_message = {
        "role": "user",
        "content": message
    }
    mess_dict.append(tmp_message)
    # 千帆鉴权
    erniebot.api_type = "qianfan"
    erniebot.ak = "xxxxxxxxxxxxxxxxxxx"
    erniebot.sk = "xxxxxxxxxxxxxxxxxxx"
    chat_completion = erniebot.ChatCompletion.create(model="ernie-bot-4",
                                                     messages=mess_dict)
    # 获取输出
    result = chat_completion.result
    history.append((message, result))
    return "", history


with gr.Blocks(theme=gr.themes.Glass()) as demo:
    with gr.Row():
        gr.HTML(
            """<h1 align="center">基于【文心一言】的小游戏《数到30》
</h1>""")
    with gr.Row():
        gr.HTML(
            """<img align="center" src='https://ai-studio-static-online.cdn.bcebos.com/5dfc4965f23f4a288f4a8ec7ad344a29b3fe89612cde4c8fab7c21f3ea48f5da' width='100%'> <br>""")
    with gr.Row():
        gr.HTML(
            """<h2 align="center">轮流报数,每次至少报 1 个数,最多报 2 个数,从 1 到 30 按顺序连续报数,谁先报到 30,谁就获胜。</h2>""")
    with gr.Row():
        chatbot = gr.Chatbot([], elem_id="chatbot", label="聊天记录")
    with gr.Row():
        msg = gr.Textbox(
            value="你将扮演一个游戏高手,和我轮流报数,请严格按照规则进行,具体规则为:每次至少报 1 个数,最多报 2 个数,从 1 到 30 按顺序连续报数,谁先报到 30,谁就获胜,我先开始报数,下面是我的报数。",
            label="用户输入")
    with gr.Row():
        submit = gr.Button("❤️❤️❤️Submit❤️❤️❤️")
        clear = gr.Button("😍😍😍Clear😍😍😍")
        msg.submit(predict, [msg, chatbot], [msg, chatbot])
        submit.click(predict, [msg, chatbot], [msg, chatbot])
        clear.click(lambda: None, None, chatbot)
if __name__ == '__main__':
    demo.launch()

三、其他

  • 如果大家有什么小游戏点子,可以提出来我转换过来一起玩。
  • 我发布了一个视频,大家可以看看,文心一眼拟人能力很强,还回故意报错,但是也会自己纠正,很有趣。
相关推荐
小于小于大橙子2 小时前
视觉SLAM数学基础
人工智能·数码相机·自动化·自动驾驶·几何学
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据
人工智能·python·机器学习·数据挖掘
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-2.技术栈
人工智能·python·机器学习·数据挖掘
陌上阳光4 小时前
动手学深度学习68 Transformer
人工智能·深度学习·transformer
OpenI启智社区4 小时前
共筑开源技术新篇章 | 2024 CCF中国开源大会盛大开幕
人工智能·开源·ccf中国开源大会·大湾区
AI服务老曹4 小时前
建立更及时、更有效的安全生产优化提升策略的智慧油站开源了
大数据·人工智能·物联网·开源·音视频
YRr YRr4 小时前
PyTorch:torchvision中的dataset的使用
人工智能
love_and_hope5 小时前
Pytorch学习--神经网络--完整的模型训练套路
人工智能·pytorch·python·深度学习·神经网络·学习
思通数据5 小时前
AI与OCR:数字档案馆图像扫描与文字识别技术实现与项目案例
大数据·人工智能·目标检测·计算机视觉·自然语言处理·数据挖掘·ocr
兔老大的胡萝卜5 小时前
关于 3D Engine Design for Virtual Globes(三维数字地球引擎设计)
人工智能·3d