大模型WebUI:Gradio全解11——Chatbots:融合大模型的多模态聊天机器人(3)

大模型WebUI:Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(3)

  • 前言
  • 本篇摘要
  • 11. Chatbot:融合大模型的多模态聊天机器人
    • 11.3 组件Chatbot及ChatMessage
      • 11.3.1 Chatbot:聊天机器人组件
        • 1. API参数
        • 2. 参数type演示
        • 3. 使用Gradio组件
      • 11.3.2 ChatMessage:聊天消息格式
        • 1. API参数
        • 2. 简单演示
        • 3. metadata键
    • 参考文献

前言

本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的简易webui开发框架,它基于FastAPI和svelte,可以使用机器学习模型、python函数或API开发多功能界面和部署人工智能模型,是当前热门的非常易于展示机器学习大语言模型LLM及扩散模型DM的WebUI框架。
本系列文章分为前置概念、安装运行与部署、Gradio高级特性、基础功能实战和高级功能实战五部分。第一部分前置概念:先介绍Gradio的详细技术架构、历史、应用场景、与其他框架Gradio/NiceGui/StreamLit/Dash/PyWebIO的区别,然后详细介绍了著名的资源网站Hugging Face,因为Gradio演示中经常用到Hugging Face的models及某些场景需要部署在spaces,这里主要包括三类资源models/datasets/spaces的使用以及六类工具库transformers/diffusers/datasets/PEFT/accelerate/optimum实战。第二部分安装运行与部署:讲解多种不同的安装、运行和部署方式,安装包括Linux/Win/Mac三类系统安装,运行包括普通方式和热重载方式,部署包括本地部署、HuggingFace托管、FastAPI挂载和Gradio-Lite浏览器集成。第三部分Gradio高级特性:按照先整体再细节的逻辑,讲解Gradio的多种高级特性,包括三种Gradio Clients(python/javascript/curl)、Gradio Tools、Gradio的模块架构和环境变量等,方便读者对Gradio整体把握。第四部分基础功能实战:深入细节,也是本系列文章的核心,实践基础功能Interface、Blocks和Additional Features。第五部分高级功能实战:详解高级功能Chatbots、Data Science And Plots和Streaming。
本系列文章讲解细致,涵盖Gradio大部分组件和功能,代码均可运行并附有大量运行截图,方便读者理解并应用到开发中,Gradio一定会成为每个技术人员实现各种奇思妙想的最称手工具。

本系列文章目录如下:

  1. 《Gradio全解1——Gradio简介》
  2. 《Gradio全解1——Gradio的安装与运行》
  3. 《Gradio全解2——剖析Hugging Face:详解三类资源models/datasets/spaces》
  4. 《Gradio全解3——剖析Hugging Face:实战六类工具库transformers/diffusers/datasets/PEFT/accelerate/optimum》
  5. 《Gradio全解4——Gradio的3+1种部署方式实践》
  6. 《Gradio全解4——浏览器集成Gradio-Lite》
  7. 《Gradio全解5——Gradio Client:python客户端》
  8. 《Gradio全解5——Gradio Client:javascript客户端》
  9. 《Gradio全解5——Gradio Client:curl客户端》
  10. 《Gradio全解6——Gradio Tools:将Gradio用于LLM Agents》
  11. 《Gradio全解7——Gradio库的模块架构和环境变量》
  12. 《Gradio全解8——Interface:高级抽象界面类(上)》
  13. 《Gradio全解8——Interface:高级抽象界面类(下)》
  14. 《Gradio全解9——Blocks:底层区块类(上)》
  15. 《Gradio全解9——Blocks:底层区块类(下)》
  16. 《Gradio全解10——Additional Features:补充特性(上)》
  17. 《Gradio全解10——Additional Features:补充特性(下)》
  18. 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(1)》
  19. 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(2)》
  20. 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(3)》
  21. 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(4)》
  22. 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(5)》
  23. 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(6)》
  24. 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(7)》
  25. 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(8)》
  26. 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(9)》
  27. 《Gradio全解系列12——Data Science And Plots:数据科学与绘图》
  28. 《Gradio全解13——Streaming:数据流(上)》
  29. 《Gradio全解13——Streaming:数据流(下)》

本篇摘要

