关于TVM模型的Relay IR的Node遍历

news2026/4/2 16:29:53

TVM Relay Node类型与遍历方法

  • 目的
  • 二、步骤
    • 1.遍历方法
    • 2.关于节点类型
  • 总结


目的

关于TVM模型的Relay IR的Node遍历

二、步骤

1.遍历方法

代码如下(示例):

import tvm
from tvm import relay
from tvm.contrib.debugger import debug_executor
import numpy as np
import onnx
from tvm.contrib import graph_executor

# 定义fvisit函数
def print_node_type(node):
    print(type(node))

def compile_and_run_each_layer(path, input_shape, target):
    onnx_model = onnx.load(path)
    mod, params = relay.frontend.from_onnx(onnx_model, shape={'input': input_shape})
    # 编译模型
    with tvm.transform.PassContext(opt_level=3):
        lib = relay.build(mod, target, params=params)

    # 获取每个操作, node类型包括:tvm.relay.expr.Var,tvm.ir.op.Op,tvm.relay.expr.Constant,tvm.relay.expr.Call,tvm.relay.function.Function等
    node for node in relay.analysis.post_order_visit(mod['main'], print_node_type)

打印Resnet50的Node类型如下:

<class 'tvm.relay.expr.Var'>
<class 'tvm.ir.op.Op'>
<class 'tvm.ir.op.Op'>
<class 'tvm.ir.op.Op'>
<class 'tvm.ir.op.Op'>
<class 'tvm.ir.op.Op'>
<class 'tvm.ir.op.Op'>
<class 'tvm.ir.op.Op'>
<class 'tvm.ir.op.Op'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.expr.Constant'>
<class 'tvm.relay.expr.Call'>
<class 'tvm.relay.function.Function'>

2.关于节点类型

在 TVM 框架中,relay 模块定义了用于构建和表示深度学习计算图的类和函数。下面是一些类的概述和它们在 Relay IR (中间表示)中的作用:

  1. tvm.relay.expr.Var: 这个类代表了计算图中的一个变量,通常用来表示输入数据或者模型参数。每一个 Var 实例都有一个唯一的名称和数据类型。例如,创建一个新的变量:
x = relay.var('x', relay.TensorType((1,), 'float32'))
  1. tvm.ir.op.Op: 这是所有 Relay算子的基类,它描述了一个操作的属性和行为。操作(Op)是构建神经网络层的基础,例如卷积、激活函数、池化等。举例来说,获取一个操作符的信息:
add_op_info = relay.op.get("add")
  1. tvm.relay.expr.Constant: 表示计算图中的常数值。一个 Constant 包含一个实际的张量值,通常用于表示模型中的权重和偏差。创建一个常量:
one = relay.const(1, 'float32')
  1. tvm.relay.expr.Call: 代表对一个函数或者操作的调用。在 Relay 中,模型中的每一个层(例如,卷积层、全连接层等)通常由一个 Call 节点表示。例如,创建一个对 add 函数的调用:
y = relay.add(x, one)
  1. tvm.relay.function.Function: 这个类表示一个 Relay 函数,它有参数列表和函数体。一般用于定义模型的前向传播,将输入变量映射到输出。创建一个简单的函数:
 `fn = relay.Function([x], y)`

在 Relay IR 中,这些类和实例是用于构建和表示深度学习模型的不同部分。通过这些构建块,可以表示复杂的计算图,进而进行优化和编译,以在不同的硬件上高效运行。

总结

TVM入门

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

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

相关文章

数据结构---复杂度(2)

1.斐波那契数列的时间复杂度问题 每一行分别是2^0---2^1---2^2-----2^3-------------------------------------------2^(n-2) 利用错位相减法&#xff0c;可以得到结果是&#xff0c;2^(n-1)-1,其实还是要减去右下角的灰色部分&#xff0c;我们可以拿简单的数字进行举例子&…

Halcon测量专栏-圆弧测量

1.前言 1.1什么是圆弧 圆上任意两点间的部分叫做圆弧。由于圆弧有正反的特性&#xff0c;即为有顺时针方向和逆时针方向&#xff0c;在确定圆弧时&#xff0c;也需要确定圆弧的方向。 1.2halcon实现方式 针对圆弧的问题。1&#xff1a;它与圆是相似的&#xff0c;都具备中心…

(完美方案)解决mfc140u.dll文件丢失问题,快速且有效的修复

唉&#xff0c;又是丢失了mfc140u.dll&#xff0c;这该怎么办呢&#xff1f;如果你的电脑突然找不到或丢失mfc140u.dll文件&#xff0c;那就真是太糟糕了。别担心&#xff0c;我分享给你一些干货&#xff0c;告诉你如何快速解决mfc140u.dll丢失的问题。 一.mfc140u.dll属性功能…

分布式之Ribbon使用以及原理

Ribbon使用以及原理 1、负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去&#xff0c;nginx作为反向代理&#xff0c;然后路由给后端的服务器&#xff0c;由于负载均衡算法是nginx提供的&#xff0c;而nginx是部署到服务器端的&#xff0c;所…

数据结构入门(3)2.链表接口实现

目录 前言 头文件 动态申请一个结点 单链表打印 单链表尾插 单链表的头插 单链表的尾删 单链表头删 单链表查找 单链表在pos位置之后插入x 单链表删除pos位置之后的值 在pos的前面插入 删除pos位置 销毁顺序表 前言 本文将介绍链表常见的功能的实现 头文件 #…

