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

Amazing OpenAI API:把非 OpenAI 模型都按 OpenAI API 调用

分享一个有趣的小工具,10MB 身材的小工具,能够将各种不同的模型 API 转换为开箱即用的 OpenAI API 格式。

让许多依赖 OpenAI API 的软件能够借助开发者能够接触到的,非 OpenAI 的 API 私有部署和使用起来。

写在前面

这个小工具软件写于两周之前的 2023 年年底,开源在了 GitHub:soulteary/amazing-openai-api,有需要可以自取,欢迎一键三连。

开源小项目:AOA

目前项目只适配了三种我在使用的模型的 API,如果你觉得有其他的合适的 API 或者你认为很靠谱的模型,欢迎提交 PR。

这个小工具的思路借鉴于 stulzq/azure-openai-proxy,一个将 Azure OpenAI API 转换为 OpenAI API 格式的项目。在本地使用这个项目一段时间之后,我 fork 出了一个新的版本 soulteary/azure-openai-proxy,并将修改以 PR 形式反馈给了原始项目。随后,因为想在本地应用中测试 Yi-34B API,我制作了一个新的工具:soulteary/yi-openai-proxy,在随后 Gemini Pro API 出现了,想着不能每处一个模型就折腾一个这样的项目,后面太难维护了。

于是,我彻底重构了项目,并起一个略搞怪的名字:Amazing OpenAI API,和一个有意思的像是表情包的别名:AOA

下载工具

这个工具有两种使用方法,一种是从 GitHub Release 发布页面 下载二进制文件。

发布页面的二进制文件

另外一种方法,则是使用 Docker ,从社区下载 GitHub 自动构建好的指定版本的容器镜像:

docker pull soulteary/amazing-openai-api:v0.6.1

快速上手

AOA 的使用是不需要编写任何程序配置文件,我们通过指定环境变量就能够完成应用行为的调整。

我们可以通过这个方式调整的程序行为包括:“选择工作模型”、“设置模型运行需要的参数”、“设置模型兼容别名”。

直接运行可执行文件

程序默认支持三种模型的 API 转换,如果我们不进行任何参数指定,那么程序将默认将工作模型设置为 azure 模型。如果你希望使用 yi-34b-chatgemini-pro,需要设置环境变量 AOA_TYPE=yi 或者 AOA_TYPE=gemini,来让程序切换工作模式。

当我们不使用任何参数,直接执行程序(azure 模式)。这个时候,我们只需要额外设置环境变量 AZURE_ENDPOINT,就可以正常使用服务啦:

AZURE_ENDPOINT=https://你的部署名称.openai.azure.com/

完整的执行命令如下:

AZURE_ENDPOINT=https://你的部署名称.openai.azure.com/ ./aoa

当服务启动之后,我们的程序就可以通过访问 http://localhost:8080/v1/* 的地址,实现和访问 OpenAI 一样的 API 的效果啦。

使用 Docker 运行 AOA

如果你更喜欢使用 Docker,可以用下面的命令来实现和上面一样的效果:

docker run --rm -it -e AZURE_ENDPOINT=https://suyang231210.openai.azure.com/ -p 8080:8080 soulteary/amazing-openai-api:v0.6.1

同样的,我们就可以访问 http://localhost:8080/v1/* 的地址,使用 OpenAI 格式的请求来访问 Azure OpenAI、Yi 34B-Chat、Gemini Pro 啦。

每个模型的详细使用示例,可以参考下文中的 Docker Compose 使用示例。

工具特色

这个小工具有两个有趣的特色功能。

保护我们的 API Key

在日常测试各种 AI 应用的时候,许多应用都需要我们设置 API Key 给它。

你如果你希望不要将 API Key 暴露给应用,或者不放心各种复杂的开源软件是否有 API Key 泄漏风险。

我们可以将 API Key 配置在工具中,比如在 Azure 模式的时候,可以添加 AZURE_API_KEY=你的 API Key 这个环境变量。以上文中 Azure 的命令为例,我们可以将命令改写为:

AZURE_ENDPOINT=https://<你的 Endpoint 地址>.openai.azure.com/ AZURE_API_KEY=<你的 API KEY> AZURE_MODEL_ALIAS=gpt-3.5-turbo:gpt-35 ./aoa

然后,各种软件在请求的模型 API 的时候,就不需要再填写 API Key 啦,或者你随便填一个也行。

这样就起到了严格的 API Key 隔离,提升了 API Key 的安全性。

方便的模型映射功能

如果你使用 Azure,你一定知道 Azure 中的 Deployment Name 需要在请求参数中体现。同样的,Yi 模型、Gemini Pro 也需要在请求的时候,设置这些模型的名称在请求参数中。

但是,我们的使用的软件,通常只支持调用:GPT 3.5、GPT 3.5 Turbo、GPT-4 等等“事实标准”。 总不能每用一个软件就要改下人家代码,来适配这个模型名称吧,并且很多软件也不一定是开源的,折腾起来未免太麻烦了。

好在我们可以通过下面的方式,来将软件调用模型的名称进行一键“替换”,替换为我们实际在使用的模型。

比如,我们可以通过下面的方式,来将原始请求中的模型,映射为我们真实的模型名称。比如,想要将 GPT 3.5/4 都替换为 yi-34b-chat,我们可以这样写一条映射规则:

gpt-3.5-turbo:yi-34b-chat,gpt-4:yi-34b-chat

我们还是先拿上文中的 Azure 来举例,如果我们的 Azure 部署名称是 gpt-35,我们希望将软件请求中的 gpt-3.5gpt-4 都替换为这个部署名称:

AZURE_ENDPOINT=https://<你的 Endpoint 地址>.openai.azure.com/ AZURE_API_KEY=<你的 API KEY> AZURE_MODEL_ALIAS=gpt-3.5-turbo:gpt-35,gpt-4:gpt-35./aoa

是不是很简单。

使用 Yi 34B Chat 模型

如果我们想将 Yi 官方的 API 转换为标准的 OpenAI API 调用,可以使用下面的命令:

AOA_TYPE=yi YI_ENDPOINT=<你的 API 地址> YI_API_KEY=<你的 API KEY> ./aoa

和使用 Azure 服务类似,我们可以使用一个技巧将各种开源、闭源软件使用的模型自动映射为我们希望的模型:

# 比如不论是 3.5 还是 4 都映射为 `gpt-35`
YI_MODEL_ALIAS=gpt-3.5-turbo:yi-34b-chat,gpt-4:yi-34b-chat

完整命令如下:

AOA_TYPE=yi YI_ENDPOINT=<你的 API 地址> YI_API_KEY=<你的 API KEY> YI_MODEL_ALIAS=gpt-3.5-turbo:yi-34b-chat,gpt-4:yi-34b-chat ./aoa

如果我们在启动服务的时候配置了 YI_API_KEY 的话,不论是开源软件也好,使用 curl 调用也罢,我们都不需要添加 Authorization: Bearer <你的 API Key>(也可以随便写),这样就起到了严格的 API Key 隔离,提升了 API Key 的安全性。

如果你还是习惯在请求头参数中添加认证内容,可以使用下面的不包含 YI_API_KEY 的命令,程序将透传验证到 Yi API 服务:

AOA_TYPE=yi YI_ENDPOINT=<你的 API 地址> YI_MODEL_ALIAS=gpt-3.5-turbo:yi-34b-chat,gpt-4:yi-34b-chat ./aoa

使用 Gemini Pro 模型

如果我们想将 Google 官方的 Gemini API 转换为标准的 OpenAI 调用,可以用下面的命令:

AOA_TYPE=gemini GEMINI_API_KEY=<你的 API KEY> ./aoa

和使用 Azure 服务类似,我们可以使用一个技巧将各种开源、闭源软件使用的模型自动映射为我们希望的模型:

# 比如不论是 3.5 还是 4 都映射为 `gpt-35`
GEMINI_MODEL_ALIAS=gpt-3.5-turbo:gemini-pro,gpt-4:gemini-pro

完整命令如下:

AOA_TYPE=gemini GEMINI_API_KEY=<你的 API KEY> GEMINI_MODEL_ALIAS=gpt-3.5-turbo:gemini-pro,gpt-4:gemini-pro ./aoa

和上面类似,如果你还是希望每次请求的时候,都携带 API Key,可以不传递 GEMINI_API_KEY 参数:

AOA_TYPE=gemini GEMINI_MODEL_ALIAS=gpt-3.5-turbo:gemini-pro,gpt-4:gemini-pro ./aoa

Docker Compose 使用示例

下面,我们分别以 Azure、Yi、Gemini 为例,演示下如何编写 docker-compose.yml 配置,先来看看 Azure:

version: "3"services:amazing-openai-api:image: soulteary/amazing-openai-api:v0.6.1restart: alwaysports:- 8080:8080environment:- AZURE_ENDPOINT=https://<修改为你的部署名称>.openai.azure.com/- AZURE_API_KEY=<修改为你的API KEY>- AZURE_MODEL=gpt-4# 模型名称映射,比如将请求中的 GPT 3.5 Turbo 映射为 GPT 4- AZURE_MODEL_ALIAS=gpt-3.5-turbo:gpt-4logging:options:max-size: 1m

然后是 Yi:

version: "3"services:amazing-openai-api:image: soulteary/amazing-openai-api:v0.6.1restart: alwaysports:- 8080:8080environment:# 设置工作模型为 YI- AOA_TYPE=yi# 设置 YI API 服务器地址- YI_ENDPOINT=<修改为你申请或搭建的服务地址># 设置 YI API Key- YI_API_KEY=<修改为你的API KEY># 模型名称映射,比如将请求中的 GPT 3.5 Turbo,GPT-4 都映射为 yi-34b-chat- YI_MODEL_ALIAS=gpt-3.5-turbo:yi-34b-chat,gpt-4:yi-34b-chatlogging:options:max-size: 1m

最后是 Gemini:

version: "3"services:amazing-openai-api:image: soulteary/amazing-openai-api:v0.6.1restart: alwaysports:- 8080:8080environment:# 设置工作模型为 Gemini- AOA_TYPE=gemini# 设置 Gemini API Key- GEMINI_API_KEY=<修改为你的API KEY># 模型名称映射,比如将请求中的 GPT 3.5 Turbo,GPT-4 都映射为 gemini-pro- GEMINI_MODEL_ALIAS=gpt-3.5-turbo:gemini-pro,gpt-4:gemini-pro# 限制国内请求,需要使用服务器进行代理中转,或者跑在国外服务器上- https_proxy=http://10.11.12.90:7890logging:options:max-size: 1m

根据你的实际需求和想使用的模型情况,将上面的内容进行完善,并保存为 docker-compose.yml,然后执行 docker compose up -d,稍等片刻,服务就运行起来啦。

接着,我们可以使用自己顺手的软件来进行接口测试,比如用 curl 测试一把模型的流式输出:

curl http://0.0.0.0:8080/v1/chat/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer soulteary" \-d '{"model": "gpt-4","messages": [{"role": "user", "content": "Hello."}],"temperature": 0.2,"stream": true}'

命令执行完毕,我们将得到类似下面的输出:

data: {"id":"79fb180d21694513","created":0,"model":"yi-34b-chat","choices":[{"delta":{"role":"assistant"},"index":0}],"content":"","lastOne":false}data: {"id":"79fb180d21694513","object":"chat.completion.chunk","created":3705525,"model":"yi-34b-chat","choices":[{"delta":{"role":"assistant","content":"Hello"},"index":0}],"content":"Hello","lastOne":false}...data: {"id":"79fb180d21694513","object":"chat.completion.chunk","created":3705525,"model":"yi-34b-chat","choices":[{"delta":{"role":"assistant","content":""},"index":0,"finish_reason":"stop"}],"content":"Hello! How can I assist you today? If you have any questions or need information on a specific topic, feel free to ask.","usage":{"completion_tokens":27,"prompt_tokens":14,"total_tokens":41},"lastOne":true}data: [DONE]

