【极速版 -- 大模型入门到进阶】GPT + Gradio 聊天机器人从 0 到 1

文章目录

    • [🌊 环境准备](#🌊 环境准备)
    • [🌊 配置 API 密钥](#🌊 配置 API 密钥)
    • [🌊 定义与 GPT 的对话函数,支持多轮对话](#🌊 定义与 GPT 的对话函数,支持多轮对话)
    • [🌊 使用 Gradio 创建界面](#🌊 使用 Gradio 创建界面)
    • [🌊 完整代码 & 结果展示](#🌊 完整代码 & 结果展示)

在这个教程中,我们将使用 OpenAI 的 GPT 模型和 Gradio 来创建一个聊天机器人。Gradio 是一个非常简单的 Python 库,可以快速创建交互式界面,让我们与 AI 模型进行对话。让我们一起开始吧!

🌊 环境准备

首先,确保你已经安装了 💻 以下 Python 库 openai, gradio

bash 复制代码
from openai import OpenAI
import gradio as gr

from typing import List, Tuple

🌊 配置 API 密钥

python3 复制代码
openai.api_key = 'your-api-key-here'  # 在这里插入你的 API 密钥 🔑

🌊 定义与 GPT 的对话函数,支持多轮对话

python3 复制代码
def reset() -> List:
    return []

def interact(chatbot: List[Dict], user_input: str, temperature: float) -> List[Dict]:
    messages = []

    # 将历史对话按顺序添加到 messages 中
    for message in chatbot:
        messages.append({'role': message['role'], 'content': message['content']})

    # 将当前的 user_input 添加到 messages 的最后
    messages.append({'role': 'user', 'content': user_input})

    # 调用 OpenAI API 获取生成的回复
    response = openai.ChatCompletion.create(
        model="gpt-4",  # 你可以根据需要选择不同的模型,例如 gpt-4 或 gpt-3.5
        messages=messages,
        max_tokens=512,
        temperature=temperature,
    )

    # 获取生成的回复内容
    response_content = response['choices'][0]['message']['content']

    # 将当前的用户输入和模型的回复添加到聊天记录中
    chatbot.append({"role": "user", "content": user_input})
    chatbot.append({"role": "assistant", "content": response_content})

    return chatbot

🌊 使用 Gradio 创建界面

python3 复制代码
with gr.Blocks() as demo:
    gr.Markdown(f"# Gradio + GPT 多轮对话示例 🤖")

    chatbot = gr.Chatbot(type='messages')  # 创建聊天机器人界面
    input_textbox = gr.Textbox(label="输入你的消息 📝", value="")  # 创建文本输入框

    # 添加滑动条来调节 temperature
    temperature_slider = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, label="调整回复温度 🔥")

    # 创建按钮行
    with gr.Row():
        sent_button = gr.Button(value="发送 📤")  # 发送按钮
        reset_button = gr.Button(value="重置 🔄")  # 重置按钮

    # 设置按钮事件
    sent_button.click(interact, inputs=[chatbot, input_textbox, temperature_slider], outputs=[chatbot])
    reset_button.click(reset, outputs=[chatbot])

# 启动 Gradio 应用
demo.launch(debug=True)

🌊 完整代码 & 结果展示

python3 复制代码
import gradio as gr
from typing import List, Dict
import openai
import os


# 从环境变量中读取 API 密钥(你可以通过设置环境变量来保护 API 密钥)
openai.api_key = os.getenv('OPENAI_API_KEY')  # 确保环境变量中设置了 OPENAI_API_KEY

# 定义重置函数,清空聊天记录
def reset() -> List[Dict]:
    return []

# 定义与 GPT 的对话函数,支持多轮对话
def interact(chatbot: List[Dict], user_input: str, temperature: float) -> List[Dict]:
    messages = []

    # 将历史对话按顺序添加到 messages 中
    for message in chatbot:
        messages.append({'role': message['role'], 'content': message['content']})

    # 将当前的 user_input 添加到 messages 的最后
    messages.append({'role': 'user', 'content': user_input})

    # 调用 OpenAI API 获取生成的回复
    response = openai.ChatCompletion.create(
        model="gpt-4",  # 你可以根据需要选择不同的模型,例如 gpt-4 或 gpt-3.5
        messages=messages,
        max_tokens=512,
        temperature=temperature,
    )

    # 获取生成的回复内容
    response_content = response['choices'][0]['message']['content']

    # 将当前的用户输入和模型的回复添加到聊天记录中
    chatbot.append({"role": "user", "content": user_input})
    chatbot.append({"role": "assistant", "content": response_content})

    return chatbot

# 使用 Gradio 创建界面
with gr.Blocks() as demo:
    gr.Markdown(f"# Gradio Tutorial")
    chatbot = gr.Chatbot(type='messages')
    input_textbox = gr.Textbox(label="Input", value="")

    # 添加滑动条来调节 temperature
    temperature_slider = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, label="Temperature")

    with gr.Row():
        sent_button = gr.Button(value="Send")
        reset_button = gr.Button(value="Reset")

    sent_button.click(interact, inputs=[chatbot, input_textbox, temperature_slider], outputs=[chatbot])
    reset_button.click(reset, outputs=[chatbot])

demo.launch(debug=True)

参考资料:面向每个人的生成式AI, 【李宏毅 LLM 大模型】

相关推荐
IT猿手1 分钟前
基于强化学习的多算子差分进化路径规划算法QSMODE的机器人路径规划问题研究,提供MATLAB代码
算法·matlab·机器人
非凡ghost12 分钟前
PowerDirector安卓版(威力导演安卓版)
android·windows·学习·软件需求
大江东去浪淘尽千古风流人物1 小时前
【VLN】VLN仿真与训练三要素 Dataset,Simulators,Benchmarks(2)
深度学习·算法·机器人·概率论·slam
不做无法实现的梦~2 小时前
PX4各个模块的作用(3)
linux·stm32·嵌入式硬件·机器人·自动驾驶
清风6666662 小时前
基于单片机的喷漆机器人自动控制系统
单片机·嵌入式硬件·机器人·毕业设计·课程设计·期末大作业
jarvisuni2 小时前
开发“360安全卫士”,Opus4.6把GPT5.3吊起来打了?!
人工智能·gpt·ai编程
疯狂敲代码的老刘2 小时前
JDK 1.6到25 全版本网盘合集 (Windows + Mac + Linux)
java·linux·windows·macos·jdk
9呀3 小时前
【ros2】OccupancyGrid消息里的resolution
人工智能·机器人
熵减纪元3 小时前
人形机器人周末炸场:Atlas后空翻回归、宇树零下47度暴走、中国Bolt跑出10m/s | 2.8日报
人工智能·机器人·人形机器人
硅谷秋水3 小时前
REALM:用于机器人操作泛化能力的真实-仿真验证基准测试
人工智能·机器学习·计算机视觉·语言模型·机器人