【Java】仓库管理系统 SpringBoot+LayUI+DTree(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【APB协议 UVM_Sequencer Driver Monitor_2024.03.04】

apb协议 写时序 地址、写信号、PSEL、写数据信号同时发生变化&#xff0c;即传输的第一个时钟被称为SETUP周期。在下个时钟上升沿,PENABLE信号拉高&#xff0c;表示ENABLE周期&#xff0c;在该周期内&#xff0c;数据、地址以及控制信号都必须保持有效。整个写传输在这个周期…

【Java常用API】正则表达式的基础使用

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

Matlab|计及需求响应和电能交互的多主体综合能源系统主从博弈优化调度策略

目录 主要内容 部分代码 结果一览 下载链接 主要内容 程序建立了多主体综合能源模型&#xff0c;采用双层模型进行求解&#xff0c;上层用自适应粒子群算法求解出各能源售价和需求响应补偿价格&#xff1b;下层采用混合整数规划算法求解出三个园区、配电网、储能…

leetcode 热题 100_旋转图像

题解一&#xff1a; 翻转数组&#xff1a;先将数组沿右上-左下对角线翻转&#xff0c;再将数组上下翻转。 class Solution {public void rotate(int[][] matrix) {int n matrix.length;for (int i 0; i < n; i) {//沿右上-左下对角线翻转for (int j 0; j < n - i - 1…

vob格式转换mp4怎么转? 如何保持vob原画质?

VOB&#xff08;Video Object&#xff09;文件格式在数字视频制作领域崭露头角。起源于DVD技术的发展&#xff0c;VOB旨在存储包括音频、视频和菜单等多媒体元素的内容。这一格式为数字娱乐提供了高质量的视频体验&#xff0c;然而&#xff0c;由于其相对封闭的特性&#xff0c…

Stable Diffusion 模型下载:Comic Babes(漫画宝贝)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者datmuttdoe文件名称comicBabes_v2.safet…

数据治理实践——金融行业大数据治理的方向与实践

目录 一、证券数据治理服务化背景 1.1 金融数据治理发展趋势 1.2 证券行业数据治理建设背景 1.3 证券行业数据治理目标 1.4 证券行业数据治理痛点 二、证券数据治理服务化实践 2.1 国信证券数据治理建设框架 2.2 国信证券数据治理建设思路 2.3 数据模型管理 2.4 数据…

例解变分自编码器(VAE)

本文通过一个回归例子介绍变分自编码器。产生训练和测试样本的代码如下&#xff1a; # data import tensorflow as tf import numpy as np import matplotlib.pyplot as plt %matplotlib inlinedef f(x, sigma):# y 10 * sin(2 * pi) epsilonreturn 10 * np.sin(2 * np.pi *…

【漏洞分析】CVE-2024-27198可RCE身份验证绕过JetBrains TeamCity

CVE-2024-27198可RCE身份验证绕过JetBrains TeamCity 一、基本原理二、创建新的管理员用户三、自我检查四、POC 一、基本原理 向存在漏洞服务器发送一个不存在的页面请求 ?jsp/app/rest/server;.jsp 这会使服务器报错提供版本信息&#xff0c;且无需登录 Fofa app“JET_BRAIN…

Linux工具 - 好用的yum包管理器

~~~~ 前言yum是什么为什么有yum如何使用yum配置用户yum源为什么要配置yum源具体配置备份CentOS-Base.repo文件下载对应阿里yum源到本目录/etc/yum.repos.d/清理yum并生成缓存更改配置文件CentOS-Base.repo更新yum 常用命令listinstall选项-y remove选项-y update 结语 前言 本…

ON1 Portrait AI 2023:智能美颜,打造完美人像 mac版

在数字化时代&#xff0c;人像摄影的需求和追求愈发高涨。为了满足摄影师对于完美人像的追求&#xff0c;ON1推出了全新的ON1 Portrait AI 2023。这款软件结合了先进的人工智能技术与人像处理的专业知识&#xff0c;为人像摄影带来了前所未有的智能体验。 ON1 Portrait AI 202…

2024.3.11

1.结构体数组 代码&#xff1a; #include<myhead.h>struct Stu {char name[100];int age;double score; };int main(int argc, const char *argv[]) {int i,j;struct Stu t{"z",1,1};struct Stu arr[4]{{"甲乙",12,98},{"陈二",13,77},{…

docker启动时环境变量不生效(docker打包成镜像后环境变量失效)

前言 因项目需要多处部署&#xff0c;为了部署的方便&#xff0c;于是准备将项目环境打包成docker镜像以便于部署。mq、mysql这些在仓库中都有现成的镜像&#xff0c;虽然java和nginx的也都有&#xff0c;但是不知道当时是怎么想的&#xff0c;就不想搞太多镜像&#xff0c;也…

五、OpenAI实战之Assistants API

在8线小城的革委会办公室里&#xff0c;黑8和革委会主任的对话再次展开。 黑8&#xff1a;主任&#xff0c;您知道吗&#xff1f;除了OpenAI API&#xff0c;现在还有一项新的技术叫做Assistants API&#xff0c;它可以帮助我们更好地进行对话和沟通。 主任&#xff1a;Assis…