或者用客户端软件,来一个最普通的模型 API 调用:

一个最简单的模型 AI 调用 GPT-4 (实际请求的是 Yi)

最后

这篇文章就先写到这里吧。

接下来,我们来聊聊用这个方式来折腾一些有趣的东西。

—EOF


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2024年01月09日
统计字数: 6809字
阅读时间: 14分钟阅读
本文链接: https://soulteary.com/2024/01/09/amazing-openai-api-call-all-non-openai-models-according-to-the-openai-api.html

相关文章:

Amazing OpenAI API:把非 OpenAI 模型都按 OpenAI API 调用

分享一个有趣的小工具&#xff0c;10MB 身材的小工具&#xff0c;能够将各种不同的模型 API 转换为开箱即用的 OpenAI API 格式。 让许多依赖 OpenAI API 的软件能够借助开发者能够接触到的&#xff0c;非 OpenAI 的 API 私有部署和使用起来。 写在前面 这个小工具软件写于两…...

RK3568平台开发系列讲解(驱动篇)pinctrl 函数操作集结构体讲解

🚀返回专栏总目录 文章目录 一、pinctrl_ops二、pinmux_ops三、pinconf_ops沉淀、分享、成长,让自己和他人都能有所收获!😄 pinctrl_ops:提供有关属于引脚组的引脚的信息。pinmux_ops:选择连接到该引脚的功能。pinconf_ops:设置引脚属性(上拉,下拉,开漏,强度等)。…...

vue购物车案例,v-model 之 lazy、number、trim,与后端交互

购物车案例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"./js/vue.js"></script> </head> <body> <div id"d1"&…...

云原生Kubernetes: Kubeadm部署K8S 1.29版本 单Master架构

目录 一、实验 1.环境 2.K8S master节点环境准备 3.K8S master节点安装kubelet、kubeadm、kubectl 3.K8S node节点环境准备与软件安装 4.K8S master节点部署服务 5.K8S node节点部署 6.K8S master节点查看集群 7.容器网络&#xff08;CNI&#xff09;部署 8.K8S 集群…...

C++协程操作

什么是C++协程 C++中的协程是一种用户态轻量级线程,它拥有自己的上下文和栈,并且协程的切换和调度由用户定义,不需要陷入内核。如同一个进程可以拥有多个线程,一个线程也可以拥有多个协程。协程的优点在于极高的执行效率,因为协程切换不需要陷入内核,而是由用户程序定义切…...

计算机配件杂谈-鼠标

目录 基础知识鼠标的发展鼠标的左右手鼠标的显示样式鼠标的移动和可见性移动可见性 现在的我们的生活工作都基本上离不开电脑了&#xff0c;不管是你平时玩玩游戏&#xff0c;上班工作等等&#xff1b; 今天将关于鼠标的一些小的技巧分享出来&#xff0c;共勉&#xff01; 基础…...

用Python来制作一个微信聊天机器人

1. 效果展示 通过本地搭建一个flask服务器来接收信息&#xff0c;这里我简单使用展示&#xff0c;就没有对接收的信息进行处理了。 信息接收展示 发送信息展示 这里就直接使用python发送一个post请求即可&#xff0c;可以发送文字或者图片 代码展示 接收信息 #!/usr/bin/e…...

2024年第九届机器学习技术国际会议(ICMLT 2024) 即将召开

2024年第九届机器学习技术国际会议&#xff08;ICMLT 2024&#xff09;将于2024年5月24-26日在挪威奥斯陆举行。ICMLT 2024旨在讨论机器学习技术领域的最新研究技术现状和前沿趋势&#xff0c;为来自世界各地的科学家、工程师、实业家、学者和其他专业人士提供一个互动和交流的…...

算法训练day9Leetcode232用栈实现队列225用队列实现栈

