# 一、依据【文心一言】的小游戏《数到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)。
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()
三、其他
- 假如咱们有什么小游戏点子,能够提出来我转化过来一起玩。
- 我发布了一个视频,咱们能够看看,文心一眼拟人才能很强,还回成心报错,但是也会自己纠正,很风趣。