使用 ModelScope Studio 实现可滚动 ChatBot

前面的文章提到过 Gradio 的 Chatbot 不能自动滚动的问题,最近看到了 ModelScope Studio 扩展的一些组件,其中 Chatbot 就完美解决了自动滚动的问题,同时还增加了很多更细化的功能,例如可以设置用户和 AI 的头像。官方文档,可以移步至魔搭的官方空间 https://modelscope.cn/studios/modelscope/modelscope-studio

在这里插入图片描述
本文使用的是 Ollama Qwen 2.5,代码如下,使用 LlamaIndex 和 ModelScope 类库,Ollama 可改为自己使用的模型。

# 安装 modelscope studio
pip install modelscope_studio   
from llm import get_local_ollama
from typing import List, Optional, Tuple, Dict
from llama_index.core.llms import ChatMessage, MessageRole
import gradio as gr
import modelscope_studio as mgr
from llama_index.core import PromptTemplateimport osllm = get_local_ollama("qwen2.5:3b")
History = List[Tuple[str, str]]
Messages = List[ChatMessage]
default_system = 'You are QQ, created by Tom. You are a helpful assistant.'def modify_system_session(system: str) -> str:if system is None or len(system) == 0:system = default_systemreturn system, system, []def history_to_messages(history: History, system: str) -> Messages:messages = [ChatMessage.from_str(role=MessageRole.SYSTEM, content=system)]for h in history:messages.append(ChatMessage.from_str(role=MessageRole.USER, content=h[0].text))messages.append(ChatMessage.from_str(role=MessageRole.ASSISTANT, content=h[1].text))return messagesdef messages_to_history(messages: Messages) -> Tuple[str, History]:assert messages[0].role == MessageRole.SYSTEMsystem = messages[0].contenthistory = []for q, r in zip(messages[1::2], messages[2::2]):history.append([q.content, r.content])return system, historydef process_image (img):print (img)return imgasync def load(text, history, system):messages = history_to_messages(history= history, system=system)messages.append(ChatMessage.from_str(role=MessageRole.USER.value, content=text))gen = await llm.astream_chat(messages=messages)async for a in gen:print(a.message.role)system, history = messages_to_history(messages + [ChatMessage.from_str(role=a.message.role, content=a.message.content)])yield '', history, systemwith gr.Blocks () as demo:with gr.Row():with gr.Column(scale=3):system_input = gr.Textbox(value=default_system, label="System Setting")with gr.Column(scale=1):set_sys_button = gr.Button(value="Set System Prompt", scale=2)system_state = gr.Textbox(value=default_system, visible=False)user_avatar = os.path.join(os.path.dirname(__file__),"user.jpeg")bot_avatar = os.path.join(os.path.dirname(__file__),"bot.jpeg")chatbot = mgr.Chatbot(avatar_images=[{"name":"user", "avatar": user_avatar}, {"name":"bot", "avatar":bot_avatar}])user_input = gr.Textbox()with gr.Row():button = gr.Button("Submit")button.click(load, [user_input, chatbot, system_input], [user_input, chatbot, system_input])user_input.submit(load, [user_input, chatbot, system_input], [user_input, chatbot, system_input])set_sys_button.click(fn=modify_system_session,inputs=[system_input],outputs=[system_state, system_input, chatbot])gr.Examples(examples=["讲一个中国的神话故事!", "介绍一下故宫", "使用 Python 某只股票 MA5 > MA10"], inputs=[user_input])demo.launch()

总结

ModelScope 做了挺多的优化,包括用户交互、图标展示等等,使得 Chatbot 具有更多的可交互性。

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

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

相关文章

QCamera6.7笔记

1.QCamera​ .h文件 #include <QtWidgets/QMainWindow> #include "ui_QCamera_test1.h" #include <QCamera> #include <QtMultimedia> #include <QtMultimediaWidgets> #include<QMediaCaptureSession> #include <QMediaDevices&…

渗透测试之密码暴力破解工具medusa美杜莎

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

C语言指针详解与应用(不断更新)

指针简介 指针(Pointer)是C语言的一个重要知识点&#xff0c;其使用灵活、功能强大&#xff0c;是C语言的灵魂 指针与底层硬件联系紧密&#xff0c;使用指针可操作数据的地址&#xff0c;实现数据的间接访问 指针生活实例化 指针的本质是地址&#xff0c;在生活中比如你取快…

C++快速入门

文章目录 C快速入门一、命名空间1.初始C2.概念3.命名空间的定义1.普通的命名空间2.命名空间的嵌套3.命名空间的重名问题3.命名空间的展开 二、C的输入&输出三、缺省参数1.全缺省参数2.半缺省参数3.缺省参数的用途4.缺省参数的注意点 四、函数重载1.函数重载的原则2.以下的函…

【RocketMQ】RocketMQ应用难点

&#x1f3af; 导读&#xff1a;本文探讨了RocketMQ中消息重复消费的问题及其解决方案&#xff0c;尤其是在CLUSTERING模式下的扩容影响。文章分析了重复消费的原因&#xff0c;如广播模式、负载均衡模式下的多consumerGroup消费、消费者组内的动态变化及网络延迟等&#xff0c…

婚恋交友系统该如何做才能做到日进斗金?

要使婚恋交友系统实现盈利并做到日进斗金&#xff0c;需要综合考虑市场需求、用户体验、商业模式和营销策略等多个方面。以下是一些建议&#xff0c;旨在帮助构建一个成功且盈利的婚恋交友系统&#xff1a; 深入了解目标市场&#xff1a; 研究目标用户群体的需求、偏好和行为模…

这 5 个自动化运维场景,可能用 Python 更香?