本篇介绍如何使用Gradio创建聊天机器人,主要内容包括gr.ChatInterface快速创建Chatbot、与流行LLM库及API结合、组件Chatbot及消息格式ChatMessage、使用Blocks创建Chatbot、Chatbot的特殊Events、使用Agents和Tools智能代理工具、通过Gradio应用创建Discord Bot/Slack Bot/Website Widget。

11. Chatbot:融合大模型的多模态聊天机器人

本章介绍如何使用Gradio创建聊天机器人。聊天机器人是大型语言模型(LLMs)的一个流行应用,通过Gradio,我们可以轻松构建LLM演示并与其它用户分享,或者自己使用直观的聊天机器人界面进行开发尝试。本章主要内容包括gr.ChatInterface快速创建Chatbot、与流行LLM库及API结合、组件Chatbot及消息格式ChatMessage、使用Blocks创建Chatbot、Chatbot的特殊Events、使用Agents和Tools智能代理工具、通过Gradio应用创建Discord Bot/Slack Bot/Website Widget。

11.3 组件Chatbot及ChatMessage

本节我们将首先学习聊天机器人组件Chatbot,包括API参数、参数type演示和使用Gradio组件,然后学习消息格式ChatMessage,包括API参数、简单演示和metadata键。

11.3.1 Chatbot:聊天机器人组件

Chatbot聊天机器人组件的调用格式为:gradio.Chatbot(type="messages", ···),这可以创建一个聊天机器人,用于显示用户提交的消息和回复。该组件通常用作输出组件,支持部分Markdown语法,包括加粗、斜体、代码、表格等;同时支持音频、视频和图片文件,这些文件会在聊天机器人中显示,而其他类型的文件则会显示为链接。下面讲述该组件的API参数和用法。

1. API参数

Chatbot较为重要或其独有的API参数如下表所示,更详细的API信息请参考官方文档:https://www.gradio.app/docs/gradio/chatbot。

