【狂飙全模态】狂飙AGI-智能答疑助手

狂飙AGI-智能答疑助手

      • 一、项目展示
      • 二、环境准备
        • [1 智谱API Key获取](#1 智谱API Key获取)
          • [1.1 登录官网](#1.1 登录官网)
          • [1.2 添加新的API Key](#1.2 添加新的API Key)
          • [1.3 点击复制API Key(备用)](#1.3 点击复制API Key(备用))
        • [2 虚拟环境配置](#2 虚拟环境配置)
          • [2.1 创建虚拟环境](#2.1 创建虚拟环境)
          • [2.2 安装依赖包](#2.2 安装依赖包)
      • 三、代码实现
          • [3.1 导入依赖包](#3.1 导入依赖包)
          • [3.2 设置API Key](#3.2 设置API Key)
          • [3.3 设置Chatbot类](#3.3 设置Chatbot类)
          • [3.4 定义记忆返回函数及记忆清除函数](#3.4 定义记忆返回函数及记忆清除函数)
          • [3.5 Gradio界面构建](#3.5 Gradio界面构建)
          • [3.6 项目完整代码](#3.6 项目完整代码)
      • 四、效果演示

一、项目展示

二、环境准备

1 智谱API Key获取
1.1 登录官网

官网网址https://bigmodel.cn/

1.2 添加新的API Key
1.3 点击复制API Key(备用)
2 虚拟环境配置
2.1 创建虚拟环境
shell 复制代码
conda create -n KBAGI python=3.10
2.2 安装依赖包
bash 复制代码
pip install openai gradio

三、代码实现

3.1 导入依赖包
python 复制代码
import gradio as gr
from openai import OpenAI
3.2 设置API Key
python 复制代码
Zhipu_API_KEY="XXXXXXXXXX【替换为1.3复制的API Key】XXXXXXXXXXXXXX"
Zhipu_base_url="https://open.bigmodel.cn/api/paas/v4/"
3.3 设置Chatbot类
python 复制代码
class ChatBot:
    def __init__(self):
        self.client = OpenAI(
            api_key=Zhipu_API_KEY,
            base_url=Zhipu_base_url
        )
        self.conversation = [
            {"role": "system", "content": "你是一个有用的AI助手"}
        ]

    def chat(self, user_input: str) -> str:
        # 添加用户消息
        self.conversation.append({"role": "user", "content": user_input})

        # 调用API
        response = self.client.chat.completions.create(
            model="glm-4-air-250414",
            messages=self.conversation,
            temperature=0.7
        )

        # 获取AI回复
        ai_response = response.choices[0].message.content

        # 添加到对话历史
        self.conversation.append({"role": "assistant", "content": ai_response})

        return ai_response

    def clear_history(self):
        """清除对话历史,保留系统提示"""
        self.conversation = self.conversation[:1]

# 创建全局聊天机器人实例
bot = ChatBot()
3.4 定义记忆返回函数及记忆清除函数
python 复制代码
def respond(message, history):
    """
    处理用户输入并返回AI回复
    """
    try:
        response = bot.chat(message)
        # 将新消息添加到历史记录中
        history.append({"role": "user", "content": message})
        history.append({"role": "assistant", "content": response})
        return history
    except Exception as e:
        error_msg = f"抱歉,我遇到了一个错误: {str(e)}"
        history.append({"role": "user", "content": message})
        history.append({"role": "assistant", "content": error_msg})
        return history

def clear_chat_history():
    """
    清除聊天历史
    """
    bot.clear_history()
    return []
3.5 Gradio界面构建
python 复制代码
with gr.Blocks(title="狂飙AGI-智能答疑助手") as demo:
    gr.Markdown("# 🤖狂飙AGI-智能答疑助手")
    gr.Markdown("您的专属AI学习助手,可以回答各种问题")
    
    # 聊天界面
    chatbot = gr.Chatbot(
        label="聊天室",
        height=500,
        type="messages"
    )
    
    # 输入组件
    with gr.Row():
        msg = gr.Textbox(
            label="输入您的问题",
            placeholder="例如:什么是人工智能?",
            container=False,
            scale=9
        )
        clear_btn = gr.Button("清除历史", scale=1)
    
    # 提交按钮
    submit_btn = gr.Button("发送", variant="primary")
    
    # 绑定事件
    # 当用户按下回车或点击发送按钮时提交
    msg.submit(respond, [msg, chatbot], [chatbot]).then(
        lambda: "", None, msg, queue=False
    )
    submit_btn.click(respond, [msg, chatbot], [chatbot]).then(
        lambda: "", None, msg, queue=False
    )
    
    # 清除历史按钮
    clear_btn.click(clear_chat_history, None, chatbot, queue=False)

if __name__ == "__main__":
    demo.launch()
3.6 项目完整代码
python 复制代码
import gradio as gr
from openai import OpenAI

Zhipu_API_KEY="XXXXXXXXXX【替换为1.3复制的API Key】XXXXXXXXXXXXXX"
Zhipu_base_url="https://open.bigmodel.cn/api/paas/v4/"

class ChatBot:
    def __init__(self):
        self.client = OpenAI(
            api_key=Zhipu_API_KEY,
            base_url=Zhipu_base_url
        )
        self.conversation = [
            {"role": "system", "content": "你是一个有用的AI助手"}
        ]

    def chat(self, user_input: str) -> str:
        # 添加用户消息
        self.conversation.append({"role": "user", "content": user_input})

        # 调用API
        response = self.client.chat.completions.create(
            model="glm-4-air-250414",
            messages=self.conversation,
            temperature=0.7
        )

        # 获取AI回复
        ai_response = response.choices[0].message.content

        # 添加到对话历史
        self.conversation.append({"role": "assistant", "content": ai_response})

        return ai_response

    def clear_history(self):
        """清除对话历史,保留系统提示"""
        self.conversation = self.conversation[:1]

# 创建全局聊天机器人实例
bot = ChatBot()

def respond(message, history):
    """
    处理用户输入并返回AI回复
    """
    try:
        response = bot.chat(message)
        # 将新消息添加到历史记录中
        history.append({"role": "user", "content": message})
        history.append({"role": "assistant", "content": response})
        return history
    except Exception as e:
        error_msg = f"抱歉,我遇到了一个错误: {str(e)}"
        history.append({"role": "user", "content": message})
        history.append({"role": "assistant", "content": error_msg})
        return history

def clear_chat_history():
    """
    清除聊天历史
    """
    bot.clear_history()
    return []

with gr.Blocks(title="狂飙AGI-智能答疑助手") as demo:
    gr.Markdown("# 🤖狂飙AGI-智能答疑助手")
    gr.Markdown("您的专属AI学习助手,可以回答各种问题")
    
    # 聊天界面
    chatbot = gr.Chatbot(
        label="聊天室",
        height=500,
        type="messages"
    )
    
    # 输入组件
    with gr.Row():
        msg = gr.Textbox(
            label="输入您的问题",
            placeholder="例如:什么是人工智能?",
            container=False,
            scale=9
        )
        clear_btn = gr.Button("清除历史", scale=1)
    
    # 提交按钮
    submit_btn = gr.Button("发送", variant="primary")
    
    # 绑定事件
    # 当用户按下回车或点击发送按钮时提交
    msg.submit(respond, [msg, chatbot], [chatbot]).then(
        lambda: "", None, msg, queue=False
    )
    submit_btn.click(respond, [msg, chatbot], [chatbot]).then(
        lambda: "", None, msg, queue=False
    )
    
    # 清除历史按钮
    clear_btn.click(clear_chat_history, None, chatbot, queue=False)

if __name__ == "__main__":
    demo.launch(server_name="127.0.0.1", server_port=7860)

四、效果演示

相关推荐
消失的旧时光-19435 小时前
第十四课:Redis 在后端到底扮演什么角色?——缓存模型全景图
java·redis·缓存
CoderIsArt5 小时前
三大主流智能体框架解析
人工智能
民乐团扒谱机5 小时前
【微实验】机器学习之集成学习 GBDT和XGBoost 附 matlab仿真代码 复制即可运行
人工智能·机器学习·matlab·集成学习·xgboost·gbdt·梯度提升树
Coder_Boy_5 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring
芷栀夏5 小时前
CANN ops-math:揭秘异构计算架构下数学算子的低延迟高吞吐优化逻辑
人工智能·深度学习·神经网络·cann
L543414465 小时前
告别代码堆砌匠厂架构让你的系统吞吐量翻倍提升
大数据·人工智能·架构·自动化·rpa
孤狼warrior5 小时前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
凯子坚持 c5 小时前
构建企业级 AI 工厂:基于 CANN `cann-mlops-suite` 的端到端 MLOps 实战
人工智能
Elwin Wong5 小时前
浅析OpenClaw:从“贾维斯”梦想看下一代 AI 操作系统的架构演进
人工智能·agent·clawdbot·moltbot·openclaw
Rorsion5 小时前
PyTorch实现线性回归
人工智能·pytorch·线性回归