当前位置: 首页 > news >正文

Assistants API

一、前言

0.1、从轰动一时的 OpenAI DevDay 说起

2023 年 11 月 6 日,OpenAI DevDay 发表了一系列新能力,其中包括:GPT StoreAssistants API

在这里插入图片描述

这一波操作一度被认为是创业公司终结者

在这里插入图片描述

0.2、GPTs 和 Assistants API 本质是降低开发门槛

可操控性和易用性之间的权衡与折中:

  1. 更多技术路线选择:原生 API、GPTs 和 Assistants API
  2. GPTs 的示范,起到教育客户的作用,有助于打开市场
  3. 要更大自由度,需要用 Assistants API 开发
  4. 想极致调优,还得原生 API + RAG

0.3、Assistants API 的主要能力

  1. 创建和管理 assistant,每个 assistant 有独立的配置
  2. 支持无限长的多轮对话,对话历史保存在 OpenAI 的服务器上
  3. 通过自有向量数据库支持基于文件的 RAG
  4. 支持 Code Interpreter
    1. 在沙箱里编写并运行 Python 代码
    2. 自我修正代码
    3. 可传文件给 Code Interpreter
  5. 支持 Function Calling
  6. 支持在线调试的 Playground

收费:

  1. 按 token 收费。无论多轮对话,还是 RAG,所有都按实际消耗的 token 收费
  2. 如果对话历史过多超过大模型上下文窗口,会自动放弃最老的对话消息
  3. 文件按数据大小和存放时长收费。1 GB 向量存储 一天收费 0.10 美元
  4. Code interpreter 跑一次 $0.03

二、Assistants API

!pip install --upgrade openai

2.1、创建一个 Assistant

可以为每个应用,甚至应用中的每个有对话历史的使用场景,创建一个 assistant。

可以用代码创建,也不复杂,例如:

from openai import OpenAI# 初始化 OpenAI 服务
client = OpenAI()# 创建助手
assistant = client.beta.assistants.create(name="AGIClass Demo",instructions="你叫瓜瓜,你是AGI课堂的智能助理。你负责回答与AGI课堂有关的问题。",model="gpt-4o",
)
print(assistant.id)

但是,更佳做法是,到 Playground 在线创建,因为:

  1. 更方便调整
  2. 更方便测试
asst_xi4KvqarumvNarFA2jdwmzkb

2.2、样例 Assistant 的配置

Instructions:

你叫瓜瓜。你是AGI课堂的助手。你只回答跟AI大模型有关的问题。不要跟学生闲聊。每次回答问题前,你要拆解问题并输出一步一步的思考过程。

Functions:

{"name": "ask_database","description": "Use this function to answer user questions about course schedule. Output should be a fully formed SQL query.","parameters": {"type": "object","properties": {"query": {"type": "string","description": "SQL query extracting info to answer the user's question.\nSQL should be written using this database schema:\n\nCREATE TABLE Courses (\n\tid INT AUTO_INCREMENT PRIMARY KEY,\n\tcourse_date DATE NOT NULL,\n\tstart_time TIME NOT NULL,\n\tend_time TIME NOT NULL,\n\tcourse_name VARCHAR(255) NOT NULL,\n\tinstructor VARCHAR(255) NOT NULL\n);\n\nThe query should be returned in plain text, not in JSON.\nThe query should only contain grammars supported by SQLite."}},"required": ["query"]}
}

三、代码访问 Assistant

3.1、管理 thread

Threads:

  1. Threads 里保存的是对话历史,即 messages
  2. 一个 assistant 可以有多个 thread
  3. 一个 thread 可以有无限条 message
  4. 一个用户与 assistant 的多轮对话历史可以维护在一个 thread 里
import jsondef show_json(obj):"""把任意对象用排版美观的 JSON 格式打印出来"""print(json.dumps(json.loads(obj.model_dump_json()),indent=4,ensure_ascii=False))
from openai import OpenAI
import osfrom dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())# 初始化 OpenAI 服务
client = OpenAI()   # openai >= 1.3.0 起,OPENAI_API_KEY 和 OPENAI_BASE_URL 会被默认使用# 创建 thread
thread = client.beta.threads.create()
show_json(thread)
{"id": "thread_OARH7c8gXNgOWE3jBVhBkBjh","created_at": 1723097175,"metadata": {},"object": "thread","tool_resources": {"code_interpreter": null,"file_search": null}
}