Parametersstyledefaultdescription
valuelist[MessageDict | Message] | TupleFormat | Callable | NoneNone默认显示在聊天机器人中的消息列表,其中每条消息的格式为 {“role”: “user”, “content”: “Help me.”}。role可以是"user"、“assistant"或"system” 之一;content可以是文本或者是通过Gradio组件传递的媒体文件,例如{“content”: gr.Image(“lion.jpg”)}。如果该值为可调用对象,则每当应用加载时都会调用该函数以设置组件的初始值。
typeLiteral[‘messages’, ‘tuples’] | NoneNone传入fn的chat history参数的消息格式。如果为"messages",则传递的值是一个字典列表,字典中包含OpenAI风格的 “role” 和 “content” 键。“content"键的值应为以下之一:(1)有效的Markdown字符串;(2)包含"path” 键的字典,其值对应要显示的文件;(3)Gradio组件的实例,目前支持Image、Plot、Video、Gallery、Audio和HTML。“role” 键应为 ‘user’ 或 ‘assistant’ 之一,其他角色将不会在输出中显示。如果此参数为’tuples’,则期望传入一个list[list[str | None | tuple]],即一个列表的列表,内部列表应包含2个元素:用户消息和响应消息,但此格式已被弃用。
containerboolTrue如果为True,则会将组件放置在一个容器中——为边框周围提供一些额外的内边距。
editableLiteral[‘user’, ‘all’] | NoneNone允许用户编辑聊天机器人中的哪种消息。如果设置为"user",则允许编辑用户消息;如果设置为"all",则还允许编辑助手消息。
latex_delimiterslist[dict[str, str | bool]] | NoneNone一个字典列表,格式为{“left”: 左分隔符 (str), “right”: 右分隔符 (str), “display”: 是否在新行显示 (bool)},用于渲染LaTeX表达式。如果未提供,latex_delimiters将设置为[{“left”:“$$”, “right”:“$$”, “display”: True }],因此只有用$$分隔符包裹的表达式才会被渲染为LaTeX,并且在新行中显示;还可以传入一个空列表以禁用LaTeX渲染。更多信息请参阅KaTeX文档:https://katex.org/docs/autorender.html。
show_share_buttonbool | NoneNone如果设置为True,将在组件的角落显示一个分享图标,允许用户将输出分享到Hugging Face Spaces Discussions。如果设置为False,不会显示分享图标。如果设置为None(默认行为),则当Gradio应用在Spaces上启动时图标会显示,否则不会显示。
show_copy_buttonboolFalse如果设置为True,会在每个聊天机器人信息中显示一个copy按钮。
show_copy_all_button<class ‘inspect._empty’>False如果设置为True,将显示一个“copy all”按钮,用于将所有chatbot消息复制到剪贴板。
allow_file_downloads<class ‘inspect._empty’>True如果设置为True,将为包含媒体文件的聊天机器人消息显示download按钮。
avatar_imagestuple[str | Path | None, str | Path | None] | NoneNone一个包含两个头像图片路径或URL的元组,分别用于用户和机器人(按此顺序)。如果不想显示用户或机器人的头像,可以传入None。图片路径必须在Gradio应用的工作目录内,或者是一个外部URL。
sanitize_htmlboolTrue如果设置为False,将禁用聊天机器人消息的HTML sanitization(HTML净化)。不建议这样做,因为这可能会导致安全漏洞。
render_markdownboolTrue如果设置为False,将禁用聊天机器人消息的Markdown渲染。
line_breaksboolTrue如果设置为True(默认),将在聊天机器人消息中启用GitHub风格的Markdown换行符;如果设置为False,单行换行符将被忽略。它仅在render_markdown为True时生效。
feedback_optionslist[str] | tuple[str, …] | None(‘Like’, ‘Dislike’)一个字符串列表,表示将向用户显示的反馈选项。区分大小写的字符串"Like"和"Dislike"将显示为拇指图标,而其他任何选项将显示在一个单独的旗帜图标下。
feedback_valuelist[str | None] | NoneNone一个字符串列表,表示整个聊天的反馈状态,仅在type="messages"时生效。列表中的每个条目按顺序对应一条助手消息,其值为用户给出的反馈(例如 “Like”、“Dislike” 或任何自定义反馈选项),如果该消息未收到反馈,则值为None。
layoutLiteral[‘panel’, ‘bubble’] | None“bubble”如果设置为"panel",将以LLM风格布局显示chatbot;如果设置为"bubble",将以消息气泡的形式显示chatbot,用户和机器人的消息会交替显示在两侧。默认值为"bubble"。
group_consecutive_messagesboolTrue如果设置为True,将把来自同一角色的连续消息显示在同一个气泡中。如果设置为False,则每条消息将显示在单独的气泡中。默认值为True。
exampleslist[ExampleMessage] | NoneNone一个示例消息列表,用于在显示任何用户/助手消息之前展示在聊天机器人中。每个示例应为一个字典,包含以下可选键:(1)“text”:表示点击示例时应填充到聊天机器人中的消息;(2)“files”:其值应为一个文件列表,用于填充到聊天机器人中;(3)“icon”:其值应为文件路径或图片URL,用于在示例框中显示;(4)“display_text”:其值应为示例框中显示的文本,如果未提供"display_text",则将显示"text"的值。
2. 参数type演示

Chatbot组件众多API参数中最重要的是type,下面以type为例讲述Chatbot用法。Chatbot组件接受的数据格式由type参数决定,该参数可以取两个值:‘tuples’ 和 ‘messages’,其中’tuples’类型已被弃用,并将在未来的Gradio版本中移除。如果type为 ‘messages’,则聊天机器人发送或接收的数据将是一个字典列表,每个字典包含role和content键。这种格式符合大多数LLM API(如 HuggingChat、OpenAI、Claude)的预期格式。说明如下:

  • role:role键的值为’user’ 或 ‘assistant’,分别表示用户消息和小助手消息;
  • content:content键的值可以是字符串(以Markdown/HTML渲染)、包含"path" 键的字典(其值对应要显示的文件)或Gradio组件(用于显示各类文件)。

简单演示如下:

import gradio as grhistory = [{"role": "assistant", content="How can I help you?"}{"role": "user", content="Can you make me a plot of quarterly sales?"}{"role": "assistant", content="I am happy to provide you that report and plot."}
]with gr.Blocks() as demo:gr.Chatbot(history, type='messages')demo.launch()

