我们平时在刷抖音或者快手的时候,经常会看到有人把小说做成视频,有的甚至视频画面内容与音频毫不相关,但是这种视频的播放量是相当高的。实际上,这是目前比较火的赚钱方式。
AI技术的快速发展为各行各业带来了许多创新应用,其中之一就是AI小说生成视频。这种技术利用人工智能算法和语言模型,将文本转化为视频剧情,加上配图、音效等元素,创造出生动的故事场景。
对于喜爱创作的人们来说,智优影,是一款非常实用的工具。下面将为大家推荐四款功能强大的AI小说生成视频工具。
一、【智优影】-AI小说生成视频
这是一款比较专业的AI视频软件,如小说合成视频,文章合成视频,视频糊变晰、图片变、
人声分离、获取视频等视频处理,同时还可以提取或分离背景音乐,提取或分离人物声音。
二、AI写作助手
这种软件使用自然语言处理技术来生成文本。你可以输入一些关键词或故事大纲,然后软件会根据你的输入生成相应的文本。
三、Narrative Science:这是一个知名的自动写作软件,能够基于你输入的数据生成新闻报道和其他类型的文本。虽然它主要用于新闻报道,但也可以用于生成小说的某些部分。
四、ScrapingBee:这个工具主要是用于从网页上抓取数据,但它也可以用来收集创作小说的灵感和素材。
目录
一、下载资源包
二、创建一个新的项目
三、替换配置文件
四、打开Android Studio
一、下载资源包 将你得到的资源包下载到你能够找到的位置然后解压,方便操作
二、创建一个新的项目 如果已经有新创建的项目就不用新建了,但是需要注意的是,如果你下载的资源包解压后,根目录下包含buil.gradle文件,那么就说明,你新建的项目要与之匹配,也就是说源码coder采用的是Groovy DSL
如果包含的是,build.gradle.kts文件,就说明你在新建项目时候选择其他两个。
三、替换配置文件 将你新创建的项目在资源管理器打开,找到我标记的三个文件,复制
然后打开你下载的android项目资源包,同样在资源管理器打开
将该文件夹下的.gradle .idea gradle 三个文件删除(如果本身就没有就不用管了,如果仅仅有这三个其中的某个,那就有谁删谁)
然后将你复制的三个文件粘贴到这里。
四、打开Android Studio 在AndroidStudio中打开你下载并完成上述操作后的项目文件,
一般情况程序会自动适配调试,等待一会儿,不要着急。
如果你的androidstudio的JDK以及gradle版本与你下载的项目版本匹配的话,基本就可以直接运行了,等待程序自己配置就可以了。
如果版本不匹配(这里不匹配包括上述描述的不匹配情况,还有一种情况就是你的JDK和你自己的gradle版本号不匹配,二者相匹配的版本号在网上都是可以搜索到的)那么会出现如下错误:
重点来了:
点击file-->projectStructure
点击Project,这里将显示你的gradle版本号以及android版本号,点击文本框右侧可以选择进行适配,如果没有的话就需要你去下载了,官网都有。
将二者改为版本号匹配的就可以了,点击ok后,程序会自动配置。等待几分钟甚至十几分钟:
此时你会发现,项目菜单栏app绿色标记消失了,说明配置成功了!
文章目录 一、整数TINYINTSMALLINTMEDIUMINTINTBIGINT 二、字符串CHARVARCHARBINARYVARBINARYTINYTEXTTEXTMEDIUMTEXTLONGTEXTTINYBLOBBLOBMEDIUMBLOBLONGBLOBTEXT和BLOB字段类型之间的主要区别? 三、浮点数NUMERIC(M, D), DECIMAL(M, D)FLOATDOUBLE浮点数的区别? 四、总结选择字段的原则int(1)定义的长度影响写入的长度?varchar(5)与varchar(255)保存同样的内容,有区别? 一、整数 TINYINT 长度:固定为1个字节。
范围:-128 到 127(有符号)或 0 到 255(无符号)。
SMALLINT 长度:固定为2个字节。
范围:-32,768 到 32,767(有符号)或 0 到 65,535(无符号)。
MEDIUMINT 长度:固定为3个字节。
范围:-8,388,608 到 8,388,607(有符号)或 0 到 16,777,215(无符号)。
INT 长度:固定为4个字节。
范围:-2,147,483,648 到 2,147,483,647(有符号)或 0 到 4,294,967,295(无符号)。
BIGINT 长度:固定为8个字节。
范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(有符号)或 0 到 18,446,744,073,709,551,615(无符号)。
二、字符串 CHAR 长度:0到255个字符。
存储:定长,总是使用指定的长度。如果存储的字符串长度小于定义的长度,它将使用空格填充。
VARCHAR 长度:0到65535个字符,但实际最大长度取决于最大行大小(65535字节)和使用的字符集。
存储:变长,只使用必要的空间加上一个或两个额外的字节来记录字符串的长度。
BINARY 长度:0到65535个字节,取决于字符集和校对规则。
存储:定长,总是使用指定的长度。BINARY类型类似于CHAR类型,但存储二进制字节字符串。
VARBINARY 长度:0到65535个字节,取决于字符集和校对规则。
存储:变长,只使用必要的空间加上一个额外的字节来记录字符串的长度。VARBINARY类型类似于VARCHAR类型,但存储二进制字节字符串。
TINYTEXT 长度:最大255个字符。2^8 − 1
存储:存储长度需要1个字节,字符串本身存储在单独的表中。
TEXT 长度:最大65,535个字符。2^16 − 1
有朋友私信我说,帖子(使用原生Java实现RSA加解密-非对称加密-CSDN博客)中生成RSA公钥、私钥是借助Linux命令完成的,那么Java代码能不能生成呢?笔者在这里明确告知答案:可以。
本篇(纯干货,完整代码)笔者将列出几种使用Java生成非对称加密算法RSA的公钥、私钥文件方法供大家参考。本篇介绍将会生成两种格式的公私钥文件,分别是pem格式、der格式。
方法一、使用原生Java API 1、使用原生Java生成pem格式的RSA公私钥文件 package com.frank.project.test.rsa; import java.io.FileWriter; import java.io.IOException; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.util.Base64; /** * 原生Java生成RSA公私钥文件 */ public class PureJavaGenerateRSAKey { public static void main(String[] args) throws Exception { generateRSAPemKeyFiles(); } /** * 生成RSA pem格式的公私钥文件 * * @throws Exception */ private static void generateRSAPemKeyFiles() throws Exception { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(4096); KeyPair keyPair = keyPairGenerator.generateKeyPair(); savePrivatePemFile(keyPair.getPrivate(), "D:/private_key_pure_java.pem"); savePublicPemFile(keyPair.getPublic(), "D:/public_key_pure_java.pem"); } private static void savePrivatePemFile(Key key, String filename) throws IOException { String encoded = Base64.
文章目录 前言一、faster-whisper简单介绍二、pyannote.audio介绍三、faster-whisper + pyannote.audio 实现语者识别四、多说几句 前言 最近在研究ASR相关的业务,也是调研了不少模型,踩了不少坑,ASR这块,目前中文普通话效果最好的应该是阿里的modelscope上的中文模型了,英文的话,还是非whisper莫属了,而且whisper很变态,粤语效果也还不错,因此,如果实际业务中需要涉及到不同的语言,还是更推荐whisper多一点
一、faster-whisper简单介绍 faster-whisper是使用CTranslate2对OpenAI的Whisper模型的重新实现,CTranslate2是一个用于Transformer模型的快速推理引擎。
在使用更少内存的情况下,该实现比openai/whisper在相同精度下快4倍。同时在CPU和GPU上进行8位量化,可以进一步提高算法效率。
官方仓库:https://github.com/SYSTRAN/faster-whisper
二、pyannote.audio介绍 pyannote.audio是一个用Python编写的用于扬声器diarization的开源工具包。基于PyTorch机器学习框架,它具有最先进的预训练模型和管道,可以进一步对自己的数据进行微调,以获得更好的性能。
官方仓库:https://github.com/pyannote/pyannote-audio
三、faster-whisper + pyannote.audio 实现语者识别 实际上只要将二者的识别结果进行结合即可
from pyannote.core import Segment def get_text_with_timestamp(transcribe_res): timestamp_texts = [] for item in transcribe_res: start = item.start end = item.end text = item.text.strip() timestamp_texts.append((Segment(start, end), text)) return timestamp_texts def add_speaker_info_to_text(timestamp_texts, ann): spk_text = [] for seg, text in timestamp_texts: spk = ann.crop(seg).argmax() spk_text.append((seg, spk, text)) return spk_text def merge_cache(text_cache): sentence = ''.
随着AI的应用变广,各类AI程序已逐渐普及,尤其是在一些日常办公、学习等与撰写/翻译文稿密切相关的场景,大家都希望找到一个适合自己的稳定可靠的ChatGPT软件来使用。
ChatGPT-Next-Web就是一个很好的选择。它是一个Github上超人气的免费开源项目,该项目在Github已经斩获55.6kstar,当之无愧的GPT程序NO.1,并且据悉目前该项目已被收购,商业价值潜力巨大。
ChatGPT-Next-Web,简称NextChat,是一个面向用户的GPT类应用程序,用户可以通过这个程序与GPT进行交互。
NextChat官方介绍:
一键免费部署你的跨平台私人 ChatGPT 应用, 支持 GPT3, GPT4 & Gemini Pro 模型。
NextChat主要功能:
在 1 分钟内使用 Vercel 免费一键部署;
精心设计的 UI,响应式设计,支持深色模式,支持 PWA;
极快的首屏加载速度,支持流式响应;
隐私安全,所有数据保存在用户浏览器本地;
预制角色功能(面具),方便地创建、分享和调试你的个性化对话;
海量的内置 prompt 列表,来自中文提示词>>和英文提示词>>;
自动压缩上下文聊天记录,在节省 Token 的同时支持超长对话;
多国语言支持:English, 简体中文, 繁体中文, 日本語, Español, Italiano, Türkçe, Deutsch, Tiếng Việt, Русский, Čeština, 한국어, Indonesia;
可绑定自己域名;
部署NextChat程序的方式 作者在项目ReadMe中列出了许多部署方式,有兴趣的可以选择适合自己的进行尝试,本文重点介绍最实用的一种方式,可视化本地安装(Windows为例)。准备条件和特点如下:
本地安装:一台Windows电脑即可,0成本且无需设置;只能当前设备使用,其他人或其他设备使用需重新安装程序。适用于不愿意折腾,仅简单自用的场景。 方式:本地安装 进入项目程序版本发布界面,下载对应的exe程序并安装。
安装完成后,我们已经具备使用gpt的基础了,但还缺调用gpt的api或者说是key;
当你没有配置API的时候,程序是不可用的,你的使用会收到如下截图内容:
所以这个时候,你可以去openai官方申请key,这个网上有很多方法,就不多言。
官方调用会存在地域限制,而且存在封号风险,另外调用也有速率限制,最关键一点是充值到境外的流程会有点麻烦。
所以这里,建议用另一种办法。
我们打开网站:https://4.0.wokaai.com;按照流程注册充值后直接生成key就可以调用全模型,非常便捷快速。
特点如下:
● 稳定:庞大账号池作为支撑并定期优化扩容;一个key即可稳定快速调用所有模型!
● 方便:所有用到 OpenAI API 的地方都可以无缝替代;
● 快速:持续优化中转服务的线路速度,保证使用体验;不需像调用官方一样特地申请多个账号扩充限制!
● 省心:没有包月,没有会员,没有限时,用多少买多少,永不过期。
手把手教你安装mysql-8.0.36数据库 缘环境下载安装问题集锦 缘 过了个周末,舒舒服服,把家里捣鼓了下,自己编了一个网格照片墙,把来做客的家具都安排好位置,今天,继续上班啦。
环境 开始之前,老生常谈,首先看看我服务器的信息:
[root@VM-16-11-centos ~]# uname -a Linux VM-16-11-centos 3.10.0-1160.99.1.el7.x86_64 #1 SMP Wed Sep 13 14:19:20 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux 下载 虽然每次写MySQL教程都会写下载链接,这次依然附带上。提供两种方式下载,
** 下载地址:**直接下载mysql数据库tar格式,官网下载地址
** 下载页面:**在页面找自己想要的版本进行安装,官网下载页面
安装 离线服务器下载后放到服务器上,联网服务器直接使用命令下载: wget https://dev.mysql.com/get/mysql-8.0.36-1.el7.x86_64.rpm-bundle.tar 对压缩包进行解压 [root@VM-16-11-centos mysqls]# tar -xvf mysql-8.0.36-1.el7.x86_64.rpm-bundle.tar mysql-community-client-8.0.36-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.36-1.el7.x86_64.rpm mysql-community-common-8.0.36-1.el7.x86_64.rpm mysql-community-debuginfo-8.0.36-1.el7.x86_64.rpm mysql-community-devel-8.0.36-1.el7.x86_64.rpm mysql-community-embedded-compat-8.0.36-1.el7.x86_64.rpm mysql-community-icu-data-files-8.0.36-1.el7.x86_64.rpm mysql-community-libs-8.0.36-1.el7.x86_64.rpm mysql-community-libs-compat-8.0.36-1.el7.x86_64.rpm mysql-community-server-8.0.36-1.el7.x86_64.rpm mysql-community-server-debug-8.0.36-1.el7.x86_64.rpm mysql-community-test-8.0.36-1.el7.x86_64.rpm [root@VM-16-11-centos mysqls]# ll total 2012556 -rw-r--r-- 1 root root 1030420480 Dec 14 14:56 mysql-8.0.36-1.el7.x86_64.rpm-bundle.tar -rw-r--r-- 1 7155 31415 16767208 Dec 14 14:42 mysql-community-client-8.
读取txt的数据和把数据保存到txt中是python处理数据常用的。将学习笔记记录,作备份和参考。十分感谢别人的分享,很详细,学习参考链接如下:
pythonPython读写txt文本文件的操作方法全解析教你利用python如何读取txt中的数据 一、 txt文件读取 1 python常用的三种读取文件函数 read() #一次性读完全部内容 readline() #读取第一行内容 readlines()#读取文本所有内容,且以数列的格式返回结果,一般配合for in 使用 示例如下:
print("------read()------") with open("demo.txt", "r") as file: #使用绝对路径 开文件 demo = file.read() #读取文件 print(demo) print("------readline------") with open("demo.txt", "r") as f: #打开文件 demo = f.readline() #读取文件 print(demo) print("------readlins------") with open("demo.txt", "r") as f: #打开文件 demo = f.readlines() #读取文件 print(demo) print("------readlines and for in------") with open("demo.txt", "r") as f: #打开文件 for line in f.readlines(): line =line.strip('\n') #去掉列表中每一个元素的换行符 print(line) 结果如下:
学python编程能挣钱吗?怎么挣钱?
答案是可以的,有两点我都赚到钱的方法,接私活和自媒体。
一、赚钱第一种方式:接私活 刚学会python那会,就有认识的朋友介绍做一个网站的私活,当时接单赚了4K(仅代表本人个人收益),后又自己接过开发网站后台接口、做数据处理等事情,都赚了一些。
接私活指的是利用自己的技术,在业余时间搞定用户整块需求,对方在开始前预付一部分定金,完工后付剩下金额的过程。
Python可以用于接私活的技术,主要集中在这三个,并且按需求量递减:
网络爬虫:爬取网站或者APP的数据,把数据提供给用户,或者有的也要求提供程序;Web后台接口:比如使用Flask提供API接口,这种其实我比较喜欢,但是需求量不多;数据处理与分析:可以用Python直接搞定,或者借助Pandas实现。 如果确实想业余赚点小钱,其实真的可以先学好Python爬虫,然后通过多种渠道接到活,慢慢提升自己名气,自然会接到更多。
接私活是一锤子买卖,这有好处也是坏处,好处很明显能快速拿到钱,坏处其实这种方式是靠劳力赚钱,并不是美美的“睡后收入”。
接私活注意事项:
1.做活前,先搞清楚客户说的报酬,是税前的还是税后的
2.时间不要跟客户定死了,程序这东西,改来改去就会改出问题,需要花时间去修补的
3.做活前,跟客户沟通好,需求弄清楚
4.在闲暇时间去做,不要耽误主业
接单报价方式:
简单公式:项目工时*日薪+紧急程度+报价
小tip:记得留个bug,防止不给尾款
接私活这种方式有很大的问题就是,即使你有技术并且你有接单的意愿,但是找不到需求方,所以我整理一些接私活平台给大家。
如何通过接单平台私活
通过网上一些接单平台,比如码市、一品威客、猿急送等来接单获取报酬,不同的任务需求难度不同;所获得的报酬也是有高有低。
选择适合自己的,能够确保完成。
大家可以收藏以下网站,都是可以用来接单兼职的平台。
大量的编程语言接单平台,来自各行各业,报酬低至100左右,高达上万不等。
推荐平台∶
一品威客(适合新手)网址:https://www.epwk.com/
猿急送(https:/http://lyuanjisong.com)
开源众包(https://http://zb.oschina.net)
另外还有更多网站
1. 程序猿客栈https:l /http://www.proginn.com
2.码市https://codemart.com
3.香城外包https:http://77www.taskcity.com
4.实现网https://shixian.com
5.弃发邦https://www.kaifabang.com
6.电鹅社区https:l/eleduck.com.
7.快码https://www.kuai.ma
8.英选https://www.yingxuan.io
9.外包大师:https://www.waibaodashi.com
10.我爱方案网https://www.52solution.com
11.智筹http://zhichou.com.
12.自由职客http://www.freekeer.com
13.解放号https://www.jfh.com
14. Sxsoft https:l/http://www.sxsoft.com
另外接单还要注意:
没有第三方担保的个人单,风险较大尽量少接无需求文档,讲不清具体需求的不接不计得失,不怕吃亏保证质量,营造口碑没有预付的不做,结款方式按442的方式急单不接没有金刚钻,不揽瓷器活 还有一些接单方法就没举例了,接单的平台是比较多的,不过能否接到单还是要看个人的能力,不是说你能力,不是说你会爬几张图片就能接到多大的单,还是需要技术的积累的,如果你已经比较厉害,那就大胆的去接单,如果你还是小白水平那应该多花点时间去学习,自学我都不推荐了,需要非常强的学习能力和时间规划能力,如果做不到,最后会容易放弃。
这个是一个朋友的一个月接单收入情况,这个可比很多人主业月收入要高的多。
二、赚钱第二种方式:自媒体 现在是全民自媒体时代,人人都可以发布自己的作品挣钱。
程序员尤其有自媒体优势,因为程序员都有自己所擅长的“一技之长”,比如把自己的学习、工作经验总结,通过文章发布到公众号、CSDN,或者通过视频形式发布到哔哩哔哩、头条、抖音快手。
对程序员群体来说,我发现做自媒体尤其有好处:
发布技术视频/文章,对自己技术发展会一直提升,并且也能体现在工作;看到视频的读者,也能从中学到知识提升自己的能力 可以说这是一个多赢的局面,非常值得可持续发展。
而程序员自媒体也是有很多方式赚到钱的:
公众号/哔哩哔哩/抖音:如果粉丝达到一定数量,就会有广告主找你打广告,这个收入是不低的;发布自己的付费视频到爱奇艺知识/CSDN/头条付费专栏:用户买一单你就会有分成收益,一般是5:5分成,这个数字也会很可观; 并且相对于私活,对于发布的技术文章视频内容,可以持续的获得广告、付费分成收入,这是真的“睡后收入”。
以下是2个平台的截图,刚开始做,有这个收益也是比较满意,公众号还可以接推文广告,行业做的比较好的大佬一个月可以收入20W+。
然而问题是,这种方式见效非常慢,需要你长期的坚持输出和长期的积累,短期看不到效果很可能会让你想要放弃,但请相信我,方向是没错的,想挣到钱就要坚持下去,没哪件挣钱的事情是容易的。
有些朋友觉得,自己的技术并没有非常非常厉害的地步,不太合适去教别人技术。
然而在我看来,能分享技术的并不是“达者”, 而是“先者”,只要你学的比别人多比别人新,那就可以分享给别人,让别人受益。
说真的学好python不论是就业还是我上面讲的做副业赚钱都不错,但要学会python还是要有一个学习规划。
作为一个初学者,从无到有的Python语言如何入门,主要包括了:Python的简介,如何下载Python,如何安装Python,如何使用终端、Shell,IDE等各种开发环境进行Python开发,Python中的语法和基本知识、概念和逻辑,以及继续深入学习Python的方法。
下面我将介绍下python学习路线,给那些想学习python的小伙伴们一点帮助!
(一)、清楚学习目标
无论是学习什么知识,都要有一个对学习目标的清楚认识。
2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客文章浏览阅读2.7k次,点赞85次,收藏12次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……_软件测试刷题小程序https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502
一、Selenium Webdriver 常用的API (一)引入依赖 <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.141.59</version> </dependency> 开始:
public static void main(String[] args) throws InterruptedException { ChromeOptions options = new ChromeOptions(); //允许任何来源的远程连接,这样可以避免一些跨域问题。 options.addArguments("--remote-allow-origins=*"); //初始化 chrome 浏览器 driver 对象 WebDriver webDriver = new ChromeDriver(options); // 访问指定网页 webDriver.get("https://juejin.cn"); //开始操作页面 //…… } 其它浏览器:
WebDriver driver = new FirefoxDriver(); // Firefox浏览器 WebDriver driver = new EdgeDriver(); // Edge浏览器 WebDriver driver = new InternetExplorerDriver(); // Internet Explorer浏览器 …… (二)元素的定位 要想操作一个对象,首先应该识别这个对象。通过下面的 API,可以获取页面上的标签对象,从而来操作它们。
目录 1 AMQP协议1.1 AMQP协议介绍1、AMQP是什么2、消息代理中间件的职责 1.2 AMQP 0-9-1模型1、AMQP的工作过程2、交换器和交换器类型3、队列队列属性队列名称队列持久化 1.3 几个概念1、绑定2、消费者3、消息确认4、预取消息5、消息属性和有效载荷(消息主体)6、连接7、通道8、虚拟主机 1 AMQP协议 1.1 AMQP协议介绍 因为RabbitMQ是一种遵循AMQP协议的分布式消息中间件,RabbitMQ实现的AMQP版本是0.9.1,所以在此处简单了解一下AMQP-0-9-1 协议。
1、AMQP是什么 AMQP,全称Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议。它支持符合要求的客户端应用(application)和消息中间件代理(messaging middleware broker)之间进行通信。
2、消息代理中间件的职责 Messaging Broker,这里称为消息中间件代理。它会从发布者(Publisher,或者有些时候称为Producer,生产者)接收消息,并根据既定的路由规则把消息发送给处理消息的消费者(Consumer,或者有些时候称为Listener,监听者)。
因为消息中间件代理、发布者客户端和消费者客户端都是基于AMQP这一网络消息协议,所以消息中间件代理、发布者客户端和消费者客户端可以在不同的机器上,从而实现分布式通讯和服务解耦。
消息中间件代理不仅仅提供了消息接收和消息路由这两个基本功能,还有其他高级的特性如消息持久化功能、监控功能等等。
1.2 AMQP 0-9-1模型 1、AMQP的工作过程 AMQP的工作过程如下:
1.消息(message)被发布者(publisher)发送给交换器(exchange),交换器常常被比喻成邮局或者邮箱。 a.发布者(publisher)发布消息时可以给消息指定各种消息属性(message meta-data)b.有些属性有可能会被消息代理(brokers)使用 c.其他的属性则是完全不透明的,只能被接收消息的应用使用 2.交换器将收到的消息根据路由规则分发给绑定的队列(queue) a.在某些情况下,例如当一个消息无法被成功路由时,消息可能会被返回给发布者,也可能被丢弃b.如果消息代理执行了延期操作,消息则会被放入一个死信队列中 c.针对以上两种情况,消息发布者可以选择某些参数来处理 3.AMQP代理会将消息投递给订阅了此队列的消费者,或者消费者按照需求自行获取 a.由于网络的不可靠性,接收消息的应用可能在处理消息的时候失败,为了防止应用处理失败,同时消息代理中又没有该消息,一般会启用”消息确认“。当“消息确认”被启用的时候,消息代理不会完全将消息从队列中删除,直到它收到来自消费者的确认回执(acknowledgement)。 消息确认(message acknowledgements):当一个消息从队列中投递给消费者后(consumer),消费者会通知一下消息代理(broker)。可以是自动的,也可以是处理消息的应用的开发者执行。
AMQP实体(AMQP entities):队列,交换器和绑定的统称
2、交换器和交换器类型 交换器是用来发送消息的AMQP实体。交换器拿到一个消息之后将它路由给一个或零个队列。它使用哪种路由算法是由交换器类型和被称作绑定(bindings)的规则所决定的。
AMQP 0-9-1的代理提供了四种交换器:
Name(交换器类型)Default pre-declared names(预声明的默认名称)Direct exchange(直连交换器)(Empty string) and amq.directFanout exchange(扇型交换器)amq.fanoutTopic exchange(主题交换器)amq.topicHeaders exchange(头交换器)amq.match (and amq.headers in RabbitMQ) 在声明交换器时可以附带许多其他的属性,比较重要的有:
Name:交互器的名称Type:交换器的类型Durability :(交换器)持久化特性,如果启动此特性,则Broker重启后交换器依然存在,否则交换器会被删除Auto-delete :是否自动删除,如果启用此特性,当最后一个队列解除与交换器的绑定关系,交换器会被删除。Arguments:可选参数,一般配合插件或者Broker的特性使用 交换器状态:
持久(durable):持久化的交换器会在消息代理(broker)重启后依旧存在。但是持久化的交换器不适用所有常见暂存(transient):暂存的交换器则不会(它们需要在代理再次上线后重新被声明) 几种交换器的对比:
ADB,即Android Debug Bridge,是一个强大的工具,使开发者能够与Android设备进行交互。它支持多种命令,用于安装和调试应用、访问设备shell、传输文件等。本教程将为您提供ADB的详细下载安装步骤,并通过实例深入讲解其使用方法。
下载ADB ADB作为Android SDK Platform-Tools的一部分,可以单独下载,无需安装完整的Android Studio。按照以下步骤下载适用于您操作系统的ADB:
访问SDK平台工具下载页面:打开Android开发者官网中的SDK Platform-Tools部分。
选择下载:页面上提供了Windows、Mac和Linux版本的下载链接。选择与您操作系统相对应的版本进行下载。
解压文件:下载完成后,将文件解压至您希望存放ADB的目录。
安装ADB ADB不需要传统安装,只需将其路径添加到系统环境变量中,即可在任意位置使用ADB命令。
Windows环境变量设置 系统属性:右键“此电脑” > “属性” > “高级系统设置” > “环境变量”。编辑Path变量:在“系统变量”中找到Path,选择“编辑”,然后“新建”,添加ADB工具所在目录的路径。保存并关闭:点击“确定”保存更改。 macOS/Linux环境变量设置 打开Shell配置文件:在终端中打开~/.bash_profile、~/.zshrc或相应的配置文件。添加ADB路径:在文件末尾添加export PATH=$PATH:/path/to/android/sdk/platform-tools。使配置生效:保存并关闭配置文件,执行source ~/.bash_profile或对应的配置文件,使更改生效。 ADB基本使用 验证安装 在命令行中输入adb version检查ADB是否正确安装,成功安装会显示ADB的版本信息。
设备连接 启用USB调试:在Android设备上,进入“设置” > “开发者选项”(若无,需在“关于手机”中连续点击“版本号”7次激活),开启“USB调试”。
连接设备:使用USB线将Android设备与计算机连接,然后在命令行输入adb devices。若设备正确连接,将显示设备序列号。
实用案例 安装应用 命令:adb install /path/to/yourApp.apk案例:假设您有一个名为MyApp.apk的应用,位于C:\Downloads,安装命令为adb install C:\Downloads\MyApp.apk。 卸载应用 命令:adb uninstall package.name案例:要卸载包名为com.example.myapp的应用,使用adb uninstall com.example.myapp。 复制文件到设备 命令:adb push local/path/device/path案例:将本地C:\Documents\file.txt复制到设备的/sdcard目录,使用adb push C:\Documents\file.txt /sdcard/file.txt。 从设备复制文件到本地 命令:adb pull device/path local/path案例:从设备的/sdcard/demo.txt复制到本地D:\Documents,使用adb pull /sdcard/demo.txt D:\Documents\demo.txt。 执行Shell命令 命令:adb shell案例:查看当前运行的进程列表,可以在adb shell后输入ps。 查看日志 命令:adb logcat案例:直接运行adb logcat将实时显示设备的日志输出,对于调试应用非常有用。 结语 ADB是每位Android开发者和测试人员的宝贵工具。掌握ADB的使用,可以极大提高开发和调试的效率。本教程旨在帮助您快速入门ADB的下载安装及基本使用,希望能助您一臂之力。随着对ADB更深入的学习和实践,您将发现其更多强大功能,为您的Android开发之路添砖加瓦。
最全SpringBoot项目多模块开发详解,看这篇就够了 一、为什么使用 1.为什么要多模块开发? 使用java技术开发项目的时候,随着项目的不断发展,需求的不断更新,代码越来越多,包结构也越来越复杂,就会遇到很多问题:
不同方面的代码之间相互耦合,这时候一系统出现问题很难定位到问题的出现原因,即使定位到问题也很难修正问题,可能在修正问题的时候引入更多的问题。多方面的代码集中在一个整体结构中,新入的开发者很难对整体项目有直观的感受,增加了新手介入开发的成本,需要有一个熟悉整个项目的开发者维护整个项目的结构(通常在项目较大且开发时间较长时这是很难做到的)开发者对自己或者他人负责的代码边界很模糊,这是复杂项目中最容易遇到的,导致的结果就是开发者很容易修改了他人负责的代码且代码负责人还不知道,责任追踪很麻烦。 将一个复杂项目拆分成多个模块是解决上述问题的一个重要方法,多模块的划分可以降低代码之间的耦合性(从类级别的耦合提升到jar包级别的耦合),每个模块都可以是自解释的(通过模块名或者模块文档),模块还规范了代码边界的划分,开发者很容易通过模块确定自己所负责的内容。
2.拆分规则 按业务模块划分: 将一个大型系统按照不同的业务模块进行划分,每个模块可以独立开发、测试、部署和维护。比如,对于一个电商系统,可以将商品管理、订单管理、用户管理等业务模块单独拆分成不同的子模块。按功能模块划分: 将一个系统按照不同的功能模块进行划分,每个模块负责完成一个特定的功能,比如认证、授权、缓存、搜索等。按技术组件划分: 将一个系统按照不同的技术组件进行划分,每个模块可以包含一个或多个技术组件,比如数据库连接、消息队列、缓存框架等。按层次划分: 将一个系统按照不同的层次进行划分,每个模块可以包含一个或多个层次,比如数据访问层、服务层、控制层等。混合划分: 可以将上述的任意两种或多种方式结合起来使用,以达到更好的代码复用、可维护性和可扩展性。 二、pom.xml常见配置 dependencyManagement 为了保持模块间依赖统一,在父模块中使用dependencyManagement预定义所有模块需要用到的dependency(依赖),然后,子model根据实际需要引入parent中预定义的依赖
好处:
1、依赖统一管理(parent中定义,需要变动dependency版本,只要修改一处即可);
2、代码简洁(子model只需要指定groupId、artifactId即可)
3、dependencyManagement只会影响现有依赖的配置,但不会引入依赖,即子model不会继承parent中dependencyManagement所有预定义的depandency,只引入需要的依赖即可,简单说就是“按需引入依赖”或者“按需继承”;因此,在parent中严禁直接使用depandencys预定义依赖,坏处是子model会自动继承depandencys中所有预定义依赖;
packaging packaging默认类型jar类型,如果不做配置,maven会将该项目打成jar包。常见项目的打包类型:pom、jar、war:
pom ---------> 父类型都为pom类型
jar ---------> 内部调用或者是作服务使用
war ---------> 需要部署的项目(一般web相关)
小结:父级项目里packaging打包方式一般配置成pom,pom 表示项目里没有java代码,也不执行任何代码,只是为了聚合工程或传递依赖用的。
modules 管理子项目
build 在SpringBoot项目的pom.xml文件中,元素用于定义项目的构建配置,主要包括插件和资源过滤等配置。出现在pom.xml的顶层元素中,是一个重要的构建配置区。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <resources> <resource> <filtering>true</filtering> <directory>src/main/resources</directory> </resource> </resources> </build> SpringBoot项目通常需要的配置有:
编译插件:maven-compiler-plugin打包插件:spring-boot-maven-plugin资源过滤配置插件管理配置 三、主要步骤 1.创建父项目 最后生成的文件中只有pom.xml .idea .iml文件没有src目录,自行删除
2.新建Module–子项目(service,dao,commons,web,api) 选择maven构建
3.编辑pom.xml文件 父项目中
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.
什么是AIGC 生成式人工智能(Artificial Intelligence Generated Content)
定义 百度百科
生成式人工智能AIGC(Artificial Intelligence Generated Content)是人工智能1.0时代进入2.0时代的重要标志。 GAN、CLIP、Transformer、Diffusion、预训练模型、多模态技术、生成算法等技术的累积融合,催生了AIGC的爆发。算法不断迭代创新、预训练模型引发AIGC技术能力质变,多模态推动AIGC内容多边形,使得AIGC具有更通用和更强的基础能力。 AIGC对于人类社会、人工智能的意义是里程碑式的。短期来看AIGC改变了基础的生产力工具,中期来看会改变社会的生产关系,长期来看促使整个社会生产力发生质的突破,在这样的生产力工具、生产关系、生产力变革中,生产要素——数据价值被极度放大。
基础的生成算法模型不断突破创新。
预训练模型引发了AIGC技术能力的质变。
多模态技术推动了AIGC的内容多样性,让AIGC具有了更通用的能力。
生产力、生产关系、生产资料的变化 AIGC生态发展 生态体系 基础模型 国外主要的AIGC预训练模型
场景和应用 Tool AI
AI工具箱 AI导航
国外AIGC应用 国内AIGC应用 通用类场景应用示例 ChatGPT ChatPDF ChatPDF可以将200页以内的pdf文档拖入,ChatPDF马上就自己“读懂”了整个文章的内容。首先它能够生成一个摘要大致总结文档的要点,然后用户可以在对话框进一步追问更多问题,ChatPDF能根据文档内容进行回答。 我周末在帮我儿子复习,把总结的数学错题PDF输入给了ChatPDF,右侧是他的回答,准确率还不错。
腾讯混元助手 可以在微信小程序搜索「腾讯混元助手」 集成了聊天 / 绘画 / 编程等多场景
通义听语 可以在微信小程序搜索「通义听语」 音频转写类,可以实时记录语音,同步实时翻译,智能总结等等
文心一言 在APP「文心一言」 集成了聊天 / 绘画 / 编程等多场景
Runway https://runwayml.com
hotoke.ai hotoke.ai是一个日本开发者开发的基于ChatGPT 的佛祖平台,已为百万人排忧解难。
我问了大家经常会在迷茫的时候思考的问题:「人生的意义是什么」
学习场景应用示例 多邻国 一个流行的免费语言学习应用,通过游戏化的方式帮助用户学习新的语言。(我本人一直使用,体验非常好)
美国版本新增了GPT-4功能:Max。
主要提供了基于GPT-4模型的2大功能:Explain My Answer 和 Roleplay。
Explain My Answer 这个功能的主要目的是让学生在练习时不仅能了解他们答案的正确性或错误性,而且还能够深入了解他们的答案背后的原因。无论答案是正确还是错误的,学生都可以与虚拟助手交流,获得关于为什么他们的答案是对还是错的简要解释,并询问示例或进一步的澄清。这有助于学生更好地理解并纠正他们的错误,从而提升学习效果。
在数据库管理和开发的世界里,选择一个高效、功能全面的客户端工具对于提升工作效率至关重要。尤其对于使用 macOS 的开发者来说,一个好的 MySQL 客户端不仅可以简化数据库操作,还能提供强大的数据分析和管理功能。本文将介绍几款适用于 macOS 的优秀 MySQL 客户端,帮助你在众多选项中做出最适合自己的选择。
Sequel Pro:macOS 用户的首选 Sequel Pro 是一款专为 macOS 用户设计的 MySQL 客户端,以其直观的用户界面和出色的性能著称。它支持快速连接到本地或远程 MySQL 数据库,并提供了一个易于使用的图形界面来浏览、创建、修改和管理数据库。不过,值得注意的是,Sequel Pro 主要面向 MySQL,对于最新版本的 macOS 可能存在兼容性问题。
TablePlus:现代化的数据库管理 TablePlus 支持多种数据库,包括 MySQL、PostgreSQL、SQLite 等,是一款现代且高效的数据库管理工具。它提供了强大的 SQL 编辑器、安全连接以及便捷的数据编辑功能。TablePlus 的设计注重用户体验,支持快捷键操作、多窗口、多标签,使得数据库管理变得轻松而高效。它的界面简洁,功能丰富,适合不同层次的用户需要。
MySQL Workbench:官方的全能工具 MySQL Workbench 是由 MySQL 官方提供的一款综合性数据库工具。它不仅包含数据库设计、建模、管理的功能,还提供了服务器性能监控和优化工具。MySQL Workbench 支持复杂的 SQL 查询、数据库迁移和备份恢复等高级功能,是专业数据库管理员和开发人员的理想选择。
DBeaver:开源的数据库管理全能王 DBeaver 是一个开源的数据库管理工具,支持包括 MySQL 在内的多种数据库系统。它提供了一个用于数据库管理、查询、数据分析和开发的丰富功能集。DBeaver 的特点是其高度的扩展性和定制性,用户可以根据自己的需求安装不同的插件,使其成为一个多功能的数据库工作站。
Navicat for MySQL:专业级的数据库开发和管理 Navicat for MySQL 是一款功能强大的数据库管理和开发工具,提供了一整套从数据建模到服务器管理的高级功能。它支持数据库的数据同步、迁移、备份和恢复,还有丰富的数据导入/导出选项。Navicat for MySQL 的用户界面友好,支持多种连接方式和高级编码功能,是专业用户的优选。
总结 选择合适的 MySQL 客户端可以极大地提升数据库管理和开发的效率。上述每一款客户端都有其独特的优点和功能特性,你可以根据自己的工作需求和个人偏好来选择最适合的工具。无论你是数据库管理新手还是经验丰富的开发者,这些工具都能帮助你更加轻松地管理和操作数据库,优化你的工作流程。
前有Copilot各种酷炫操作,今天有国产软件杀出重围。
今天给大家介绍的是一款国内的国产编程神器,远超微软GitHub Copilot。关键它还是完全免费。
它就是:非十团队国产自主研发的 Fitten Code。
此工具的速度是GitHub Copilot的两倍,同时它的精确度还有大约20%的提升。
更重要的是,在实现了高速度和高准确度的基础上,它还提供了广泛的功能,如自动代码补全、通过自然语言生成代码、自动化注释、智能Bug识别、代码解释和自动化生成单元测试等功能。
本着实践是检验真理的唯一标准,接下来我们就带着大家一起感受一下这款国产之光。
结论:目前我已经成为了这个插件的重度使用用户,所以推荐大家尝试。
下载安装 目前Fitten Code插件支持主流几乎所有的IDE开发工具。包括VS Code、Visual Studio、JetBrains系列IDE(包括IntelliJ IDEA、PyCharm等)等,还适配了上古神器VIM。
使用也非常简单,以VS Code和JetBrains系列IDE为例,直接在对应的IDE插件市场搜索"Fitten Code", 下载安装即可。
比如在VS Code只需要在Extensions中搜索"Fitten Code"并选择对应的插件下载即可:
点击左侧Extensions(扩展)按钮 在搜索框中搜索“Fitten Code” 在搜索结果中点击Install 安 装好之后,在右侧的导航栏中就可以看到 Fitten Code 的图标,点击即可进行注册和登录,同时支持 微信一键登录 。 支持微信一键登录 另外对于IDE的版本要求:VS Code版本要求在1.82.3及以上,JetBirain系列IDE版本要求在2023.3即以上。官网上也贴心的准备了完整的安装下载指南:
使用方式 目前Fitten Code主要可以通过两种方式帮助你完成代码工作:
1. 编码时自动补全代码;
2. 通过"代码问答"定制代码或解答问题;
代码自动补全 编码自动补全应该是所有程序员都特别喜欢的功能。Fitten Code基于大模型为程序员完成智能的代码补全。这里不得不再夸一下,Fitten Code为了防止大家麻烦,给出的快捷键只有三个,分别是tab和Ctrl+⬇️和ctrl+➡️ 。目前我自己测试使用下来,完全足够。
这一部分使用方式在你登录之后就会展示出来,百分百贴心。
Fitten Code 使用方式 具体每种的用法,这里我们可以演示一下。
比如我想要测试一下关于小灰算法中的一些代码样例。我们可以结合插件给我们提供的注释生成和代码生成以及快捷键一起完成
tab 快捷键用来直接接受所有完成建议。
很有意思的一件事情是,我们在输入注释的时候,他同样也会帮助我们提供补全的提示。很cool。而且这里不管是中文还是英文,目前Fitten Code的识别都很不错,很是精准。
另外如果我们只是希望它提供的一部分建议,可以使用Ctrl+⬇️和ctrl+➡️ 。按ctrl+⬇️ 接受一行补全建议。按 ctrl+➡️ 接收完成单个单词的建议。
代码问答 如果你完全不想写代码,也可以使用对话编辑器来完成编码操作。
对话进行代码问答 可以在chat中输入你想要完成的功能。比如小灰可以用它来完成一个购物车的下单代码样例以及在使用一些设计模式。来看看它的完成速度和效果:
问题描述 最近在黑马学习rabbitMQ的过程中,在使用docker部署好rabbitMQ后,使用账号为:itcast,密码为:123321
登录的时候浏览器显示了这个问题,如图所示:
当时以为自己需要输入自己的浏览器登录的账号进行验证,但是密码和账号输入后却显示
这就纳闷了,到底是什么原因导致的?去百度上面搜说需要去浏览器设置 ->
隐私里面去关闭安全设置。等等乱七八糟的设置,结果发现问题还是存在。于是在其他的搜索下知道了错误的原因所在。
解决办法 导致这个问题的原因是我在docker上面部署rabbitMQ的时候没有设置管理员账号。导致rabbitMQ中只有自己的默认账号。没有我登录的那个
itcast 账号,所以会有这个问题。解决办法是
1.先进入自己部署的 rabbitMQ 容器中,查看所有的用户信息
docker exec -it mq容器的名字 bash rabbitmqctl list_users 2. 重新添加一个用户并设置用户的角色
rabbitmqctl add_user 用户名 密码 rabbitmqctl set_user_tags 用户名 administrator 3.使用创建的用户进行登录后就不会显示以上问题,成功进入rabbitMQ管理界面。
学习网络安全技术的方法无非三种:
第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。
第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
第三种就是去找培训。
接下来,我会教你零基础入门快速入门上手网络安全。
网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。
第一阶段:基础准备 4周~6周 这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
第二阶段:web渗透 学习基础 时间:1周 ~ 2周:
① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
配置渗透环境 时间:3周 ~ 4周:
① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。
渗透实战操作 时间:约6周: ① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
这篇文章主要介绍了python游戏编程入门游戏代码,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。
哈喽铁子们
表弟最近在学Python,总是跟我抱怨很枯燥无味,其实,他有没有认真想过,可能是自己学习姿势不对?
比方说,可以通过打游戏来学编程!
今天给大家分享100个Python小游戏,一定要收藏!
1、简易飞机大战 飞机大战相信大家都玩过吧,非常简单有意思的游戏,咱们通过Python给它复刻出来,回味童年。
素材文件
全部源码:
import sys import cfg import pygame from modules import * '''游戏界面''' def GamingInterface(num_player, screen): # 初始化 pygame.mixer.music.load(cfg.SOUNDPATHS['Cool Space Music']) pygame.mixer.music.set_volume(0.4) pygame.mixer.music.play(-1) explosion_sound = pygame.mixer.Sound(cfg.SOUNDPATHS['boom']) fire_sound = pygame.mixer.Sound(cfg.SOUNDPATHS['shot']) font = pygame.font.Font(cfg.FONTPATH, 20) # 游戏背景图 bg_imgs = [cfg.IMAGEPATHS['bg_big'], cfg.IMAGEPATHS['seamless_space'], cfg.IMAGEPATHS['space3']] bg_move_dis = 0 bg_1 = pygame.image.load(bg_imgs[0]).convert() bg_2 = pygame.image.load(bg_imgs[1]).convert() bg_3 = pygame.image.load(bg_imgs[2]).convert() # 玩家, 子弹和小行星精灵组 player_group = pygame.sprite.Group() bullet_group = pygame.sprite.Group() asteroid_group = pygame.
更多Python学习内容:ipengtao.com
在 Python 中,staticmethod 函数是一种装饰器,用于将函数转换为静态方法。静态方法与实例方法和类方法不同,它们不需要类实例作为第一个参数,也不需要类作为第一个参数,因此可以在不需要访问类或实例属性的情况下调用。本文将深入探讨 staticmethod 函数的用法、特性以及适用场景,并提供丰富的示例代码来加深理解。
staticmethod 函数的基本用法 staticmethod 函数的基本用法非常简单,只需将需要转换为静态方法的函数作为参数传递给 staticmethod 即可。
示例如下:
class MyClass: @staticmethod def static_method(): print("This is a static method") # 调用静态方法,无需创建类的实例 MyClass.static_method() 在这个示例中,static_method 被转换为静态方法,因此可以通过类名直接调用,无需创建 MyClass的实例。
静态方法与实例方法的区别 静态方法与实例方法之间有几个重要的区别:
参数传递: 静态方法不需要接收类或实例作为第一个参数,因此不需要 self 或 cls 参数。
访问属性: 静态方法不能直接访问类或实例的属性,因为它们不接收 self 或 cls 参数。
调用方式: 静态方法可以通过类名直接调用,而实例方法需要通过类的实例调用。
静态方法的适用场景 静态方法在 Python 中有着广泛的应用场景,特别是在需要与类相关但又不需要访问实例属性的情况下。
1. 辅助函数 静态方法常用于定义一些与类密切相关但不需要访问实例属性的辅助函数。这些函数通常用于执行特定的任务或提供特定的功能,与类的其他方法共同完成某个操作。
class MathUtil: @staticmethod def add(x, y): return x + y @staticmethod def subtract(x, y): return x - y # 调用静态方法 print(MathUtil.
在前文 本地大模型运行框架Ollama 中,老苏留了个尾巴,限于篇幅只是提了一下 Open WebUI,有网友留言说自己安装没搞定,今天我们来补上
文章传送门:本地大模型运行框架Ollama
什么是 Open WebUI ?
Open WebUI 是针对 LLM 的用户友好的 WebUI,支持的 LLM 运行程序包括 Ollama 和 OpenAI 兼容的 API。
Open WebUI 系统旨在简化客户端(您的浏览器)和 Ollama API 之间的交互。此设计的核心是后端反向代理,可增强安全性并解决 CORS 问题。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
Open WebUI 功能演示
【说明】:
因为老苏的小机器不支持 Nvidia GPU,所以下面👇的安装示例仅支持 CPU。
本文假设你已经在 11434 端口启动了 Ollama 服务,但是否在本机是无所谓的。
安装 在群晖上以 Docker 方式安装。
镜像下载 官方没有在 docker hub 上发布镜像,而是发布在 ghcr.io,地址在 https://github.com/open-webui/open-webui/pkgs/container/open-webui
用 SSH 客户端登录到群晖后,依次执行下面的命令
# 新建文件夹 open-webui 和 子目录 mkdir -p /volume1/docker/open-webui/data # 进入 open-webui 目录 cd /volume1/docker/open-webui # 拉取镜像 docker pull ghcr.