DeepSeek智能对话助手项目

news2025/7/19 15:42:15

目录:

    • 1、效果图
    • 2、实现代码
    • 3、温度和TopK的作用对比

1、效果图

在这里插入图片描述

2、实现代码

# import gradio as gr

# def reverse_text(text):
#     return text[::-1]


# demo=gr.Interface(fn=reverse_text,inputs="text",outputs="text")

# demo.launch(share="True")

import gradio as gr
import openai
from typing import List, Any, Iterator

# 配置DeepSeek API
api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
api_base = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

client = openai.OpenAI(api_key=api_key, base_url=api_base)

def chat_stream(message: str, 
               history: List[List[str]], 
               temperature: float = 0.7,
               top_k: int = 40,
               system_prompt: str = "你是一个有帮助的助手。") -> Iterator[Any]:
    """流式输出DeepSeek响应"""
    messages = [{"role": "system", "content": system_prompt}]
    
    # 添加历史记录
    for human_msg, ai_msg in history:
        messages.append({"role": "user", "content": human_msg})
        messages.append({"role": "assistant", "content": ai_msg})
    
    # 添加当前消息
    messages.append({"role": "user", "content": message})

    # 调用API进行流式输出
    response = client.chat.completions.create(
        model="Qwen/Qwen2.5-VL-72B-Instruct",
        messages=messages,
        temperature=temperature,
        top_p=1-(1.0/top_k) if top_k > 1 else 1.0,
        stream=True
    )

    full_response = ""
    for chunk in response:
        if chunk.choices and len(chunk.choices) > 0:
            content = chunk.choices[0].delta.content
            if content:
                full_response += content
                yield full_response

# 自定义CSS样式
custom_css = """
#chatbot {
    height: 600px !important;
    border-radius: 10px;
    border: 1px solid #e0e0e0;
    font-family: "Microsoft YaHei", "微软雅黑", sans-serif;
}
.message {
    padding: 10px;
    border-radius: 5px;
    margin: 5px 0;
    font-size: 15px;
    line-height: 1.6;
}
.user-message {
    background-color: #e3f2fd;
}
.bot-message {
    background-color: #f5f5f5;
}
.gradio-container {
    font-family: "Microsoft YaHei", "微软雅黑", sans-serif;
}
"""

# 创建Gradio界面
with gr.Blocks(title="DeepSeek 智能助手", css=custom_css, theme=gr.themes.Soft()) as demo:
    gr.Markdown("""
    # 🤖 DeepSeek 智能助手
    欢迎使用 DeepSeek 智能助手!您可以通过右侧的设置来调整 AI 的行为。
    """)
    
    with gr.Row():
        with gr.Column(scale=4):
            chatbot = gr.Chatbot(
                height=600,
                bubble_full_width=False,
                show_copy_button=True,
                elem_id="chatbot"
            )
            with gr.Row():
                msg = gr.Textbox(
                    label="输入消息",
                    placeholder="在这里输入您的问题...",
                    scale=8,
                    container=False
                )
                submit_btn = gr.Button("发送", variant="primary", scale=1)
            
            with gr.Row():
                clear = gr.Button("清除历史", variant="secondary")
        
        with gr.Column(scale=1):
            system_prompt = gr.Textbox(
                label="系统提示词",
                value="你是一个有帮助的助手。",
                lines=3
            )
            temperature = gr.Slider(
                minimum=0.1,
                maximum=1.0,
                value=0.7,
                step=0.1,
                label="温度",
                info="较高的值会使输出更加随机,较低的值会使输出更加确定"
            )
            top_k = gr.Slider(
                minimum=1,
                maximum=100,
                value=40,
                step=1,
                label="Top K",
                info="控制输出词汇的多样性"
            )

    def user(user_message, history):
        return "", history + [[user_message, None]]

    def bot(history, temp, top_k_val, sys_prompt):
        history[-1][1] = ""
        for response in chat_stream(history[-1][0], history[:-1], temp, top_k_val, sys_prompt):
            history[-1][1] = response
            yield history

    msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot, [chatbot, temperature, top_k, system_prompt], chatbot
    )
    submit_btn.click(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot, [chatbot, temperature, top_k, system_prompt], chatbot
    )
    clear.click(lambda: None, None, chatbot, queue=False)