可以根据需要,自定义 metadata,比如创建 thread 时,把 thread 归属的用户信息存入。

thread = client.beta.threads.create(metadata={"fullname": "王卓然", "username": "wzr"}
)
show_json(thread)
{"id": "thread_yHexybuAqnucf8qfrPflETEf","created_at": 1723097179,"metadata": {"fullname": "王卓然","username": "wzr"},"object": "thread","tool_resources": {"code_interpreter": null,"file_search": null}
}

Thread ID 如果保存下来,是可以在下次运行时继续对话的。

从 thread ID 获取 thread 对象的代码:

thread = client.beta.threads.retrieve(thread.id)
show_json(thread)
{"id": "thread_yHexybuAqnucf8qfrPflETEf","created_at": 1723097179,"metadata": {"fullname": "王卓然","username": "wzr"},"object": "thread","tool_resources": {"code_interpreter": {"file_ids": []},"file_search": null}
}

此外,还有:

  1. threads.modify() 修改 thread 的 metadatatool_resources
  2. threads.retrieve() 获取 thread
  3. threads.delete() 删除 thread。

具体文档参考:https://platform.openai.com/docs/api-reference/threads

3.2、给 Threads 添加 Messages

这里的 messages 结构要复杂一些:

  1. 不仅有文本,还可以有图片和文件
  2. 也有 metadata
message = client.beta.threads.messages.create(thread_id=thread.id,  # message 必须归属于一个 threadrole="user",          # 取值是 user 或者 assistant。但 assistant 消息会被自动加入,我们一般不需要自己构造content="你都能做什么?",
)
show_json(message)
{"id": "msg_srQF1npndSQGbPHpPenRLmuN","assistant_id": null,"attachments": [],"completed_at": null,"content": [{"text": {"annotations": [],"value": "你都能做什么?"},"type": "text"}],"created_at": 1723097207,"incomplete_at": null,"incomplete_details": null,"metadata": {},"object": "thread.message","role": "user","run_id": null,"status": null,"thread_id": "thread_yHexybuAqnucf8qfrPflETEf"
}

还有如下函数:

  1. threads.messages.retrieve() 获取 message
  2. threads.messages.update() 更新 message 的 metadata
  3. threads.messages.list() 列出给定 thread 下的所有 messages

具体文档参考:https://platform.openai.com/docs/api-reference/messages

也可以在创建 thread 同时初始化一个 message 列表

thread = client.beta.threads.create(messages=[{"role": "user","content": "你好",},{"role": "assistant","content": "有什么可以帮您?",},{"role": "user","content": "你是谁?",},]
)show_json(thread)  # 显示 thread
print("-----")
show_json(client.beta.threads.messages.list(thread.id))  # 显示指定 thread 中的 message 列表
{"id": "thread_OutYgPBocoMQL0U9nbSET469","created_at": 1723097223,"metadata": {},"object": "thread","tool_resources": {"code_interpreter": null,"file_search": null}
}
-----
{"data": [{"id": "msg_JvbHlkhDNuScmJRroev14ITO","assistant_id": null,"attachments": [],"completed_at": null,"content": [{"text": {"annotations": [],"value": "你是谁?"},"type": "text"}],"created_at": 1723097223,"incomplete_at": null,"incomplete_details": null,"metadata": {},"object": "thread.message","role": "user","run_id": null,"status": null,"thread_id": "thread_OutYgPBocoMQL0U9nbSET469"},{"id": "msg_6zAx2bWsTHhBFSdfn8vPnTWk","assistant_id": null,"attachments": [],"completed_at": null,"content": [{"text": {"annotations": [],"value": "有什么可以帮您?"},"type": "text"}],"created_at": 1723097223,"incomplete_at": null,"incomplete_details": null,"metadata": {},"object": "thread.message","role": "assistant","run_id": null,"status": null,"thread_id": "thread_OutYgPBocoMQL0U9nbSET469"},{"id": "msg_CLea9Quz8CeLXQBWBlwVvPm0","assistant_id": null,"attachments": [],"completed_at": null,"content": [{"text": {"annotations": [],"value": "你好"},"type": "text"}],"created_at": 1723097223,"incomplete_at": null,"incomplete_details": null,"metadata": {},"object": "thread.message","role": "user","run_id": null,"status": null,"thread_id": "thread_OutYgPBocoMQL0U9nbSET469"}],"object": "list","first_id": "msg_JvbHlkhDNuScmJRroev14ITO","last_id": "msg_CLea9Quz8CeLXQBWBlwVvPm0","has_more": false
}