许多运维工程师会使用 Python 脚本来自动化运维任务。Python 是一种流行的编程语言&#xff0c;具有丰富的第三方库和强大的自动化能力&#xff0c;适用于许多不同的领域。 这里插播一条粉丝福利&#xff0c;如果你正在学习Python或者有计划学习Python&#xff0c;想要突破自我…

10款好用的开源 HarmonyOS 工具库

大家好&#xff0c;我是 V 哥&#xff0c;今天给大家分享10款好用的 HarmonyOS的工具库&#xff0c;在开发鸿蒙应用时可以用下&#xff0c;好用的工具可以简化代码&#xff0c;让你写出优雅的应用来。废话不多说&#xff0c;马上开整。 1. efTool efTool是一个功能丰富且易用…

YOLO11震撼发布!

非常高兴地向大家介绍 Ultralytics YOLO系列的新模型&#xff1a; YOLO11&#xff01; YOLO11 在以往 YOLO 模型基础上带来了一系列强大的功能和优化&#xff0c;使其速度更快、更准确、用途更广泛。主要改进包括 增强了特征提取功能&#xff0c;从而可以更精确地捕捉细节以更…

编程魔法:基于LLM的AI function开发,如何实现高效数据生成?

基于大语言模型&#xff08;LLM&#xff09;的AI function开发&#xff0c;简直就是现代编程界的“魔法棒”&#xff01; 你好&#xff0c;我是三桥君 最近三桥君有个任务&#xff0c;需要造一些测试数据&#xff0c;比如姓名、手机号、银行卡号、邮箱啥的&#xff0c;用来做测…

PV大题--专题突破

写在前面&#xff1a; PV大题考查使用伪代码控制进程之间的同步互斥关系&#xff0c;它需要我们一定的代码分析能力&#xff0c;算法设计能力&#xff0c;有时候会给你一段伪代码让你补全使用信号量控制的操作&#xff0c;请一定不要相信某些人告诉你只要背一个什么模板&#…

新手必知的录屏工具及其使用方法详解

你平常会录屏吗&#xff1f;录屏已经成为了一项非常实用的技能。无论是制作教学视频还是记录游戏精彩瞬间&#xff0c;录屏都可以帮我们记录我们在电脑上看到的精彩瞬间。今天我们就一同来探索在电脑上如何录屏吧。 1.福昕录屏工具 链接&#xff1a;www.foxitsoftware.cn/REC…

太速科技-FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡

FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡 一、板卡概述 该子卡是高速AD9172 DAC和AD9689 ADC的FMC板。为客户提供高达2 GHz 的可用模拟带宽以及 JESD204B 接口&#xff0c;以快速地对各种宽带 RF 应用进行原型制作。 AD芯片AD9689&#xff0c;AD9689-2…

Ceph RocksDB 深度调优

介绍 调优 Ceph 可能是一项艰巨的挑战。在 Ceph、RocksDB 和 Linux 内核之间&#xff0c;实际上有数以千计的选项可以进行调整以提高存储性能和效率。由于涉及的复杂性&#xff0c;比较优的配置通常分散在博客文章或邮件列表中&#xff0c;但是往往都没有说明这些设置的实际作…

论文翻译 | LLaMA-Adapter :具有零初始化注意的语言模型的有效微调

摘要 我们提出了一种轻量级的自适应方法&#xff0c;可以有效地将LLaMA微调为指令遵循模型。lama - adapter采用52K自指导演示&#xff0c;在冻结的LLaMA 7B模型上只引入1.2M可学习参数&#xff0c;在8个A100 gpu上进行微调花费不到一个小时。具体来说&#xff0c;我们采用了一…

armbian安装docker

最近又搞了台瑞莎Radxa 3E &#xff0c;从零开始部署unbuntu环境&#xff0c;发现是真曲折啊&#xff0c;虽然有点前车之鉴了 在Armbian上安装Docker&#xff0c;可以按照以下步骤操作&#xff1a; 1、更新软件包列表&#xff1a; sudo apt-get update 2、安装必要的软件包…

【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧

文章目录 C模板进阶编程前言第一章: 非类型模板参数1.1 什么是非类型模板参数&#xff1f;1.1.1 非类型模板参数的定义 1.2 非类型模板参数的注意事项1.3 非类型模板参数的使用场景示例&#xff1a;静态数组的实现 第二章: 模板的特化2.1 什么是模板特化&#xff1f;2.1.1 模板…

安防监控/智慧安防EasyCVR视频汇聚监控平台无法启动并报错“no space left on service”是什么原因?

视频汇聚/安防监控/智慧安防EasyCVR视频监控平台&#xff0c;作为一款智能视频监控综合管理平台&#xff0c;凭借其强大的视频融合汇聚能力和灵活的视频能力&#xff0c;在各行各业的应用中发挥着越来越重要的作用。平台可以引入AI智能分析能力&#xff0c;能够实现对视频中的特…

DRF实操——支付宝的介绍与对接支付宝

DRF实操——支付宝的介绍与对接支付宝 1. 支付宝的介绍实际上线环境&#xff1a;开发环境&#xff1a; 2. DRF对接支付宝1. 创建配置文件2. 在setting文件中&#xff0c;做支付宝配置3. 安装支付宝第三方库4. 在setting文件中实例化支付宝对象5.创建模型&#xff0c;保存订单的…

【以图搜图代码实现2】--faiss工具实现犬类以图搜图

第一篇&#xff1a;【以图搜图代码实现】–犬类以图搜图示例 使用保存成h5文件&#xff0c;使用向量积来度量相似性&#xff0c;实现了以图搜图&#xff0c;说明了可以优化的点。 第二篇&#xff1a;【使用resnet18训练自己的数据集】 准对模型问题进行了优化&#xff0c;取得了…