智谱AI-FunctionCall
智谱AI-FunctionCall
编写FuncationCall大模型的函数调用,先直观的感受一下的感受下FunctionCall的魅力
文章目录
- 智谱AI-FunctionCall
- @[toc]
- 1-参考网址
- 2-思路整理
- 3-代码拆件
- 1-[非核心]两个业务函数
- 2-[非核心]业务函数的JsonSchema定义
- 3-[核心]FunctionCall的调用
- 1-打印的结果长什么样子
- 2-FunctionCall的调用流程
文章目录
- 智谱AI-FunctionCall
- @[toc]
- 1-参考网址
- 2-思路整理
- 3-代码拆件
- 1-[非核心]两个业务函数
- 2-[非核心]业务函数的JsonSchema定义
- 3-[核心]FunctionCall的调用
- 1-打印的结果长什么样子
- 2-FunctionCall的调用流程
1-参考网址
- 智谱AI-FunctionCall-代码仓库:https://gitee.com/enzoism/python_zhipu_funcationcall
- FunctionCall大模型的函数调用参考
- 智谱API-大模型调用博客记录
- 智谱API-官网地址
- 智谱API-KEY地址
2-思路整理
- 1)先测试API-KEY是否可用-main01_zhipu_ai.py
- 2)再验证FunctionCall是否可用-main02_functioncall.py
- 3)解读FunctionCall的请求逻辑
3-代码拆件
1-[非核心]两个业务函数
定义两个业务函数,用于查询航班号和查询票价(这个不是FunctionCall的核心功能,只是为了测试)
# 定义一个函数,用于根据日期、出发地和目的地查询航班号
def get_flight_number(date: str, departure: str, destination: str):"""查询航班号:param date: 日期:param departure: 出发地:param destination: 目的地:return: 航班号"""# 定义一个嵌套字典,存储不同出发地和目的地对应的航班号flight_number = {"北京": {"上海": "1234","广州": "8321",},"上海": {"北京": "1233","广州": "8123",}}# 返回查询到的航班号-方法的核心逻辑destination_data = flight_number[departure][destination]return {"flight_number": destination_data}# 定义一个函数,用于根据日期和航班号查询票价
def get_ticket_price(date: str, flight_number: str):"""查询票价:param date: 日期:param flight_number: 航班号:return: 票价"""# 目前代码中票价是固定的,返回一个固定的票价值return {"ticket_price": "1000"}
2-[非核心]业务函数的JsonSchema定义
就是当前的这个JSON说明把【大模型】和【FunctionCall】结合在一起,告诉了大模型有什么工具可以被调用;可以通过大模型针对我们的函数直接帮我们生成对应的JSON说明,如果chat模型不可以,就创建一个专家Prompt来解决
# 定义一个列表,存储工具函数的定义
tools = [{"type": "function","function": {"name": "get_flight_number","description": "根据始发地、目的地和日期,查询对应日期的航班号","parameters": {"type": "object","properties": {"departure": {"description": "出发地","type": "string"},"destination": {"description": "目的地","type": "string"},"date": {"description": "日期","type": "string",}},"required": ["departure", "destination", "date"]},}},{"type": "function","function": {"name": "get_ticket_price","description": "查询某航班在某日的票价","parameters": {"type": "object","properties": {"flight_number": {"description": "航班号","type": "string"},"date": {"description": "日期","type": "string",}},"required": ["flight_number", "date"]},}},
]
3-[核心]FunctionCall的调用
调用FunctionCall的核心代码,主要是调用API接口,获取到返回的结果,然后根据返回的结果,生成对应的JSON数据,返回给chat模型
# 初始化智谱AI客户端,填写自己的APIKey
client = ZhipuAI(api_key="59572aa940214acba740ecb818e4c271.ELxoeOci9Cpmh0es")# 定义一个函数,用于解析模型的函数调用结果
def parse_function_call(model_response, messages):"""解析模型的函数调用结果:param model_response: 模型返回的响应:param messages: 消息列表"""# 判断模型是否进行了函数调用if model_response.choices[0].message.tool_calls:# 获取函数调用信息tool_call = model_response.choices[0].message.tool_calls[0]# 获取函数调用的参数args = tool_call.function.arguments# 初始化函数调用结果function_result = {}# 根据函数名称调用对应的函数if tool_call.function.name == "get_flight_number":# 调用get_flight_number函数,并将结果存储到function_result中function_result = get_flight_number(**json.loads(args))if tool_call.function.name == "get_ticket_price":# 调用get_ticket_price函数,并将结果存储到function_result中function_result = get_ticket_price(**json.loads(args))# 构造tool message,将函数调用结果添加到消息列表中messages.append({"role": "tool","content": f"{json.dumps(function_result)}","tool_call_id": tool_call.id})# 再次调用模型,将函数调用结果输入模型response = client.chat.completions.create(model="glm-4-plus", # 填写需要调用的模型名称messages=messages,tools=tools,)# 打印最终模型的回答结果print("------>第二次调用模型的回答结果:", response.choices[0].message)# 将最终模型的回答结果添加到消息列表中messages.append(response.choices[0].message.model_dump())# 清空对话消息列表
messages = []
# 拼接第一次对话,添加系统消息和用户消息
messages.append({"role": "system", "content": "不要假设或猜测传入函数的参数值。如果用户的描述不明确,请要求用户提供必要信息"})
messages.append({"role": "user", "content": "帮我查询1月23日,北京到广州的航班"})
# 调用模型处理用户消息
response = client.chat.completions.create(model="glm-4-plus", # 填写需要调用的模型名称messages=messages,tools=tools,
)
# 打印模型的响应
print("------>第一次调用模型的回答结果:", response.choices[0].message)
# 将模型的响应添加到消息列表中
messages.append(response.choices[0].message.model_dump())
# 调用parse_function_call函数,解析函数调用结果
parse_function_call(response, messages)
1-打印的结果长什么样子
------>第一次调用模型的请求参数: [{"role": "system", "content": "不要假设或猜测传入函数的参数值。如果用户的描述不明确,请要求用户提供必要信息"}, {"role": "user", "content": "帮我查询1月23日,北京到广州的航班"}]
------>第一次调用模型的回答结果: {"content":null,"role":"assistant","tool_calls":[{"id":"call_-8929800266402085722","function":{"arguments":"{\"date\": \"2024-01-23\", \"departure\": \"北京\", \"destination\": \"广州\"}","name":"get_flight_number"},"type":"function","index":0}]}------>第二次调用模型的请求参数: [{"role": "system", "content": "不要假设或猜测传入函数的参数值。如果用户的描述不明确,请要求用户提供必要信息"}, {"role": "user", "content": "帮我查询1月23日,北京到广州的航班"}, {"content": null, "role": "assistant", "tool_calls": [{"id": "call_-8929800266402085722", "function": {"arguments": "{\"date\": \"2024-01-23\", \"departure\": \"北京\", \"destination\": \"广州\"}", "name": "get_flight_number"}, "type": "function", "index": 0}]}, {"role": "tool", "content": "{\"flight_number\": \"8321\"}", "tool_call_id": "call_-8929800266402085722"}]
------>第二次调用模型的回答结果: {"content":"1月23日从北京飞往广州的航班号为8321。如果需要查询该航班的票价,请告诉我。","role":"assistant","tool_calls":null}
2-FunctionCall的调用流程
- 1)调用智谱AI的API接口,获取到模型的响应
- 2)解析模型的响应,获取到函数调用信息
- 3)根据函数名称调用对应的函数,获取到函数调用结果
- 4)构造tool message,将函数调用结果添加到消息列表中
- 5)再次调用模型,将函数调用结果输入模型
- 6)解析模型的响应,获取到最终的回答结果
相关文章:
智谱AI-FunctionCall
智谱AI-FunctionCall 编写FuncationCall大模型的函数调用,先直观的感受一下的感受下FunctionCall的魅力 文章目录 智谱AI-FunctionCall[toc]1-参考网址2-思路整理3-代码拆件1-[非核心]两个业务函数2-[非核心]业务函数的JsonSchema定义3-[核心]FunctionCall的调用1-打…...
[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署
标题:[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署 水墨不写bug 文章目录 一、无法拷贝类(class uncopyable)的设计解释:重要思想:使用示例 二、锁的RAII设计解释重要考虑使用示例 三、基于RAII模式和互斥锁…...
【玩转MySQL数据字典】MySQL数据字典与常用操作指令
MySQL数据字典简介与常用操作指令 一、数据字典简介 数据字典是MySQL 5.7中用于存储数据库对象元数据的系统表。在MySQL的早期版本中,元数据存储在.frm文件及其他文件里。这种存储方式存在诸多弊端,例如元数据不一致问题,不同文件间元数据的…...
C语言 —— 愿此世如黄金般辉煌 - 进制转换与操作符详解
目录 1. 操作符的分类 2. ⼆进制和进制转换 2.1 2进制转10进制 2.2 10进制转2进制 2.3 2进制转8进制 2.4 2进制转16进制 3. 原码、反码、补码 4. 移位操作符 4.1 左移操作符 4.2 右移操作符 5. 位操作符:&、|、^、~ 5.1 & 按位与 5.2 | 按位或 …...
基于粒子群算法的配电网重构
一、配电网重构原理 定义: 配电网重构是指在满足运行约束的前提下,通过改变开关状态优化配电网性能,提高系统的经济效益和运行效率。 拓扑约束: 配电网必须保持径向拓扑,避免环网或孤岛。采用算法控制开关状态的选择&…...
【云岚到家】-实战问题(上)
【云岚到家】-实战问题(上) 基础架构项目涉及那些角色云岚的业务流程?云岚家政包括那些模块项目采用什么架构如何开发一个接口?RESTful风格的去定义一个接口如何开发一个接口的service方法接口的异常处理怎么实现的?Sp…...
005-获取内存占用率
获取内存占用率 windows平台 在Windows环境下使用C获取内存占用率,可以通过以下两种方式实现,分别针对系统整体和特定进程的内存监控: 一、获取系统整体内存占用率 核心函数:GlobalMemoryStatusEx 步骤: 定义MEMOR…...
python从入门到精通(二十二):python文件操作之Excel全攻略(基于pandas)
Python处理表格数据 1.表格的基础知识1.1 xls与xlsx格式详解1.2 表格内部结构的认识 2.表格的基础操作2.1 认识表格的基本库2.1.1 csv内置的标准库2.1.2 xlrd 和 xlwt2.1.3 openpyxl2.1.4 pandas 2.2 安装和环境配置2.3 xlrd 和 xlwt2.3.1 库的说明2.3.2 安装xlrd库2.3.3 导入模…...
html常用标签
文章说明 本文旨在总结 HTML 中常见的标签,并提供简洁的解释,方便大家快速查找和复习。我们假设读者已经具备一定的 HTML 基础知识。本文将持续更新和完善,欢迎大家参与续写和补充 一、 HTML 标签 整个网页从 <html> 开始到 </html…...
ROS分布式部署通信
目录 一、概念 二、设置 ROS 分布式网络 1. 环境要求 2. 主机(Master)设置 3. 从机(节点设备)设置 4. 测试是否正常通信 三、进阶启动多从机节点(launch)。 一、概念 ROS 分布式通信用于在多台计算机…...
.Net 6 上传文件接口 文件大小报错整体配置
/// <summary>/// 上传文件/// </summary>/// <param name"file"></param>/// <returns></returns>[HttpPost("UploadifyFile")][RequestSizeLimit(2000 * 1024 * 1024)] // 设置最大请求体大小为 100MBpublic async …...
12.【线性代数】——图和网络
十二 图和网络(线性代数的应用) 图 g r a p h { n o d e s , e d g e s } graph\{nodes, edges\} graph{nodes,edges}1.关联矩阵2. A A A矩阵的零空间,求解 A x 0 Ax0 Ax0 电势3. A T A^T AT矩阵的零空间,电流总结电流图结论 …...
游戏引擎学习第145天
仓库:https://gitee.com/mrxiao_com/2d_game_3 今天的计划 目前,我们正在完成遗留的工作。当时我们已经将声音混合器(sound mixer)集成到了 SIMD 中,但由于一个小插曲,没有及时完成循环内部的部分。这个小插曲主要是…...
Linux(Centos 7.6)命令详解:zip
1.命令作用 打包和压缩(存档)文件(package and compress (archive) files);该程序用于打包一组文件进行分发;存档文件;通过临时压缩未使用的文件或目录来节省磁盘空间;且压缩文件可以在Linux、Windows 和 macOS中轻松提取。 2.命…...
23年以后版本pycharm找不到conda可执行文件解决办法
这个问题很痛苦,折磨了我半天。 就是链接远程服务器的时候 就一直以为这三个都要配置 就这个conda环境这里怎么都找不到服务器的虚拟环境的python可执行文件,非常痛苦。 后面查找了资料,找了好久,才发现,原来只需要配…...
AGI(Artificial General Intelligence,通用人工智能)技术介绍
文章目录 **AGI的关键特点**1. **泛化能力**:2. **自主性和适应性**:3. **自我意识与推理**: **与当前AI的区别****AGI的挑战**1. **技术难点**:2. **伦理与安全**:3. **资源与算力**: **AGI的实现路径**- …...
createrepo centos通过nginx搭建本地源
yum update 先安装一个nginx。 安装Nginx yum install gcc gcc-c pcre pcre-devel openssl openssl-devel libtool zlib zlib-devel -y cd /usr/local/src wget http://nginx.org/download/nginx-1.22.0.tar.gz tar -zxvf nginx-1.22.0.tar.gz cd nginx-1.22.0 ./configu…...
279.完全平方数
279.完全平方数 力扣题目链接(opens new window) 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 给你一个整数 n ,返回和为 n 的完全平方数的 最少数…...
Dify部署踩坑指南(Windows+Mac)
组件说明 Dify踩坑及解决方案 ⚠️ 除了修改镜像版本,nginx端口不要直接修改docker-compose.yaml !!!!!!! 1、更换镜像版本 这个文件是由.env自动生成的,在.env配置 …...
备赛蓝桥杯之第十五届职业院校组省赛第六题:简易JSX解析器
提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题࿰…...
深入解析ECDSA与RSA公钥算法:原理、对比及AWS最佳实践
一、公钥加密算法概述 在HTTPS通信和数字证书领域,ECDSA(椭圆曲线数字签名算法)和RSA(Rivest-Shamir-Adleman)是最主流的两种非对称加密算法。它们共同构成了现代网络安全的基础,但设计理念和技术实现存在显著差异。 © ivwdcwso (ID: u012172506) 二、RSA算法详解…...
单例设计模式---懒汉式--线程安全和不安全、枚举类
单例设计模式—懒汉式–线程安全和不安全 优点 资源利用率高:只有在真正需要使用单例实例时才进行创建,避免了在应用启动时就占用不必要的资源。 缺点 线程安全问题:在多线程环境下,如果多个线程同时调用获取实例的方法ÿ…...
c++: 容器vector
文章目录 介绍initializer_list与string的不同底层总代码 介绍 C 中的 vector 是一种序列容器,它允许你在运行时动态地插入和删除元素。 vector 是基于数组的数据结构,但它可以自动管理内存,这意味着你不需要手动分配和释放内存。 与 C 数组相…...
肖恩的n次根
1.肖恩的n次根 - 蓝桥云课 问题描述 喜欢研究数学问题的肖恩注意到,在编程语言中通常内置函数只有开平方根和开立方根,但是肖思想知道开高次方根(大于3次方称为高次方),应该怎么做。请你设计一个程序来帮帮肖恩。 输…...
Java直通车系列15【Spring MVC】(ModelAndView 使用)
目录 1. ModelAndView 概述 2. ModelAndView 的主要属性和方法 主要属性 主要方法 3. 场景示例 示例 1:简单的 ModelAndView 使用 示例 2:使用 ModelAndView 处理列表数据 示例 3:使用 ModelAndView 处理异常情况 1. ModelAndView 概…...
LeetCode和为k的字数组(560题)
题目展示 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2: 输入:nums …...
消息队列为什么会有消费组的概念,什么作用,以订单系统为例说明
消息队列中的消费组(Consumer Group)概念是为了实现消息的并行处理和负载均衡。在分布式系统中,消费组允许多个消费者实例共同消费同一个主题(Topic)中的消息,从而提高消息处理的速度和系统的吞吐量。 消费…...
数据结构--AVL树
一、二叉搜索树(Binary Search Tree, BST) 基本性质 对于树中的每个节点,其左子树中的所有节点值均小于该节点值。其右子树中的所有节点值均大于该节点值。左右子树也分别是二叉搜索树。 极端场景 在极端情况下,如插入节点顺序…...
OpenManus 的提示词
OpenManus 的提示词 引言英文提示词的详细内容工具集的详细说明中文翻译的详细内容GitHub 仓库信息背景分析总结 引言 OpenManus 是一个全能 AI 助手,旨在通过多种工具高效地完成用户提出的各种任务,包括编程、信息检索、文件处理和网页浏览等。其系统提…...
达梦数据库在Linux,信创云 安装,备份,还原
(一)系统环境检查 1操作系统:确认使用的是国产麒麟操作系统,检查系统版本是否兼容达梦数据库 V8。可以通过以下命令查看系统版本: cat /etc/os-release 2硬件资源:确保服务器具备足够的硬件资源࿰…...
怎么使用Sam Helper修改手机屏幕分辨率,使得游戏视野变广?
1.准备Shizuku 和Sam Helper软件 2.打开设置,找到关于本机,连续点击版本号五次打开开发者选项 3.找到开发者选项,打开USB调试和无线调试 4.返回桌面,我们接着打开shizuku,点击配对,这里打开开发者选项,找…...
Unity DOTS 从入门到精通之 创建实体
文章目录 前言安装 DOTS 包创建实体1.手动创建空实体(适用于运行时动态创建)2.克隆 预制体(主线程同步操作)3.克隆 预制体(兼容Job System)4.通过 GameObject 转换(Baker方式) 其他E…...
【OA角色数据权限】自定数据权限(自定义部门)、本部门数据权限、本部门及以下数据权限、仅本人数据权限
文章目录 引言I 表设计部门表设计角色表设计II 数据过滤处理注解参数说明数据权限使用数据过滤处理切面 DataScopeAspectQuery 基类知识扩展引言 I 表设计 部门表设计 部门表采用部门路径反应祖先层级关系(包含自己部门的ID) 查询用户所在的本部门及其对应的下级部门:采用…...
记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)
文章目录 记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)一、微信小程序注册摘要1.1 注册流程要点 二、小程序发布流程三、下载工具 记录小白使用 Cursor 开发第一个微信小程序(…...
STM32旋转编码器驱动详解:方向判断、卡死处理与代码分析 | 零基础入门STM32第四十八步
主题内容教学目的/扩展视频旋转编码器电路原理,跳线设置,结构分析。驱动程序与调用。熟悉电路和驱动程序。 师从洋桃电子,杜洋老师 📑文章目录 一、旋转编码器原理与驱动结构1.1 旋转编码器工作原理1.2 驱动程序结构 二、方向判断…...
海思Hi3516DV00移植yolov5-7.0的模型转化流程说明
一、YOLOv5 YOLOv5作为单阶段检测框架的集大成者,凭借其卓越的实时性、高精度和易用性,已成为工业界实际部署的首选方案。yolov5的最新版本是7.0,该版本是官方最后更新的一个版本。yolov5-7.0 工程化实现卓越:基于PyTorch框架构…...
C++ string类(前)
目录 一、前言 二、正文 1.1什么是string类 1.2为什么学习string类 1.3string使用注意 1.4 string 类常用接口说明 1.4.1string类对象的常见构造 1.4.2string类对象的容量操作 1.4.3 string 类对象的访问以及遍历操作 1.4.4 string 类对象的修改操作 三、结言 一、前…...
MySQL---INSERT语句、UPDATE语句、DELETE语句
目录 INSERT语句-插入 1.格式 2.操作 UPDATE语句-修改 1.格式 2.操作 DELETE语句-删除 1.格式 2.操作 INSERT语句-插入 1.格式 格式: insert into 表名 values (value1,value2,.....) 1. value后的内容:与表字段匹配的数据,如果字段为主键&…...
vuejs 模板语法、条件渲染、v-for、事件处理、表单输入绑定
创建vue项目之后我们就可以开始写代码了,我们的代码一般都会写在src目录-components目录-HelloWord.vue文件内。 我们之前写的HTML文件的结构是HTML代码可以集成或者连接外部的css/js文件。 我们通过vue建立的项目,它的结构是在一个vue文件内集成了HTML…...
Mysql中的常用函数
1、datediff(date1,date2) date1减去date2,返回两个日期之间的天数。 SELECT DATEDIFF(2008-11-30,2008-11-29) AS DiffDate -- 返回1 SELECT DATEDIFF(2008-11-29,2008-11-30) AS DiffDate -- 返回-1 2、char_length(s) 返回字符串 s 的字符数 3、round(x,d)…...
使用JMeter(组件详细介绍+使用方式及步骤)
JSON操作符 在我们使用请求时,经常会遇到JSON格式的请求体,所以在介绍组件之前我会将介绍部分操作符,在进行操作时是很重要的 Operator Description $ 表示根元素 当前元素 * 通配符,所有节点 .. 选择所有符合条件的节点 .name 子元素,name是子元素名称 [start:e…...
【大模型聊天】实时交互技术选型
在Python开发中,实现RAG问答或大模型聊天功能无需强制使用WebSocket,技术选型需结合实时性需求与交互场景。以下是技术分析及示例: 技术方案对比 技术适用场景优缺点WebSocket双向高频交互(如实时对话)优点࿱…...
计算机网络:计算机网络的概念
1.计算机网络:由若干个结点和链接这些的链路组成。 2.集线器(Hub):可以把多个结点连接起来,组成一个计算机网络。 不能避免数据冲突的情况 3.交换机(Switch):可以把多个结点连接起来&#x…...
Trae:引领未来的 AI 编程新时代
目录 Trae:引领未来的 AI 编程新时代 更快、更好、更准确的 AI IDE 无缝协作,AI 赋能开发者 Builder 模式:从 0 到 1 的智能助力 深度上下文理解,精准满足开发需求 实时代码补全,极致提升开发效率 智能 AI 协作…...
Vue _总结
文章目录 一 Vue介绍1 什么是Vue.js2 MVVM二 第一个例子1 引入vue2 html中用法3 创建vue实例对象三 Vue基本语法1 v-text2 v-bind3 v-on4 v-model5 v-if6 v-for7 计算属性8 组件化全局注册本地注册9 生命周期10 员工程序使用vue.js重构list.htmladd.htmlupdate.html四 使用vue-…...
Refreshtoken 前端 安全 前端安全方面
网络安全 前端不需要过硬的网络安全方面的知识,但是能够了解大多数的网络安全,并且可以进行简单的防御前两三个是需要的 介绍一下常见的安全问题,解决方式,和小的Demo,希望大家喜欢 网络安全汇总 XSSCSRF点击劫持SQL注入OS注入请求劫持DDOS 在我看来,前端可以了解并且防御前…...
基于深度学习的医学图像分割算法研究——结合MRI/CT图像的肿瘤区域自动分割与三维重建
针对课题《基于深度学习的医学图像分割算法研究——结合MRI/CT图像的肿瘤区域自动分割与三维重建》,以下是详细的研究框架与技术实现方案: 1. 核心研究要点 主要目标:构建端到端的深度学习模型,实现MRI/CT肿瘤区域的精准分割,并通过三维可视化支持临床诊断。核心挑战: 医…...
企业如何选择研发项目进度管理软件?盘点15款实用工具
这篇文章介绍了以下工具: 1. PingCode; 2. Worktile; 3. 腾讯 TAPD; 4. 华为 DevCloud; 5. 亿方云; 6. 阿里云效; 7. CODING 码云; 8. 明道云; 9. 进度猫; 10. 轻流等。 …...
【2024_CUMCM】图论模型
基本概念 注:以下叙述大多是自话,夹杂多数不专业表述 点集、边集 图论中图是由点和边组成的 G(V,E) V--点集 E--边集 权 G(V,E,W) W--权 一般都有权,构成赋权图 赋权图 在图中每条边都赋予一个非负实数权重的图,就是给每一条…...
Unity UGUI下优化需要射线检测类的UI元素的一种方式
直接上脚本 - 原理探究 先看MaskableGraphic 可以看到继承了Graphic,继续深入 在构造函数中找到了useLegacyMeshGeneration 而useLegacyMeshGeneration用来判断是否使用旧的网格生成系统,这里我们使用新的 在这个方法中,Graphic默认通过…...