运行界面如下:
在这里插入图片描述
注意,虽然type中的tuples类型已被废弃,但目前版本(5.12.0)仍需要设置type=‘messages’,否则会报错:Error: ‘Data incompatible with tuples format. Each message should be a list of length 2.’

3. 使用Gradio组件

Chatbot组件支持在聊天机器人中使用许多核心Gradio组件(例如gr.Image、gr.Plot、gr.Audio和 gr.HTML)。只需在元组列表中包含这些组件之一即可,以下是一个示例:

import gradio as grdef load():return [("Here's an audio", gr.Audio("https://github.com/gradio-app/gradio/raw/main/test/test_files/audio_sample.wav")),("Here's an video", gr.Video("https://github.com/gradio-app/gradio/raw/main/demo/video_component/files/world.mp4"))]with gr.Blocks() as demo:chatbot = gr.Chatbot()button = gr.Button("Load audio and video")button.click(load, None, chatbot)demo.launch()

注意:这里的消息类型type为当前版本默认的tuples,保留此示例只是为展示tuples的用法,实际应用中还是使用messages,上例load的消息改为messages格式,如下:

return [{"role": "assistant", "content": "Here's an audio"}{"role": "assistant", "content": gr.Audio("https://github.com/gradio-app/gradio/raw/main/test/test_files/audio_sample.wav")}{"role": "assistant", "content": "Here's an video"}{"role": "assistant", "content": gr.Video("https://github.com/gradio-app/gradio/raw/main/demo/video_component/files/world.mp4")}
]

11.3.2 ChatMessage:聊天消息格式

在表示消息时,为了方便起见,可以使用ChatMessage组件,这样文本编辑器可以提供自动补全提示和类型检查。ChatMessage是一个数据类,用于表示Chatbot组件中的消息(type=“messages”),其调用格式为:gradio.ChatMessage(···)

1. API参数

ChatMessage的API参数较少,如下表所示,或参考官方文档:https://www.gradio.app/docs/gradio/chatbot。

Parametersstyledefaultdescription
contentstr | FileData | Component | FileDataDict | tuple | list |消息的内容,可以是字符串、文件或Gradio组件。
roleLiteral[‘user’, ‘assistant’, ‘system’]“assistant”消息的角色,用于确定消息在chatbot中的对齐方式。可以是"user"、“assistant"或"system”,默认值为"assistant"。
metadataMetadataDict | Metadata_HAS_DEFAULT_FACTORY_CLASS()消息的元数据,用于显示中间思考过程或工具使用情况。它应为一个字典,包含以下键:“title”(显示思考内容时为必填项)以及可选项:“id” 和"parent_id"(用于嵌套思考)、“duration”(显示思考的持续时间)、“status”(显示思考的状态)。
optionsOptional[list[Option]]None消息的选项,是一个Option对象列表,每个对象是一个字典,包含以下键: “label”(选项中显示的文本)以及可选项:“value”(如果Option的值与标签不同,则返回该值)。
2. 简单演示

先看一个简单示例,将上一节演示的history内容替换为gr.ChatMessage,代码如下:

history = [gr.ChatMessage(role="assistant", content="How can I help you?"),gr.ChatMessage(role="user", content="Can you make me a plot of quarterly sales?"),gr.ChatMessage(role="assistant", content="I am happy to provide you that report and plot.")
]

运行界面同上,不再重复截图。

3. metadata键

除了role和content键之外,messages字典还接受一个metadata键,可以将它设置为生成响应时使用的任意相关工具的信息,这对于显示LLM代理的思考过程非常有用。目前metadata键接受一个包含单个键title的字典,它将会显示在一个可折叠的框中,其它设置请参考API表。以下是一个示例,展示了代理使用天气API工具来回答用户查询的思考过程:

import gradio as gr
def generate_response(message, history):history.append(gr.ChatMessage(role="user", content="input message: "+ message))history.append(gr.ChatMessage(role="assistant",content="The weather API says it is 20 degrees Celcius in San Francisco.",metadata={"title": "🛠️ Used tool Weather API", "id": 123, "parent_id": "think"}))return "", historywith gr.Blocks() as demo:chatbot  = gr.Chatbot(type="messages",value=[{"role": "user", "content": "What is the weather in San Francisco?"},{"role": "assistant", "content": "I need to use the weather API tool","metadata": {"title":  "🧠 Thinking", "id": "think"}}])msg = gr.Textbox()msg.submit(generate_response, [msg, chatbot], [msg, chatbot])demo.launch()