if __name__ == "__main__":
    demo.launch()

3、温度和TopK的作用对比

在这里插入图片描述

在这里插入图片描述
温度和TopK的调节可以使用大模型的回答更加精准和多样化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2387776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈Mysql的MVCC机制(RC与RR隔离级别)

MVCC(Multi-Version Concurrency Control)多版本并发控制 说这个我们先来了解一下Mysql的隔离级别,因为MVCC和Mysql的隔离级别是有关的。 Mysql默认的隔离级别是RR(可重复读) 其他的隔离级别是读未提交(…

uniapp-商城-72-shop(5-商品列表,购物车实现回顾)

我们通过前面的章节已经将数据添加到了购物车,但实际上购物车的处理还有很多东西需要完成。 我们看看如何将商品添加到购物车。 本文介绍了购物车功能的实现方式,重点讲解了如何将商品添加到购物车以及购物车状态管理的处理机制。主要内容包括:1. 通过Vuex管理购物车状态,包…

MySQL#Select语句执行过程

服务端程序架构 MySQL 是典型的 C/S 架构,即 Client/Server 架构,服务器端程序mysqld。 Select语句执行过程 连接层 客户端和服务器端建立连接,客户端发送 SQL 至服务器端 SQL层 SQL语句处理 查询缓存: 缓存命中该SQL执行结果直…

hbuilder中h5转为小程序提交发布审核

【注意】 [HBuilder] 11:59:15.179 此应用 DCloud appid 为 __UNI__9F9CC77 ,您不是这个应用的项目成员。1、联系这个应用的所有者,请求加入项目成员(https://dev.dcloud.net.cn "成员管理"-"添加项目成员")…

【数据结构】单链表练习

1.链表的中间节点 https://leetcode.cn/problems/middle-of-the-linked-list/description/ 用快慢指针来解决 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* middleNode(struct ListNode* he…

学习vue3:跨组件通信(provide+inject)

目录 一,关于跨组件通信概述 二,跨组件传值 案例1(爷传孙) 三,跨组件传函数 案例2(爷传孙) 疑问:孙子传给爷爷是否可行呢? 一,关于跨组件通信概述 之前我们学习了父子组件的传…

【菜狗work前端】小程序加if判断时不及时刷新 vs Web

零、前提&#xff1a; 实现input输入数字不大于10000&#xff08;需要配合typenumber&#xff0c;maxlength5&#xff0c;这里没写&#xff09; 一、探究代码&#xff1a; <input v-model"model1" input"changeModel1" placeholder"请输入拒收件…

TCP 三次握手:详解与原理

无图、长文警告&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 一、引言二、TCP 三次握手的过程&#xff08;一&#xff09;第一次握手&#xff1a;SYN&#xff08;同步序列号&#xff09;&#xff08;二&#xff09;第二次握手&#xff1a;SYN-ACK&#xff08;同…

LabVIEW累加器标签通道

主要展示了 Accumulator Tag 通道的使用&#xff0c;通过三个并行运行的循环模拟不同数值的多个随机序列&#xff0c;分别以不同频率向累加器写入数值&#xff0c;右侧循环每秒读取累加器值&#xff0c;同时可切换查看每秒内每次事件的平均值&#xff0c;用于演示多线程数据交互…

永磁同步电机控制算法--IP调节器

一、基本原理 在电机控制领域&#xff0c;现今普遍使用的是比例-积分(PI)控制器。然而&#xff0c;PI控制器有一些缺点&#xff0c;可能会在某些应用中产生一些问题&#xff0c;例如:一个非常快的响应&#xff0c;也同时具有过大的超调量。虽然设计PI控制器时&#xff0c;可以…

Ubuntu 25.04 锁屏不能远程连接的解决方案

最近安装了一个 Ubuntu 25.04&#xff0c;偶然发现可以通过 windows 自带的 rdp 远程工具进行连接&#xff0c;内心狂喜。此外&#xff0c;还支持启动 VNC 协议&#xff0c;也就是默认支持了 rdp 和 vnc 连接。 看了以下&#xff0c;ubuntu 在用户级别下创建了一个远程桌面服务…

Java 自动装箱和拆箱还有包装类的缓存问题

自动装箱和拆箱就是将基本数据类型和包装类之间进行自动的互相转换。JDK1.5 后&#xff0c; Java 引入了自动装箱(autoboxing)/拆箱(unboxing)。 自动装箱&#xff1a; 基本类型的数据处于需要对象的环境中时&#xff0c;会自动转为“对象”。 我们以 Integer 为例&#xff1a;…

java-jdk8新特性Stream流

一、Stream流 是专业用于对集合或者数组进行便捷操作的。 1.1 Stream流的创建 主要分为Collection&#xff08;List与Set&#xff09;、Map、数组三种创建方式&#xff1a; //1.Collection集合的创建List<String> names new ArrayList<>();Collections.addAll(…

大语言模型 21 - MCP 自动操作 Figma+Cursor 实现将原型转换为代码

MCP 基本介绍 官方地址&#xff1a; https://modelcontextprotocol.io/introduction “MCP 是一种开放协议&#xff0c;旨在标准化应用程序向大型语言模型&#xff08;LLM&#xff09;提供上下文的方式。可以把 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 提供了一种…

QNAP NEXTCLOUD 域名访问

我是用docker compose方式安装的&#xff0c;虽然不知道是不是这么个叫法&#xff0c;废话不多说。 背景&#xff1a;威联通container station安装了nextcloud和lucky&#xff0c;lucky进行的域名解析和反代 先在想安装的路径、数据存储路径、数据库路径等新建文件夹。再新建…

华为OD机试真题——信道分配(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

比亚迪“双剑”电池获中汽中心权威认证,堪称“移动安全堡垒”。

在新能源汽车发展中&#xff0c;电池安全是重中之重。比亚迪的刀片电池与闪充刀片电池提前通过电池新国标全项检测&#xff0c;获中汽中心权威认证&#xff0c;堪称“移动安全堡垒”。 传统电池极端条件下易热失控&#xff0c;而刀片电池独特长条形设计&#xff0c;似刀片般&am…

【mysql】mysql的高级函数、高级用法

mysql是最常用的数据库之一&#xff0c;常见的函数用法大家应该都很熟悉&#xff0c;本文主要例举一些相对出现频率比较少的高级用法 (注&#xff1a;需注意mysql版本&#xff0c;大部分高级特性都是mysql8才有的) 多值索引与虚拟列 主要是解决字符串索引问题&#xff0c;光说…

【平面波导外腔激光器专题系列】用于光纤传感的低噪声PLC外腔窄线宽激光器

----翻译自Mazin Alalusi等人的文章 摘要 高性价比的 1550 nm DWDM平面外腔 &#xff08;PLANEX&#xff09; 激光器是干涉测量、布里渊、LIDAR 和其他光传感应用的最佳选择。其线宽<3kHz、低相位/频率噪声和极低的RIN。 简介 高性能光纤分布式传感技术是在过去几年中开发…

Pytorch里面多任务Loss是加起来还是分别backward? | Pytorch | 深度学习

当你在深度学习中进入“多任务学习(Multi-task Learning)”的领域,第一道关卡可能不是设计网络结构,也不是准备数据集,而是:多个Loss到底是加起来一起backward,还是分别backward? 这个问题看似简单,却涉及PyTorch计算图的构建逻辑、自动求导机制、内存管理、任务耦合…