今天学习的文章和视频链接 https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 栈与队列理论基础 见我的博客 https://blog.csdn.net/qq_36372352/article/details/135470438?spm1001.2014.3001.5501 232用栈实现…...

linux驱动(四):platform

本文主要探讨x210驱动的平台设备类型(platform)以及misc设备。 驱动模型 设备驱动模型&#xff1a;总线(bus type)、设备(device)和驱动(driver) 总线&#xff1a;虚拟总线用于挂接驱动驱动和设备 总线、设备、驱动关系&#xff1a;/sys/bus下的子目录…...

Guava:Cache强大的本地缓存框架

Guava Cache是一款非常优秀的本地缓存框架。 一、 经典配置 Guava Cache 的数据结构跟 JDK1.7 的 ConcurrentHashMap 类似&#xff0c;提供了基于时间、容量、引用三种回收策略&#xff0c;以及自动加载、访问统计等功能。 基本的配置 Testpublic void testLoadingCache() th…...

#{}和${}的区别?

#{}是占位符&#xff0c;预编译处理&#xff1b;${}是拼接符&#xff0c;字符串替换&#xff0c;没有预编译处理。Mybatis在处理#{}时&#xff0c;#{}传入参数是以字符串传入&#xff0c;会将SQL中的#{}替换为?号&#xff0c;调用PreparedStatement的set方法来赋值。Mybatis在…...

string的模拟实现

string的模拟实现 msvc和g下的string内存比较成员变量构造函数与析构函数拷贝构造函数赋值拷贝c_str、size和capacity函数以及重载[]、clear、expand_capacity迭代器与遍历reservepush_back、append、insert字符串比较运算符erase<<流提取 >>流插入resizefindsubst…...

算法练习:查找二维数组中的目标值

题目&#xff1a; 编写一个高效的算法来搜索矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a;每行的元素从左到右升序排列。每列的元素从上到下升序排列。 实现&#xff1a; 1. main方法 public static void main(String[] args) {int[][] matrix {{1…...

考研自命题资料、考题如何找

这篇文章是抖音和b站上上传的同名视频的原文稿件&#xff0c;感兴趣的csdn用户可以关注我的抖音和b站账号&#xff08;GeekPower极客力量&#xff09;。同时这篇文章也为视频观众提供方便&#xff0c;可以更加冷静地分析和思考。文章同时在知乎发表。 去年我发布了一个视频&am…...

MySQL 存储引擎和索引类型介绍

1. 引言 MySQL 是一个流行的关系型数据库管理系统&#xff0c;提供多种存储引擎以满足不同的业务需求。本文将介绍几种常见的 MySQL 存储引擎和索引类型比较&#xff0c;并给出相应的示例。 2. 存储引擎概述 2.1 InnoDB 存储引擎 InnoDB 是 MySQL 的默认存储引擎&#xff0…...

element-ui table height 属性导致界面卡死

问题: 项目上&#xff0c;有个点击按钮弹出抽屉的交互, 此时界面卡死 原因分析: 一些场景下(父组件使用动态单位/弹窗、抽屉中使用), element-ui 的 table 会循环计算高度值, 导致界面卡死 github 上的一些 issues 和解决方案: Issues ElemeFE/element GitHub 官方讲是升…...

Vue2.v-指令

v-if 在双引号中写判断条件。 <div v-if"score>90">A</div> <div v-else-if"score>80">B</div> <div v-else>C</div>v-on: :冒号后面跟着事件。 为了简化&#xff0c;可以直接用代替v-on:。 事件名“内联语…...

Java中SpringBoot组件集成接入【Knife4j接口文档(swagger增强)】

Java中SpringBoot组件集成接入【Knife4j接口文档】 1.Knife4j介绍2.maven依赖3.配置类4.常用注解使用1.实体类及属性(@ApiModel和@ApiModelProperty)2.控制类及方法(@Api、@ApiOperation、@ApiImplicitParam、 @ApiResponses)3.@ApiOperationSupport注解未生效的解决方法5.…...

