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

依据【文心一言】的小游戏《数到30》

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

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

1.游戏设定

轮番报数,每次至少报 1 个数,最多报 2 个数,从 1 到 30 按次序接连报数,谁先签到 30,谁就取胜。

2.后台支撑

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

3.作用

依据【文心一言】的小游戏《数到30》

4. erniebot 应用举例

4.1快速装置

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

pip install --upgrade erniebot

4.2快速运用

咱们运用ERNIE Bot SDK之前,请首要请求并设置鉴权参数,详细请参考认证鉴权

** 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)

# 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。

旗舰版模型的作用更好,快捷版模型的响应速度更快、推理时延更低,咱们能够依据实践场景的需求挑选适宜的模型。

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

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维浮点数表达的语义向量,语义向量具有极端精准的语义表达才能,能够用于度量两个字符串之间的语义相似度。

咱们能够运用以下代码提取语句的语义向量。

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大模型。

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

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结合以构建应用。

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

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.界面设置


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我打码了(需要的替换成自己的)
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.完整代码

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()

三、其他

  • 假如咱们有什么小游戏点子,能够提出来我转化过来一起玩。
  • 我发布了一个视频,咱们能够看看,文心一眼拟人才能很强,还回成心报错,但是也会自己纠正,很风趣。

依据【文心一言】的小游戏《数到30》