输入test后,运行截图如下:
在这里插入图片描述
注意:history定义时可添加多条消息,但append追加时,只能一条一条的添加,否则报错:TypeError: list.append() takes exactly one argument (2 given)。
我们也可以使用普通的Python字典来指定元数据,代码如下:

def generate_response(message, history):history.append(dict(role="user", content=message))history.append(dict(role="assistant",content="The weather API says it is 20 degrees Celcius in San Francisco.",metadata={"title": "🛠️ Used tool Weather API"}))return "", history

参考文献

  1. Gradio - guides - Chatbots

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

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

相关文章

细说STM32F407单片机窗口看门狗WWDG的原理及使用方法

目录 一、窗口看门狗的工作原理 1、递减计数器 2、窗口值和比较器 3、看门狗的启动 4、提前唤醒中断 二、窗口看门狗的HAL驱动程序 1、窗口看门狗初始化 2.窗口看门狗刷新 3.EWI中断及其处理 三、不开启EWI的WWDG示例 1、示例功能 2、项目设置 &#xff08;1&…

Docker部署Spring Boot + Vue项目

目录 前提条件 概述 下载代码 打开代码 Docker创建网络 MySQL容器准备 MySQL数据库配置 启动MySQL容器 测试连接MySQL 初始化MySQL数据 Redis容器准备 修改Redis配置 启动redis容器 部署后端 后端代码打包 上传jar包到Linux 创建Dockerfile 构建镜像 运行后…

基于Oracle与PyQt6的电子病历多模态大模型图形化查询系统编程构建

一、引言 1.1 研究背景阐述 在当今数字化时代,医疗行业正经历着深刻的变革,数字化转型的需求日益迫切。电子病历(EMR)作为医疗信息化的核心,其管理的高效性和数据利用的深度对于提升医疗服务质量、优化临床决策以及推动医学研究具有至关重要的意义。传统的电子病历管理系…

万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用

文章目录 一、引言二、ARINC 653背景三、整体系统架构四、应用/执行&#xff08;APEX&#xff09;接口五、ARINC 653 RTOS内部机制六、健康监测功能七、软件应用八、ARINC 653现状九、总结 一、引言 在现代航空领域&#xff0c;综合模块化航空电子设备&#xff08;IMA&#xf…

在eNSp上telnet一下吧

在上篇博客&#xff1a;DNS 我们提到了telnet和设备带外管理、带内管理&#xff0c;它确实是非常有趣的一个知识点哦&#xff0c;接下来我们一起来学习学习吧~ Telnet&#xff08;远程登陆协议&#xff09; Telnet基于TCP 23号端口&#xff0c;典型的C/S架构模式&#xff0c;是…

音频语言模型与多模态体系结构