继承和多态的详解

文章目录 1. 继承1.1 继承的概念1.3 继承的语法1.3 父类成员访问1.3.1 子类中访问父类的成员变量1.3.2 子类中访问父类的成员方法 1.4 子类构造方法 2.super关键字2.1 super关键字的概念2.2 super和this的区别 3. 在继承中访问限定符的可见性4. 继承方式的分类5. 多态5.1 多态的…...

【Unity】UniTask(异步工具)快速上手

UniTask(异步工具) 官方文档&#xff1a;https://github.com/Cysharp/UniTask/blob/master/README_CN.md URL:https://github.com/Cysharp/UniTask.git?pathsrc/UniTask/Assets/Plugins/UniTask 优点&#xff1a;0GC&#xff0c;可以在任何地方使用 为Unity提供一个高性能&…...

k8s三种常用的项目发布方式

k8s三种常用的项目发布方式 1、 蓝绿发布 2、 金丝雀发布(灰度发布)&#xff1a;使用最多 3 、滚动发布 应用程序升级&#xff0c;面临的最大问题是新旧业务之间的切换。 项目的生命周期&#xff1a;立项----定稿----需求发布----开发----测试-----发布 最后测试之后上线。再…...

Nodejs搭配axios下载图片

新建一个文件夹&#xff0c;npm i axios 实测发现只需保留node_modules文件夹&#xff0c;删除package.json不影响使用 1.纯下载图片 其实该方法不仅可以下载图片&#xff0c;其他的文件都可以下载 const axios require(axios) const fs require(fs) var arrPic [https:…...

强化学习在生成式预训练语言模型中的研究现状简单调研

1. 绪论 本文旨在深入探讨强化学习在生成式预训练语言模型中的应用&#xff0c;特别是在对齐优化、提示词优化和经验记忆增强提示词等方面的具体实践。通过对现有研究的综述&#xff0c;我们将揭示强化学习在提高生成式语言模型性能和人类对话交互的关键作用。虽然这些应用展示…...

python_selenium_安装基础学习

目录 1.为什么使用selenium 2.安装selenium 2.1Chrome浏览器 2.2驱动 2.3下载selenium 2.4测试连接 3.selenium元素定位 3.1根据id来找到对象 3.2根据标签属性的属性值来获取对象 3.3根据xpath语句来获取对象 3.4根据标签的名字获取对象 3.5使用bs4的语法来获取对象…...

面试宝典进阶之关系型数据库面试题

D1、【初级】你都使用过哪些数据库&#xff1f; &#xff08;1&#xff09;MySQL&#xff1a;开源数据库&#xff0c;被Oracle公司收购 &#xff08;2&#xff09;Oracle&#xff1a;Oracle公司 &#xff08;3&#xff09;SQL Server&#xff1a;微软公司 &#xff08;4&#…...

Agisoft Metashape 地面点分类参数设置

Agisoft Metashape 点云分类之地面点分类参数设置 文章目录 Agisoft Metashape 点云分类之地面点分类参数设置前言一、分类地面点参数二、农村及城区有房屋地区二、植被区域分类三、侵蚀半径(Erosion radius)参数设置前言 Agisoft Metashape提供了自动检测地面点的功能,减少…...

计算机科学速成课【学习笔记】(4)——二进制

本集课程B站链接&#xff1a; 4. 二进制-Representing Numbers and Letters with Binary_BiliBili_哔哩哔哩_bilibili4. 二进制-Representing Numbers and Letters with Binary_BiliBili是【计算机科学速成课】[40集全/精校] - Crash Course Computer Science的第4集视频&…...

数据库开发工具Navicat Premium 15 mac软件特色

Navicat Premium 15 mac版是一款数据库开发工具&#xff0c;Navicat Premium 15 Mac版可以让你以单一程序同時连接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 数据库。 Navicat Premium mac软件特色 无缝数据迁移 数据传输&#xff0c;数据同步和结构同步…...

从零开始构建区块链:我的区块链开发之旅