3.3、开始 Run

  • 用 run 把 assistant 和 thread 关联,进行对话
  • 一个 prompt 就是一次 run

3.1、直接运行

assistant_id = "asst_VtH1Ty9fCMzs5wPQxfNR5d0v"  # 从 Playground 中拷贝run = client.beta.threads.runs.create_and_poll(thread_id=thread.id,assistant_id=assistant_id,
)
if run.status == 'completed':messages = client.beta.threads.messages.list(thread_id=thread.id)show_json(messages)
else:print(run.status)
{"data": [{"id": "msg_BVhyxciLowMUtYRRLAuSycX6","assistant_id": "asst_VtH1Ty9fCMzs5wPQxfNR5d0v","attachments": [],"completed_at": null,"content": [{"text": {"annotations": [],"value": "我是瓜瓜,AGI课堂的智能助理。我可以帮助你解答与AGI课堂相关的问题,包括课程安排、内容查询等。如果你有任何问题,请随时告诉我!"},"type": "text"}],"created_at": 1723097246,"incomplete_at": null,"incomplete_details": null,"metadata": {},"object": "thread.message","role": "assistant","run_id": "run_EVqVA1PrpvxMHkUz8r6fTIpf","status": null,"thread_id": "thread_OutYgPBocoMQL0U9nbSET469"},{"id": "msg_JvbHlkhDNuScmJRroev14ITO","assistant_id": null,"attachments": [],"completed_at": null,"content": [{"text": {"annotations": [],"value": "你是谁?"},"type": "text"}],"created_at": 1723097223,"incomplete_at": null,"incomplete_details": null,"metadata": {},"object": "thread.message","role": "user","run_id": null,"status": null,"thread_id": "thread_OutYgPBocoMQL0U9nbSET469"},{"id": "msg_6zAx2bWsTHhBFSdfn8vPnTWk","assistant_id": null,"attachments": [],"completed_at": null,"content": [{"text": {"annotations": [],"value": "有什么可以帮您?"},"type": "text"}],"created_at": 1723097223,"incomplete_at": null,"incomplete_details": null,"metadata": {},"object": "thread.message","role": "assistant","run_id": null,"status": null,"thread_id": "thread_OutYgPBocoMQL0U9nbSET469"},{"id": "msg_CLea9Quz8CeLXQBWBlwVvPm0","assistant_id": null,"attachments": [],"completed_at": null,"content": [{"text": {"annotations": [],"value": "你好"},"type": "text"}],"created_at": 1723097223,"incomplete_at": null,"incomplete_details": null,"metadata": {},

相关文章:

Assistants API

一、前言 0.1、从轰动一时的 OpenAI DevDay 说起 2023 年 11 月 6 日,OpenAI DevDay 发表了一系列新能力,其中包括:GPT Store 和 Assistants API 这一波操作一度被认为是创业公司终结者 0.2、GPTs 和 Assistants API 本质是降低开发门槛 可操控性和易用性之间的权衡与折中…...

AcWing 223. 阿九大战朱最学——扩展欧几里得算法

题目来源 223. 阿九大战朱最学 - AcWing题库 题目描述 自从朱最学搞定了 QQ 农场以后,就开始捉摸去 QQ 牧场干些事业,不仅在自己的牧场养牛,还到阿九的牧场放牛! 阿九很生气,有一次朱最学想知道阿九牧场奶牛的数量…...

开发指南116-font-size: 0的使用

平台前台的css样式里有几个地方用到了font-size: 0,这是个使用小技巧。原理说明:font-size 属性用于定义元素中文本的大小。当设置 font-size: 0 时,意味着该元素内的文本将不占据空间。当元素的 font-size 设置为零时,该元素内的…...

算法-数对的使用

1、数对可用于数组排序中&#xff0c;并且可记忆化排序前的元素下标 #include<iostream> #include<string> #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 2e5 10; pair<int, int> a[N]; void solve() {ll n;cin …...

EmoBox:我与 CodeBuddy 共创的 Emoji 表情分类小工具

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 最近我萌生了一个想法&#xff0c;想做一个小而美的工具——一个叫「EmoBox」的 emoji 表情分类应用&#xff0…...

力扣HOT100之二叉树:199. 二叉树的右视图

这道题没啥好说的&#xff0c;首先定义一个向量来保存每一层的最后一个元素&#xff0c;直接用层序遍历&#xff08;广度优先搜索&#xff09;遍历二叉树&#xff0c;然后将每一层的最后一个元素加入到这个向量中即可。属于是二叉树层序遍历的模板题。 /*** Definition for a …...

力扣992做题笔记

左神做法的理论依据 我们可以通过 集合的包含关系 和 具体示例枚举 来直观理解这一推导过程。以下结合题目示例 1 进行详细说明&#xff1a; 示例 1 分析 输入&#xff1a;nums [1,2,1,2,3], k 2 目标&#xff1a;计算恰好包含 2 种不同整数 的子数组个数。 步骤一集合 A…...

特征值与特征向量的计算——PCA的数学基础

特征值与特征向量 定义 令 A {\bm A} A为 n n n \times n nn矩阵&#xff0c;如果存在非零向量 x {\bm x} x使得 A x λ x (1) {\bm A}{\bm x} \lambda {\bm x}\tag{1} Axλx(1) 成立&#xff0c;则称数 λ \lambda λ是矩阵 A {\bm A} A的特征值&#xff0c;称非零向量 x…...

vue2.0 的计算属性

个人简介 &#x1f468;‍&#x1f4bb;‍个人主页&#xff1a; 魔术师 &#x1f4d6;学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全栈发展 &#x1f6b4;个人状态&#xff1a; 研发工程师&#xff0c;现效力于政务服务网事业 &#x1f1e8;&#x1f1f3;人生格言&…...

【数根】2022-1-24

缘由程序设计 -- 数根&#xff08;2&#xff09;-编程语言-CSDN问答 void 数根() {//缘由https://ask.csdn.net/questions/7635593?spm1005.2025.3001.5141std::string n;int m 0, a 0;std::cin >> n;while (n[a] ! \0)m n[a] - 0;a 0;while (m)a m - m / 10 * 10…...

【Android】一键创建Keystore + Keystore 参数说明 + 查询SHA256(JDK Keytool Keystore)

一键创建 Android Keystore 的实用方法与参数详解 在 Android 应用开发与发布中&#xff0c;**Keystore&#xff08;签名文件&#xff09;**扮演着至关重要的角色。本文将介绍如何通过 .bat 脚本一键创建 Keystore 文件&#xff0c;并详细讲解每一个参数的含义&#xff0c;帮助…...

laravel 通过Validator::make验证后,如何拿到验证后的值

在 Laravel 中&#xff0c;通过 Validator::make 创建的验证器实例验证数据后&#xff0c;可以通过以下方式获取验证后的值&#xff1a; 使用 validate() 方法 调用验证器实例的 validate() 方法&#xff0c;会返回经过验证的数据数组。如果验证失败&#xff0c;该方法会抛出 V…...

centos把jar包配置成服务并设置开机自启

1.准备好jar包&#xff0c;启动路径&#xff0c;日志路径 2.编写启动脚步 vim /etc/systemd/system/test.service [Unit] Descriptionlapis Requiresnetwork.target remote-fs.target ##启动优先级&#xff0c;在下面的服务之后启动 Afterkafka.service zookeeper.service n…...

CentOS相关操作hub(更新中)

CentOS介绍&#xff1a; CentOS&#xff08;Community Enterprise Operating System&#xff09;是基于 Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码编译的开源企业级操作系统&#xff0c;提供与 RHEL 二进制兼容的功能 完全兼容 RHEL&#xff0c;可直接使用…...

数据库(一):分布式数据库

定义 分布式数据库&#xff08;Distributed Database&#xff09; 是指&#xff1a; 数据分布在多个物理位置&#xff0c;但对用户透明&#xff0c;表现为一个统一逻辑数据库的系统。 结构模式&#xff08;三层模式扩展&#xff09; 层次作用对应实体用户层提供统一视图&…...

人工智能(AI)与BIM:建筑业创新实践的深度融合

一、BIM在建筑领域的发展现状与挑战 作为建筑数字化的核心技术&#xff0c;BIM通过三维模型集成建筑全生命周期信息&#xff0c;已成为工程设计、施工及运维的标准工作流程。当前&#xff0c;BIM在碰撞检测、施工模拟、成本管控等场景的应用已较为成熟&#xff0c;但行业仍面临…...

FIR数字滤波器设计与实现

低通滤波器的设计与实现 打开Matlab ,运行命令filterDesigner&#xff0c;选择FIR 最小二乘或者其它&#xff0c;设置采样频率&#xff0c;和低通滤波器截止频率。点击设计滤波器&#xff0c;如图1&#xff1a; 点击目标生成.C头文件&#xff0c;滤波器系数如下&#xff1a; …...

软件架构之-论高并发下的可用性技术

论高并发下的可用性技术 摘要正文摘要 ;2023年2月,本人所在集团公司承接了长三角地区某省渔船图纸电子化审查系统项目开发,该项目旨在为长三角地区渔船建造设计院、以及渔船审图机构提供一个便捷化的服务平台。在此项目中,我作为项目组成员参与了项目建设工作,并担任系统架…...

阻塞队列:线程安全与生产者消费者模型解析

一、阻塞队列 阻塞队列就是基于普通队列做出扩展 1.线程安全的 如果针对一个已经满了的队列进行入队列&#xff0c;此时入队列操作就会阻塞&#xff0c;一直阻塞到队列不满&#xff08;其他线程出队列元素&#xff09;之后 如果针对一个已经空了的队列进行出队列&#xff0c…...

【时时三省】(C语言基础)用函数实现模块化程序设计

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 为什么要用函数&#xff1f; 已经能够编写一些简单的C程序&#xff0c;但是如果程序的功能比较多&#xff0c;规模比较大&#xff0c;把所有的程序代码都写在一个主函数(main函数)中&#x…...

基于CATIA参数化圆锥建模的自动化插件开发实践——NX建模之圆锥体命令的参考与移植(一)

引言​​ 在CATIA二次开发领域&#xff0c;Python因其灵活性和丰富的库支持逐渐成为高效工具开发的首选语言。本文将以笔者开发的​​CATIA锥体自动化建模工具​​为例&#xff0c;参考NX软件中高效锥体创建命令&#xff0c;深度解析基于PySide6 GUI框架与pycatia接口库的集成…...

天才简史——Paolo Fiorini与他的速度障碍法

一、背景 第一次“认识”Paolo Fiorini教授是看了DMP的体积避障论文《Dynamic Movement Primitives: Volumetric Obstacle Avoidance》&#xff0c;而且他的学生Michele Ginesi将相关代码开源了&#xff0c;后来查阅了Paolo Fiorini相关资料才发现他竟然是速度障碍法的作者&am…...

第五天的尝试

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 毅力是永久的享受。 没有人是一座孤岛&#xff0c;每个人都是这块大陆的一部分。 二、练习题 import numpy as np import matplotlib.pyplot as plt array np.array([1,2,3,4,5]) plt.plot…...

大小端模式和消息的加密解密

大小端模式 知识点一 什么是大小端模式 // 大端模式 // 是指数据的高字节保存在内存的低地址中 // 而数据的低字节保存在内存的高地址中 // 这样的存储模式有点儿类似于把数据当作字符串顺序处理 // 地址由小向大增加,数据从高位往低位放 …...

(1) 查看端口状态

1. lsof 和 netstat 命令的区别 1.1 lsof 概念&#xff1a;只有在 root 的命令下才能执行&#xff0c;否则无内容显示&#xff1b;root 命令下显示完全 lsof -i: 8080 1.2 netstat 普通用户下显示不完全&#xff0c;root 命令下显示完全 netstat -tunlp | grep 8080 1.3…...

【C++]string模拟实现

#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<assert.h> using namespace std; namespace liu {class string{public:using iterator char*;using const_iterator const char*;//string();//无参构造 string(const string&…...

Linux动静态库制作与原理

什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统…...

ArkUI Tab组件开发深度解析与应用指南

ArkUI Tab组件开发深度解析与应用指南 一、组件架构与核心能力 ArkUI的Tabs组件采用分层设计结构&#xff0c;由TabBar&#xff08;导航栏&#xff09;和TabContent&#xff08;内容区&#xff09;构成&#xff0c;支持底部、顶部、侧边三种导航布局模式。组件具备以下核心特…...

winrar 工具测试 下载 与安装

https://zhuanlan.zhihu.com/p/680852417 https://www.angusj.com/resourcehacker/#download 点击String Table&#xff0c;在展开列表中找到80:2052展开&#xff0c;删除1277行。点击右上方编译按钮&#xff0c;并保存。...

代码随想录算法训练营第四十四天

卡码网题目: 99. 岛屿数量100. 岛屿的最大面积 其他: 今日总结 往期打卡 99. 岛屿数量 跳转: 99. 岛屿数量 学习: 代码随想录公开讲解 问题: 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水…...

每日Prompt:自拍生成摇头娃娃

提示词 将这张照片变成一个摇头娃娃&#xff1a;头部稍微放大&#xff0c;保持面部准确&#xff0c;身体卡通化。[把它放在书架上]。...

制作我的计算器

1. 界面布局 新建项目 MyCalculator&#xff0c;开始布局。 2. 静态布局 代码如下&#xff1a; // etc/pages/Index.ets Entry Component struct Index {build() {Column() {/*** 运算区*/Column() {TextInput({ text: 12x13 }).height(100%).fontSize(32).enabled(false).f…...

如何查看 Ubuntu开机是否需要密码

要查看 Ubuntu 开机是否需要密码&#xff0c;可以通过以下方法进行判断&#xff1a; 1. 检查自动登录设置 图形界面操作&#xff1a; 进入系统设置&#xff08;Settings&#xff09;→ 用户账户&#xff08;User Accounts&#xff09;→ 解锁设置&#xff08;输入当前用户密码…...

今日行情明日机会——20250519

上证指数缩量收十字星&#xff0c;个股涨多跌少&#xff0c;这周反弹的概率比较大。 深证指数缩量调整&#xff0c;临近反弹&#xff0c;个股表现更好。 2025年5月19日涨停股主要行业方向分析 并购重组&#xff08;政策驱动资产整合&#xff09; • 涨停家数&#xff1a;16…...

【CodeBuddy 】从0到1,让网页导航栏变为摸鱼神器

【CodeBuddy 】从0到1&#xff0c;让网页导航栏变为摸鱼神器 我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 &#x1f31f;嗨&#xff0c;我是LucianaiB&#…...

PCL点云库点云数据处理入门系列教材目录(2025年5月更新....)

PCL点云库点云数据处理入门系列教材目录 基础阶段 第 1 讲&#xff1a;PCL库简介和安装&#xff08;Win10/11VS2019PCL 1.12.0&#xff09;第 2 讲&#xff1a;PCL库中点云基本知识和数据类型结构第 3 讲&#xff1a;PCL库中点云数据格式PCD和PLY及其输入输出&#xff08;IO&…...

同一颗太阳:Australia、Austria、Arab、Africa、Augustus、August、Aurora、Athena

我们来看一下下面这一堆单词&#xff1a; Australia n.澳大利亚&#xff1b;澳洲 Australian n.澳大利亚人 a.澳大利亚的 Austria n.奥地利 Austrian n.奥地利人 a.奥地利(人)的 Africa n.非洲 African n.非洲人* Arab a.阿拉伯的&#xff1b;阿拉伯人的 n.阿拉伯人(pl.Arabs)…...

用户账号及权限管理:企业安全的基石与艺术

在当今数字化时代,用户账号及权限管理已成为企业IT安全体系中不可或缺的核心组件。它不仅是保护敏感数据的第一道防线,更是确保业务运营效率和合规性的关键。本文将深入探讨用户账号及权限管理的重要性、最佳实践以及实施策略,助您构建一个安全、高效且灵活的访问控制体系。…...

存储系统03——数据缓冲evBuffer

存储系统03——数据缓冲evBuffer 数据缓冲evBuffer分段存储零拷贝线程安全 evbuffer 实例——存储系统事件触发 数据缓冲evBuffer evbuffer 是 Libevent 提供的一个高效内存缓冲区管理工具&#xff0c;用于存储和操作数据。它类似于一个动态增长的字节缓冲区&#xff0c;支持多…...

留给王小川的时间不多了

王小川&#xff0c;这位头顶“天才少年”光环的清华学霸、搜狗输入法创始人、中国互联网初代技术偶像&#xff0c;正迎来人生中最难啃的硬骨头。 他在2023年创立的百川智能&#xff0c;被称为“大模型六小虎”之一。今年4月&#xff0c;王小川在全员信中罕见地反思过去两年工作…...

Python海龟绘图-斗地主

#导入库 import random as r import turtle as t #数据 pk[红心A,红心2,红心3,红心4,红心5,红心6,红心7,红心8, 红心9,红心10,红心J,红心Q,红心K,黑桃A,黑桃2,黑桃3,黑桃4,黑桃5,黑桃6,黑桃7,黑桃8, 黑桃9,黑桃10,黑桃J, 黑桃Q,黑桃K,方块A,方块2,方块3,方块4,方块5,方块6,方块…...

一、内存调优

一、内存调优 什么是内存泄漏 监控Java内存的常用工具 内存泄露的常见场景 内存泄露的解决方案 内存泄露与内存溢出的区别 内存泄露&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&…...

机器学习--特征工程具体案例

一、数据集介绍 sklearn库中的玩具数据集&#xff0c;葡萄酒数据集。在前两次发布的内容《机器学习基础中》有介绍。 1.1葡萄酒列标签名&#xff1a; wine.feature_names 结果&#xff1a; [alcohol, malic_acid, ash, alcalinity_of_ash, magnesium, total_phenols, flavanoi…...

Java-List集合类全面解析

Java-List集合类全面解析 前言一、List接口概述与核心特性1.1 List在集合框架中的位置1.2 List的核心特性1.3 常见实现类对比 二、ArrayList源码剖析与应用场景2.1 内部结构与初始化2.2 动态扩容机制2.3 性能特点与最佳实践 三、LinkedList 源码剖析与应用场景3.1 内部结构与节…...

在Cursor中启用WebStorm/IntelliJ风格快捷键

在Cursor中启用WebStorm/IntelliJ风格快捷键 方法一&#xff1a;使用预置快捷键方案 打开快捷键设置 Windows/Linux: Ctrl K → Ctrl SmacOS: ⌘ K → ⌘ S 搜索预设方案 在搜索框中输入keyboard shortcuts&#xff0c;选择Preferences: Open Keyboard Shortcuts (JSON) …...

32、跨平台咒语—— React Native初探

一、时空晶体架构&#xff08;核心原理&#xff09; 1. 量子组件桥接协议 // 原生组件映射 <View> → iOS UIView / Android ViewGroup <Text> → UILabel / TextView 魔法特性&#xff1a; • JavaScriptCore引擎&#xff1a;通过V8/Hermes引擎执行JS逻辑…...

无源探头衰减比与带宽特性的关联性研究

引言 在电子测量领域&#xff0c;无源探头作为示波器的重要附件&#xff0c;其性能参数直接影响测量结果的准确性。本文将从电路设计原理出发&#xff0c;深入分析衰减比与带宽这两个关键参数的相互关系&#xff0c;帮助工程师正确理解并选择适合的测量探头。 技术原理分析 …...

虚拟机的三个核心类加载器

虚拟机的三个核心类加载器 在Java虚拟机(JVM)中,类加载器(ClassLoader)负责将类的字节码加载到内存中,并生成对应的Class对象。以下是三个核心类加载器的详细说明: 1. 启动类加载器(Bootstrap ClassLoader) 职责: 加载Java核心类库(如java.lang、java.util等),位…...

国家互联网信息办公室关于发布第十一批深度合成服务算法备案信息的公告

wenz 根据《互联网信息服务深度合成管理规定》&#xff0c;现公开发布第十一批境内深度合成服务算法备案信息&#xff0c;具体信息可通过互联网信息服务算法备案系统&#xff08;https://beian.cac.gov.cn&#xff09;进行查询。任何单位或个人如有疑议&#xff0c;请发送邮件…...

深入理解动态规划:从斐波那契数列到最优子结构

引言 动态规划(Dynamic Programming, DP)是算法设计中一种非常重要的思想&#xff0c;广泛应用于解决各类优化问题。许多看似复杂的问题&#xff0c;通过动态规划的视角分析&#xff0c;往往能找到高效的解决方案。本文将系统介绍动态规划的核心概念&#xff0c;通过经典案例展…...