《生成式 AI》课程 第3講 CODE TASK 任务3:自定义任务的机器人
课程
《生成式 AI》课程 第3講:訓練不了人工智慧嗎?你可以訓練你自己-CSDN博客
我们希望你创建一个定制的服务机器人。
您可以想出任何您希望机器人执行的任务,例如,一个可以解决简单的数学问题的机器人0
一个机器人,它总是输出用户输入单词的反义词
以下是用 API2D 调用 openAI 'model': 'gpt-4o-mini' url = "https://openai.api2d.net/v1/chat/completions"
import requests
import gradio as gr
import json
def get_response(input_text, prompt_text, chat_history): # 修改函数定义,增加prompt_text参数
"""
根据用户输入、额外的提示文本以及已有的对话历史获取语言模型的回复,并更新对话历史。
:param input_text: 当前用户输入的文本内容。
:param prompt_text: 额外的提示文本内容,比如固定的任务引导等。
:param chat_history: 之前的对话历史,是一个包含二元组的列表,每个二元组分别是 (用户消息, 模型回复)。
:return: 返回更新后的对话历史,包含本次交互后的结果以及包含模型相关信息及回复内容和token数量信息的格式化字符串,若JSON解析出错则返回相应错误提示以及更新后的对话历史。
"""
url = "https://openai.api2d.net/v1/chat/completions"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer fk2****' # <-- 把 fkxxxxx 替换成你自己的 Forward Key,注意前面的 Bearer 要保留,并且和 Key 中间有一个空格。
}
messages = []
# 将之前的对话历史添加到消息列表中,格式需符合API要求
for user_msg, bot_msg in chat_history:
messages.append({"role": "user", "content": user_msg})
messages.append({"role": "assistant", "content": bot_msg})
# 添加当前用户输入的消息以及额外的提示文本消息(按照合适的格式添加,这里示例为添加在开头)
messages.append({"role": "user", "content": prompt_text + " " + input_text})
data = {
'model': 'gpt-4o-mini', # 'gpt-3.5-turbo',
'messages': messages
}
response = requests.post(url, headers=headers, json=data)
status_code = response.status_code
try:
json_data = response.json()
# 提取模型名称
model_name = json_data.get('model', '未知模型')
# 提取助手回复的内容
assistant_content = json_data.get('choices', [])[0].get('message', {}).get('content', '无回复内容')
# 提取各类token数量
prompt_tokens = json_data.get('usage', {}).get('prompt_tokens', 0)
completion_tokens = json_data.get('usage', {}).get('completion_tokens', 0)
total_tokens = json_data.get('usage', {}).get('total_tokens', 0)
# 将本次的用户输入和模型回复添加到对话历史中
chat_history.append((input_text, assistant_content))
return chat_history, f"模型: {model_name}\n回复内容: {assistant_content}\n提示词token数: {prompt_tokens}\n回复内容token数: {completion_tokens}\n总token数: {total_tokens}"
except json.JSONDecodeError:
# 即使解析JSON出错,也更新对话历史(可以为空回复等情况)
chat_history.append((input_text, "解析JSON出错"))
return chat_history, "解析JSON出错"
# 假设这里的prompt_for_task是你预先定义好的提示文本内容,可根据实际情况赋值
prompt_for_task = "Give me the antonym of the following words"
with gr.Blocks() as demo:
chatbot = gr.Chatbot()
user_input = gr.Textbox(lines=2, placeholder="请输入你想发送的内容")
state = gr.State([]) # 创建一个状态变量,用于存储对话历史,初始化为空列表
prompt_textbox = gr.Textbox(label="Prompt", value=prompt_for_task, visible=True) # 添加Prompt文本框,设置为可见
# 通过按钮点击事件触发获取回复和更新对话历史等操作
send_button = gr.Button("发送")
send_button.click(
fn=get_response,
inputs=[user_input,prompt_textbox, state],
outputs=[chatbot, gr.Textbox(label="解析后的响应内容")]
)
demo.launch(debug=True)
输出如下
gpt4 很厉害的翻译了英文 并且中输出
何处无芳草 "Where is there no fragrant grass?" ==>
反义词 无处有刺 nowhere has thorns
你觉得怎么样呢?