1.引言 1.区块链技术的兴起和重要性 区块链技术&#xff0c;作为数字化时代的一项颠覆性创新&#xff0c;已经成为当今世界最令人瞩目的技术之一。自比特币的问世以来&#xff0c;区块链技术已经从仅仅支持加密货币发展成为一种具有广泛应用前景的分布式账本技术。其核心优势…...

c JPEG编码,但有错误

#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/videodev2.h> //v4l2 头文件 #include <strin…...

二级C语言备考1

一、单选 共40题 &#xff08;共计40分&#xff09; 第1题 &#xff08;1.0分&#xff09; 题号:6923 难度:较易 第1章 以下叙述中正确的是 A:C语言规定必须用main作为主函数名,程序将从此开始执行 B:可以在程序中由用户指定任意一个函数作为主函数…...

【2024系统架构设计】 系统架构设计师第二版-嵌入式系统架构设计理论与实践

目录 一 嵌入式系统软件架构的原理 二 嵌入式系统软件架构的设计方法 三 案例分析 一 嵌入式系统软件架构的原理 🚀嵌入式系统的典型架构可以分为...

用python提取word中的所有图片

使用word中提取的方式图片会丢失清晰度&#xff0c;使用python写一个脚本&#xff0c;程序运行将弹出对话框选择一个word文件&#xff0c;然后在弹出一个对话框选择一个文件夹保存word中的文件。将该word中的所有图片都保存成png格式&#xff0c;并命名成image_i的样式。 程序…...

医疗器械分类及是否需要临床

1、医疗器械的分类&#xff1a; 在中国&#xff0c;医疗器械的管理分为一类、二类和三类&#xff0c;这是根据《医疗器械监督管理条例》的规定划分的。不同类别的医疗器械受到不同的监督和管理&#xff0c;包括注册审批、生产质量监督、市场监管等方面。 一类医疗器械&#x…...

AI人工智能虚拟现实行业发展分析

AI人工智能和虚拟现实是当今科技领域最受关注和研究的两个领域。这两项技术的迅速发展给各行各业带来了巨大的变革和机遇。在过去的几年里&#xff0c;AI和虚拟现实已经取得了显著的进展&#xff0c;并且有着广阔的发展前景。 AI人工智能作为一种模拟人类智能的技术&#xff0…...

3. SPSS数据文件的基本加工和处理

如何获取SPSS自带的案例数据文件&#xff1f; 首先找到SPSS的安装目录&#xff0c;然后找到Samples文件夹 可以看到有不同语言版本&#xff0c;选择简体中文 就能看到很多.sav文件 数据文件的整理 个案排序 单值排序 例&#xff1a;对于下面的数据集&#xff0c;将工资按…...

Ubuntu20二进制方式安装nginx

文章目录 1.下载nginx安装包2.安装nginx3.安装出现的问题及解决方案错误1&#xff1a;错误2&#xff1a;错误3&#xff1a; 4.常用命令5.知识扩展&#xff1a; 1.下载nginx安装包 nginx官网&#xff1a;http://nginx.org/en/download.html 选择稳定的nginx版本下载。 2.安装ngi…...

window mysql5.7 搭建主从同步环境

window 搭建mysql5.7数据库 主从同步 主节点 配置文件my3308.cnf [mysql] # 设置mysql客户端默认字符集 default-character-setutf8mb4[mysqld] server-id8 #server-uuidbc701be9-ac71-11ee-9e35-b06ebf511956 log-binD:\mysql_5.7.19\mysql-5.7.19-winx64\mysql-bin binlog-…...

MCU、MPU、SOC简介

文章目录 前言一、MCU二、MPU三、SOC总结 前言 随着处理器技术的不断发展&#xff0c;CPU(Central Processing Unit)的发展逐渐出现三种分支&#xff0c;分别是MCU(Micro Controller Unit&#xff0c;微控制器单元) 和MPU&#xff08;Micro Processor Unit&#xff0c;微处理器…...

Kubernetes那点事儿——配置存储:ConfigMap、Secret

