使用gr.Chatbot()
对象保存每轮对话中用户的提问和大语言模型的回复。
#coding:utf-8
import json
import os
from time import time
import base64
import gradio as gr
from zhipuai import ZhipuAI
'''
智谱参考文档
https://open.bigmodel.cn/dev/api#glm-4
'''
parts = ['高颅顶', '精灵耳', '下颌缘', '下颏', '颞区', '颧区', '眉弓', '重睑', '眼袋', '卧蚕', '美鼻', '眉间纹','苹果肌', '法令纹', '丰唇', '口角囊袋', '鱼尾纹', '面颊']
zhipu_client = ZhipuAI(api_key="***")
def call_zhipu(content):
response = zhipu_client.chat.completions.create(
model="glm-4", # 填写需要调用的模型名称
# messages=[
# {"role": "user", "content": "作为一名营销专家,请为智谱开放平台创作一个吸引人的slogan"},
# {"role": "assistant", "content": "当然,为了创作一个吸引人的slogan,请告诉我一些关于您产品的信息"},
# {"role": "user", "content": "智谱AI开放平台"},
# {"role": "assistant", "content": "智启未来,谱绘无限一智谱AI,让创新触手可及!"},
# {"role": "user", "content": "创造一个更精准、吸引人的slogan"}
# ],
messages = content
)
return response.choices[0].message.content
with gr.Blocks() as demo:
chatbot = gr.Chatbot()
msg = gr.Textbox() ## 输入文本
clear = gr.ClearButton([msg, chatbot])
def respond(message, chat_history):
## 构建多轮对话的prompt. user和assistant的内容。
if not len(chat_history):
prompt = [{"role": "user", "content": message}]
else:
prompt = []
for item in chat_history:
prompt.append({"role": "user", "content": item[0]})
prompt.append({"role": "assistant", "content": item[1]})
prompt.append({"role": "user", "content": message})
print('prompt',prompt)
bot_message = call_zhipu(prompt)
print('bot_message',bot_message)
##
chat_history.append((message, bot_message))
# time.sleep(2)
print('chat_history',chat_history)
return "", chat_history
msg.submit(respond, [msg, chatbot], [msg, chatbot])
if __name__ == "__main__":
# demo.launch()
demo.launch(server_name='0.0.0.0', server_port=8000)