音频语言模型与多模态体系结构 多模态模型正在创造语言、视觉和语音等以前独立的研究领域的协同效应。这些模型使用通用架构,将每种模式视为不同的“token”,使它们能够以一种与人类认知非常相似的方式联合建模和理解世界。 ​ ​可以将多模态分为两个主要领域:输入空间(…

【深度学习】关键技术-正则化(Regularization)

正则化&#xff08;Regularization&#xff09; 是一种用于防止模型过拟合的技术。它通过在损失函数中添加额外的约束项&#xff0c;限制模型的复杂度&#xff0c;从而提高模型的泛化能力。 正则化的主要作用 防止过拟合&#xff1a;通过抑制模型对训练数据的过度拟合&#xf…

怎么在iPhone手机上使用便签进行记录?

宝子们&#xff0c;在这个快节奏的时代&#xff0c;灵感的火花总是一闪而过&#xff0c;待办事项也常常让人应接不暇。好在咱们的 iPhone手机便签超给力&#xff0c;能满足各种记录需求&#xff01;今天就来给大家分享一下&#xff0c;如何在 iPhone 手机上巧用便签&#xff0c…

渗透测试之越权漏洞详解 水平越权 垂直越权 目录越权 SQL跨库查询越权 以及未授权漏洞 一篇文章说明白

目录 什么是越权 越权漏洞形成的原因是&#xff1a; 越权常见分类 漏洞产生条件 越权细分类 水平越权&#xff1a; 水平越权解释&#xff1a; 垂直越权&#xff1a; 垂直越权示例: 解释: 修复建议 例如 越权漏洞易发生的点 1.基础参数 2.多阶段验证 3.基于参数的访…

ANSYS Fluent学习笔记(七)求解器四部分

16.亚松弛因子 Controls面板里面设置&#xff0c;它能够稳定计算的过程。如果采用常规的迭代算法可能结果就会发生振荡的情况。采用亚松驰因子可以有助于残差的稳定。 他的取值范围是0-1&#xff0c;0代表没有亚松驰&#xff0c;1表示物理量变化很快&#xff0c;一般情况下取…

ComfyUI安装

项目地址&#xff1a;https://github.xyz/comfyanonymous/ComfyUI 下载地址(我下载时的最新版时v0.3.10)&#xff1a;https://github.xyz/comfyanonymous/ComfyUI/releases/tag/v0.3.10 加速下载地址&#xff1a;https://bgithub.xyz/comfyanonymous/ComfyUI/releases/tag/v0…

《C++11》静态断言(Static Assert)的使用与优势

C11引入了许多新特性&#xff0c;其中之一就是静态断言&#xff08;Static Assert&#xff09;。这是一种在编译时期进行断言的机制&#xff0c;它可以帮助我们在编译阶段就发现错误&#xff0c;而不是等到运行时才发现。这样可以大大提高代码的质量和稳定性。本文将详细介绍静…

cv::moments

1、 代表所有像素值之和。 2、 代表所有像素值乘以该位置处的x坐标&#xff0c;然后再求和。 3、 代表所有像素值乘以该位置处的y坐标&#xff0c;然后再求和。 4、 5、

JavaScript-正则表达式方法(RegExp)

RegExp 对象用于将文本与一个模式匹配。 有两种方法可以创建一个 RegExp 对象&#xff1a;一种是字面量&#xff0c;另一种是构造函数。 字面量由斜杠 (/) 包围而不是引号包围。 构造函数的字符串参数由引号而不是斜杠包围。 new RegExp(pattern[, flags])一.符集合 1.选择…

Apache搭建https服务器

Apache搭建https服务器 REF: 使用OpenSSL自建一个HTTPS服务

从Arrays源码学习定义工具类

背景 在日常编码中&#xff0c;一个比较好的实践是&#xff1a;我们把一些业务无关的、可复用的一些通用逻辑&#xff0c;封装成工具类、甚至jar包。这样一方面方便通用代码抽取、代码复用&#xff0c;同时也隔离经常变动的业务代码和不变的通用代码。那如何定义好一个工具类呢…

w~Transformer~合集11

我自己的原文哦~ https://blog.51cto.com/whaosoft/12472192 #LightSeq 最高加速9倍&#xff01;字节跳动开源8比特混合精度Transformer引擎,近年来&#xff0c;Transformer 已经成为了 NLP 和 CV 等领域的主流模型&#xff0c;但庞大的模型参数限制了它的高效训练和推理。…

【Rust自学】13.1. 闭包 Pt.1:什么是闭包、如何使用闭包

13.1.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发&#xff0c;而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中&#xff0c;我们会讨论 Rust 的一…

Linux服务器配置onnxruntime-gpu

本文实现 onnxruntime-gpu 不依赖于服务器主机上 cuda 和 cudnn&#xff0c;仅使用虚拟环境中的 cuda 依赖包实现 onnx GPU 推理加速的安装教程。为了适配推理节点&#xff0c;因此我们仅在 base 下配置环境&#xff0c;不需要重新创建新的虚拟环境。 升级 pip pip install -…

近红外简单ROI分析matlab(NIRS_SPM)

本次笔记主要想验证上篇近红外分析是否正确&#xff0c;因为叠加平均有不同的计算方法&#xff0c;一种是直接将每个通道的5分钟实时长单独进行叠加平均&#xff0c;另一种是将通道划分为1分钟的片段&#xff0c;将感兴趣的通道数据进行对应叠加平均&#xff0c;得到一个总平均…