配置存储&#xff1a;ConfigMap、Secret 前言ConfigMapSecret 前言 前面介绍过的各种存储主要都是做数据的持久化&#xff0c;本节介绍的ConfigMap和Secret主要用于配置文件存储&#xff0c;或者环境变量的配置。 ConfigMap 创建ConfigMap后&#xff0c;数据实际会存储在K8s中…...

小白向:搭建企业培训APP的完整技术指南

当下&#xff0c;许多企业转向了现代化的培训方法&#xff0c;其中一个关键的工具就是企业培训APP。本文将为你提供搭建企业培训APP的完整技术指南&#xff0c;助你在数字化时代更好地满足企业培训的需求。 一、需求分析与功能规划 在开始开发之前&#xff0c;首先需要明确企…...

CVE-2023-36025 Windows SmartScreen 安全功能绕过漏洞

CVE-2023-36025是微软于11月补丁日发布的安全更新中修复Windows SmartScreen安全功能绕过漏洞。攻击者可以通过诱导用户单击特制的URL来利用该漏洞&#xff0c;对目标系统进行攻击。成功利用该漏洞的攻击者能够绕过Windows Defender SmartScreen检查及其相关提示。该漏洞的攻击…...

分析一个项目(微信小程序篇)二

目录 首页&#xff1a; 发现&#xff1a; 购物车&#xff1a; 我的&#xff1a; 分析一个项目讲究的是如何进行对项目的解析分解&#xff0c;进一步了解项目的整体结构&#xff0c;熟悉项目的结构&#xff0c;能够知道每个组件所处在哪个位置&#xff0c;发挥什么作用。 接…...

每日论文推送(有中文摘或源码地址或项目地址)

***VX搜索“晓理紫”并关注就可以每日获取最新论文***标题: “It’s not like Jarvis, but it’s pretty close!” – Examining ChatGPT’s Usage among Undergraduate Students in Computer Science作者: Ishika Joshi, Ritvik Budhiraja, Harshal D Akolekar摘要: Large lan…...

【漏洞复现】锐捷EG易网关login.php命令注入漏洞

Nx01 产品简介 锐捷EG易网关是一款综合网关&#xff0c;由锐捷网络完全自主研发。它集成了先进的软硬件体系架构&#xff0c;配备了DPI深入分析引擎、行为分析/管理引擎&#xff0c;可以在保证网络出口高效转发的条件下&#xff0c;提供专业的流控功能、出色的URL过滤以及本地化…...

Nginx安装http2和ssl模块

Nginx安装http2和ssl模块 Nginx在执行默认安装命令的时候&#xff0c;并不会编译启用ngx_http_v2_module模块。故在修改Nginx配置文件启用http2.0协议的时候会报错。 一.检查Nginx安装了哪些模块 #进入Nginx的安装目录 cd /usr/local/nginx #执行命令查看安装了哪些模块 ./sbi…...

Android 8.1 隐藏设置中定位功能

Android 8.1 隐藏设置中定位功能 最近接到客户反馈&#xff0c;需要隐藏设备设置中的定位功能&#xff0c;具体修改参照如下&#xff1a; /vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/SecuritySettings.java mLocationcontroller.displ…...

无线网卡怎么连接台式电脑?正确操作步骤分享!

“我在使用电脑时经常都需要用到网络&#xff0c;请问大家在使用无线网卡时怎么将它与台式电脑进行连接的呢&#xff1f;” 使用电脑的用户在进行网上冲浪时都需要先连接网络。如果不想使用网线&#xff0c;无线网卡不仅可以为用户提供网络服务&#xff0c;在使用时该更加灵活和…...

聚道云软件连接器助力某贸易公司实现付款流程自动化

客户介绍&#xff1a; 某贸易公司是一家集进出口贸易、国内贸易、电子商务等业务于一体的综合性贸易企业。公司业务遍及全球多个国家和地区&#xff0c;拥有庞大的供应商网络和采购需求。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 客户痛点&#…...