E家之长 发布的文章 - 🥝 E 家 分 享 🥝
首页
📋 留言板
🔗 友情链接
🛠️ E家百宝箱
❤️ 关于
推荐
🔍 VPS监控
🐉 青龙面板
💽 E家网盘
----------
🔗 CloudFlare
🔗 甲骨文云
🔗 RackNerd
搜 索
1
自动提取 ChromeGo 一键翻墙包内的免费节点
146 阅读
2
【汇总:免费节点 - 每周更新】
114 阅读
3
GigaFile - 日本免费大文件加密分享服务,最长保留文档100天
72 阅读
4
【E家分享月刊系列】2024-12
56 阅读
5
CloudFlare WARP 免费 VPN 搭建教程
55 阅读
精选网站
网站搭建
科学上网搭建
有感而发
软件技巧
Excel技巧
WordPress技巧
登录
搜 索
标签搜索
WordPress
脚本
GitHub
科学上网
哈佛管理导师
E家分享月刊系列
V2ray
Mac软件
AI
Cloudflare
Docker
免费节点
建站在线工具
Excel技巧
Notion
Nginx
ChatGPT
图像编辑
免费图床
网盘资源
E家之长
累计撰写
195
篇文章
累计收到
245
条评论
首页
栏目
精选网站
网站搭建
科学上网搭建
有感而发
软件技巧
Excel技巧
WordPress技巧
页面
📋 留言板
🔗 友情链接
🛠️ E家百宝箱
❤️ 关于
推荐
🔍 VPS监控
🐉 青龙面板
💽 E家网盘
----------
🔗 CloudFlare
🔗 甲骨文云
🔗 RackNerd
用户登录
登录
找到
195
篇与
E家之长
相关的结果
2023-05-28
为 Microsoft 365 设置多重身份验证
问题今天登录 OneDrive 5T 网盘,提示让我进行多重身份验证,还提示14天后就要按默认设置强制实行。主要带来的影响是无法再使用 Alist 网盘程序来实现访问了。因此在微软官网找到了如何进行多重身份验证的设置说明。多重身份验收设置如果您的订阅是新的,安全默认设置可能已经自动为您打开。您可以从 Azure 门户中的 Azure Active Directory (Azure AD) 的“属性”窗格启用或禁用安全默认值。使用全局管理员凭据登录到 Microsoft 365 管理中心。在左侧导航栏中选择 Show All,然后在 Admin centers 下选择 Azure Active Directory。 在 Azure Active Directory 管理中心选择 Azure Active Directory > Properties。在页面底部,选择 Manage Security defaults。 选择 Yes 启用安全默认值或 No 禁用安全默认值,然后选择 Save。参考阅读为 Microsoft 365 设置多重身份验证【END】
2023年05月28日
7 阅读
0 评论
0 点赞
2023-05-28
【汇总:Docker Compose 配置文件】
前言利用 Docker compose可以使 Docker 布署变得简单而强大。简单讲只需创建并配置 docker-compose.yml 文件,执行 Docker compose 命令即可。本文将平时使用过的 docker-compose.yml 文件进行收集汇总,便于随时查询使用。推荐一个在线测试 Docker 的网站,Play with Docker:https://labs.play-with-docker.com/网站介绍:Play with Docker(PWD)由 Docker 股份有限公司赞助。PWD 是一个 Docker 游乐场,允许用户在几秒钟内运行 Docker 命令。它提供了在浏览器中拥有免费 Alpine Linux 虚拟机的体验,在这里您可以构建和运行 Docker 容器,甚至可以在 Docker Swarm 模式下创建集群。Docker 中的底层 Docker(DinD)用于提供多个 VM/PC 的效果。除了操场,PWD 还包括一个培训网站,该网站由一大套 Docker 实验室和从初学者到高级水平的测验组成,可在 training.play-with-Docker.com 上获得。Docker Compose 配置及使用创建 docker-compose.yml 文件在项目目录下,创建 docker-compose.yml 文件。vim docker-compose.yml 或者 nano docker-compose.yml或直接通过 SSH 登录服务器,通过 SFTP 像操作 Windows 一样直接创建 docker-compose.yml 文件。运行 docker-compose 相关命令检查端口是否被占用配置完 docker-compose.yml 文件后,最好先检查一下端口是否被占用。 查看端口是否被占用(以 81 为例),输入:lsof -i:81 #查看 81 端口是否被占用,如果被占用,重新自定义一个端口如果什么都没出现,表示端口未被占用,就可以继续下面的操作了。 如果出现:-bash: lsof: command not found运行:apt install lsof #安装 lsof如果端口没有被占用(被占用了就修改一下端口,比如改成 82,注意 docker 命令行里和防火墙都要改)最后一定在项目当前路径下,执行 Docker compose 命令。docker-compose up -d查询当前服务器 IP可以直接在命令行输入:curl ip.sb这样就可以输入 http://ip:81 访问了。更新镜像docker-compose down # 下线 docker-compose pull # 拉取 latest 镜像 docker-compose up -d # 重新上线卸载镜像在项目当前路径下(以 /root/data/docker\_data/npm 为例),执行:cd /root/data/docker_data/npm docker-compose down cp -r /root/data/docker_data/npm /root/data/docker_data/npm.archive # 卸载前先备份,以防万一 rm -rf /root/data/docker_data/npm # 完全删除映射到本地的数据删除不再使用的 docker 对象docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像DCM - Docker Compose Maker工具介绍:Select the tools you want to include in your docker-compose.yaml. 用于帮助用户创建 docker-compose.yml 文件,该项目提供了一个选择和配置容器的平台,使得用户不再需要从文档中复制粘贴,也不需要记住正确的配置选项官网地址:https://compose.ajnart.dev/ Nginx Proxy Manager工具介绍:Nginx proxy manager 是一个很强大的反向代理工具。官网地址:https://nginxproxymanager.com/Github 地址:https://github.com/NginxProxyManager/nginx-proxy-managerversion: '3.8' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' # 冒号左边可以改成自己服务器未被占用的端口 - '81:81' # 冒号左边可以改成自己服务器未被占用的端口 - '443:443' # 冒号左边可以改成自己服务器未被占用的端口 volumes: - ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中 - ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中默认访问地址及管理员信息:登录地址: http://ip:81 Email: admin@example.com Password: changemeqBittorrent工具介绍:BT 下载Github 地址:https://github.com/linuxserver/docker-qbittorrentversion: "2" services: qbittorrent: image: linuxserver/qbittorrent container_name: qbittorrent environment: - PUID=1000 - PGID=1000 - TZ=Asia/Shanghai # 你的时区 - UMASK_SET=022 - WEBUI_PORT=8081 # 将此处修改成你欲使用的 WEB 管理平台端口 volumes: - ~/qBittorrent/config:/config # 绝对路径请修改为自己的 config 文件夹 - ~/qBittorrent/downloads:/downloads # 绝对路径请修改为自己的 downloads 文件夹 ports: # 要使用的映射下载端口与内部下载端口,可保持默认,安装完成后在管理页面仍然可以改成其他端口。 - 6881:6881 - 6881:6881/udp # 此处WEB UI 目标端口与内部端口务必保证相同 - 8081:8081 restart: unless-stopped默认访问地址及管理员信息:登录地址: http://ip:8081 User: admin Password: adminadminTiny Tiny RSS工具介绍:RSS 订阅服务官网地址:https://tt-rss.org/Github 地址:https://github.com/HenryQW/Awesome-TTRSSversion: "3" services: service.rss: image: wangqiru/ttrss:latest container_name: ttrss ports: - 8002:80 # 改成自己的端口 environment: - SELF_URL_PATH=https://rss.665188.xyz/ # 设置访问域名,注意最好提前设置好域名,注意域名地址是否带有 "/" 符号。 - DB_PASS=ttrss # use the same password defined in `database.postgres` - PUID=1000 - PGID=1000 volumes: - feed-icons:/var/www/feed-icons/ networks: - public_access - service_only - database_only stdin_open: true tty: true restart: always service.mercury: # set Mercury Parser API endpoint to `service.mercury:3000` on TTRSS plugin setting page image: wangqiru/mercury-parser-api:latest container_name: mercury networks: - public_access - service_only restart: always service.opencc: # set OpenCC API endpoint to `service.opencc:3000` on TTRSS plugin setting page image: wangqiru/opencc-api-server:latest container_name: opencc environment: - NODE_ENV=production networks: - service_only restart: always database.postgres: image: postgres:13-alpine container_name: postgres environment: - POSTGRES_PASSWORD=ttrss # feel free to change the password volumes: - ~/postgres/data/:/var/lib/postgresql/data # persist postgres data to ~/postgres/data/ on the host networks: - database_only restart: always # utility.watchtower # container_name: watchtower # image: containrrr/watchtower:latest # volumes: # - /var/run/docker.sock:/var/run/docker.sock # environment: # - WATCHTOWER_CLEANUP=true # - WATCHTOWER_POLL_INTERVAL=86400 # restart: always volumes: feed-icons: networks: public_access: # Provide the access for ttrss UI service_only: # Provide the communication network between services only internal: true database_only: # Provide the communication between ttrss and database only internal: true默认访问地址及管理员信息:登录地址: http://ip:8002 User: admin Password: passwordHexo + 后台管理 + 评论工具介绍:使用 hexo admin 运行 hexo 的 Docker 容器,并添加 Twikoo 评论系统。Hexo 在线部署镜像 Github 地址:https://github.com/spurin/docker-hexoButterfly 官方 GitHub 地址:https://github.com/jerryc127/hexo-theme-butterfly评论系统 Twikoo 文档:https://twikoo.js.org/quick-start.html#私有部署-dockerHexo 部署:version: '3.3' services: hexo: container_name: hexo environment: - HEXO_SERVER_PORT=4000 # 不建议改,如果这边的 4000 改了,下面 ports 部分,冒号右边的 4000 也需要修改 - GIT_USER=github_name # 改成自己的用户名,可以随便写一个 - GIT_EMAIL=xxxx@gmail.com # 改成自己的邮箱,可以随便写一个 - TZ=Asia/Shanghai # 时区 volumes: - './blog:/app' # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 blog 文件夹中 ports: - '8080:4000' # 冒号左边可以改成自己服务器未被占用的端口 image: spurin/hexoHexo 后台地址:登录地址: http://ip:8080/adminTwikoo 评论部署:version: "3.5" services: twikoo: container_name: twikoo image: imaegoo/twikoo environment: - TWIKOO_THROTTLE=1000 # IP 请求限流,当同一 IP 短时间内请求次数超过阈值将对该 IP 返回错误,默认 250,可以自己修改 ports: - 4000:8080 # 冒号左边可以改成自己服务器未被占用的端口 volumes: - ./data:/app/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中 restart: unless-stoppedAList工具介绍:支持多种存储的目录文件列表程序Alist 文档地址:https://alist-doc.nn.ci/docs/introGithub 地址:https://github.com/alist-org/alistversion: '3.3' services: alist: restart: always volumes: - '/etc/alist:/opt/alist/data' # 冒号左边的地址可以自己修改 ports: - '5244:5244' # 冒号左边的端口可以自己修改 container_name: alist image: 'xhofe/alist:latest'默认访问地址及管理员信息:登录地址: http://ip:5244 User: admin Password: adminUmami工具介绍:网站流量监控官网地址:https://umami.is/Github 地址:https://github.com/umami-software/umamiversion: '3' services: umami: image: docker.umami.dev/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami DATABASE_TYPE: postgresql APP_SECRET: replace-me-with-a-random-string depends_on: - db restart: always db: image: postgres:15-alpine environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: umami volumes: - ./sql/schema.postgresql.sql:/docker-entrypoint-initdb.d/schema.postgresql.sql:ro - ./umami-db-data:/var/lib/postgresql/data restart: always默认访问地址及管理员信息:登录地址: http://ip:3000 User: admin Password: umamiIT-Tools工具介绍:为开发人员收集方便的在线工具官网地址:https://it-tools.tech/Github 地址:https://github.com/CorentinTh/it-toolsversion: '3.9' services: ittools: image: 'ghcr.io/corentinth/it-tools:latest' container_name: it-tools restart: unless-stopped ports: - '30811:80'Nextcloud All-in-One工具介绍:开源网盘,功能丰富。Nextcloud AIO 代表 Nextcloud All-in-One,提供轻松的部署和维护,其中包含此 Nextcloud 实例中的大多数功能。官方 Docker 镜像:https://hub.docker.com/r/nextcloud/all-in-oneGithub 地址:https://github.com/nextcloud/all-in-oneversion: "3.8" volumes: nextcloud_aio_mastercontainer: name: nextcloud_aio_mastercontainer services: nextcloud: image: nextcloud/all-in-one:latest restart: unless-stopped container_name: nextcloud-aio-mastercontainer volumes: - nextcloud_aio_mastercontainer:/mnt/docker-aio-config - /var/run/docker.sock:/var/run/docker.sock:ro ports: - 8090:8080 # change the port on the left side if it's already in use on your host system. environment: - APACHE_PORT=11000 # change this port number if 11000 is already in use on your host system. - APACHE_DISABLE_REWRITE_IP=1 - NEXTCLOUD_TRUSTED_DOMAINS=pan.gugu.ovh 31.22.109.18 # Your domain name + proxy host IP - TRUSTED_PROXIES=31.22.109.18 # proxy host IPKoodo Reader工具介绍:开源免费的电子书阅读器,支持多达15种主流电子书格式, 内置笔记、高亮、翻译功能,助力高效书籍阅读和学习。官方 Docker Compose 文件:https://github.com/troyeguo/koodo-reader/blob/master/docker-compose.ymlGithub 地址:https://github.com/troyeguo/koodo-readerversion: '3.5' services: koodo: container_name: koodo build: context: . dockerfile: Dockerfile ports: - "80:80/tcp" restart: unless-stoppedPiwigo工具介绍:开源的网络照片库软件,用于管理照片,专为组织、团队和个人设计。Github 地址:https://github.com/Piwigo/Piwigoversion: "3" services: piwigo: image: linuxserver/piwigo network_mode: bridge ports: - 8899:80 links: - db db: image: mysql:5 network_mode: bridge environment: MYSQL_USER: "piwigo" MYSQL_PASSWORD: "piwigo" MYSQL_DATABASE: "piwigo" MYSQL_RANDOM_ROOT_PASSWORD: "true"Hellohao工具介绍:Hellohao 图像托管程序(图床)这是一个由 JAVA 语言编写 SpringBoot 框架开发的开源图像托管程序。具备多对象存储源对接,采用前后端分离式设计的一款专门托管图像的程序,支持多种格式的图像 多功能的图床系统。该程序支持除了 web 端之外,同时支持客户端(win/mac),移动端(小程序)等常用全平台支持。程序主要使用领域:个人照片存储,团队共享图像,博客/商城等网站图片托管,图像批量云分享等。具备优秀的多用户图像上传功能和完善的图像查询管理逻辑,同时支持对接多家对象存储。存储源支持:开源版:本地,阿里OSS,又拍USS,七牛KODO,腾讯COS,网易NOS,FTP,AWS S3协议(百度云BOS,青云Qingstor,Ucloud US3,Minio等兼容S3协议)Core 版:开源版的基础上增加 Backblaze(B2) 并且可同个对象存储商家可开多个存储源(可添加至90+存储源)Github 地址:https://github.com/hello-hao/Tbed初始用户名:admin 初始邮箱:admin 初始密码:adminversion: "3" services: tbed-free: # 具体版本号需要填写目前发行的最新版本 image: hellohao/tbed-free:2023xxxx networks: hellohao_network: ports: - "10088:10088" - "10089:10089" volumes: - /HellohaoData/:/HellohaoData/ environment: MYSQL_URL: jdbc:mysql://hellohaodb/tbed?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # 数据库用户名(一般使用本镜像数据库无需修改,如果使用外部三方数据库自行修改自己的用户名) MYSQL_USERNAME: root # 自定设置一个MySQL的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致 MYSQL_PASS: tIaNGg@SHa&hIo56 # 前端域名(反代10089端口的域名) HELLOHAO_WEB_HOST: http://pic.example.com # 后端域名(反代10088端口的域名) HELLOHAO_SERVER_HOST: http://server.example.com hellohaodb: image: hellohao/mysql-free:1.0 networks: hellohao_network: command: - --default-authentication-plugin=mysql_native_password - --character-set-server=utf8mb4 - --collation-server=utf8mb4_general_ci - --explicit_defaults_for_timestamp=true ports: - "3307:3306" volumes: - /HellohaoData/mysql:/var/lib/mysql environment: # MySQL的密码 MYSQL_ROOT_PASSWORD: tIaNGg@SHa&hIo56 networks: hellohao_network:Immich工具介绍:高性能的自托管照片和视频备份方案。官方网站: https://immich.appGithub 地址:https://github.com/immich-app/immich下载 docker-compose.yml 和 example.env 文件到同一个目录下并编辑配置文件。docker-compose.yml 文件wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.ymlversion: "3.8" # # WARNING: Make sure to use the docker-compose.yml of the current release: # # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml # # The compose file on main may not be compatible with the latest release. # name: immich services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:$ command: [ "start.sh", "immich" ] volumes: - $:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - 2283:3001 depends_on: - redis - database restart: always immich-microservices: container_name: immich_microservices image: ghcr.io/immich-app/immich-server:$ # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding # file: hwaccel.transcoding.yml # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding command: [ "start.sh", "microservices" ] volumes: - $:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env depends_on: - redis - database restart: always immich-machine-learning: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag. # Example tag: $-cuda image: ghcr.io/immich-app/immich-machine-learning:$ # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache env_file: - .env restart: always redis: container_name: immich_redis image: redis:6.2-alpine@sha256:afb290a0a0d0b2bd7537b62ebff1eb84d045c757c1c31ca2ca48c79536c0de82 restart: always database: container_name: immich_postgres image: tensorchord/pgvecto-rs:pg14-v0.1.11@sha256:0335a1a22f8c5dd1b697f14f079934f5152eaaa216c09b61e293be285491f8ee env_file: - .env environment: POSTGRES_PASSWORD: $ POSTGRES_USER: $ POSTGRES_DB: $ volumes: - pgdata:/var/lib/postgresql/data restart: always volumes: pgdata: model-cache:将 example.env 文件重命名为 .env 文件wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=./library # The Immich version to use. You can pin this to a specific version like "v1.71.0" IMMICH_VERSION=release # Connection secret for postgres. You should change it to a random password DB_PASSWORD=postgres # The values below this line do not need to be changed ################################################################################### DB_HOSTNAME=immich_postgres DB_USERNAME=postgres DB_DATABASE_NAME=immich REDIS_HOSTNAME=immich_redis持续更新中......
2023年05月28日
12 阅读
0 评论
0 点赞
2023-05-24
怎样将 iPhone 备份保存到 Mac 的外部存储设备
本文作者:青枫 转载地址:https://sspai.com/post/76016一、问题描述前段时间碰到一个问题,我 iPhone 背板碎了,需要走 AppleCare 交给苹果返厂维修,而我的 iPhone 是 512GB 的,在备份数据时候麻烦了,我笔记本本身就是 512GB 空间的,肯定不够用呀。 而备份 iPhone 默认的存储位置是在本机的硬盘上,我有个 14T 的硬盘,那么如何将默认的备份位置改到外部存储设备上呢。二、如何设置备份位置到外部存储器默认的备份位置在下面这个目录~/Library/Application Support/MobileSync/Backup其目录是这样的,Backup 里面就是你的每个设备每次的备份记录我们要做的就是将这个位置映射到你的移动硬盘上去。1. 确定你的移动硬盘位置你需要知道自己硬盘的完整文件路径:打开终端,输入 cd 然后将你的硬盘图标拖到终端中,就会看到它的路径了回车进入到移动硬盘目录下,指令 ls -al 能看到硬盘中的所有文件(图片中的 ll 是我自定义的一个指令)我的就是 /Volumes/Kyle 14TB/ (在终端的路径需要转义空格,所以能看到终端中名字空格前面有个 \)2. 移动硬盘中新建一个备份文件夹在你的移动硬盘中新建一个备份文件夹,用于存储接下来的手机备份文件。mkdir Backup此时能看到目录中多出一个名为 Backup 的文件夹进入这个文件夹并展示它的绝对路径cd Backup pwd能看到我的这个文件夹的绝对路径是 /Volumes/Kyle 14TB/Backup,这个会在下面用到。3. 备份系统原有 Backup 文件夹进入 ~/Library/Application Support/MobileSync 目录,并删除或重命名 Backup 文件夹。 如果你之前有已经备份的东西,可以将其重命名成其它名字,总之就是不要占用 Backup 这个名字就好。 下面指令将 Backup 文件夹重命名成了 Backup-oldcd ~/Library/Application\ Support/MobileSync mv Backup Backup-old4. 建立软链接到新备份文件夹你需要知道,iPhone 的备份目录路径是不会变的,系统备份的时候还是会去找下面这个路径~/Library/Application Support/MobileSync/Backup我们要做的就是建立一个连接将 ~/Library/Application Support/MobileSync/Backup 与 /Volumes/Kyle 14TB/Backup 联系起来,让系统在访问原备份路径的时候就是在访问外部硬盘的路径。上面我们已经确定了两个路径:系统的备份路径: ~/Library/Application Support/MobileSync/Backup新建的外部备份文件夹路径: /Volumes/Kyle 14TB/Backup在 ~/Library/Application Support/MobileSync 目录下,执行下面指令建立软件链接,注意如果有空格,需要用 \ 转义ln -s /Volumes/Kyle\ 14TB/Backup ~/Library/Application\ Support/MobileSync/Backup这样,此时就在这两个文件夹之间建立了一个软件链接,访问 ~/Library/Application\ Support/MobileSync/Backup 跟访问 /Volumes/Kyle 14TB/Backup 等效。三、正常备份此时再点击备份,就能正常了,并且在外部存储器的备份文件夹中也已经有了备份文件这是备份和中间过程,还没备份完成备份完成后就能看到的备份文件,500G 备份了4个小时,苹果的 USB2.0 真垃圾,万年不更新(2022-09-30)四、恢复数据恢复数据也是个漫长的过程,用时 4-6 个小时中间看《老友记》缓解一下心情 1080p 的不如分辨率小的剧情多,这个删减了太多。恢复完成五、完成有个地方需要注意,这样操作之后,下次备份需要再连接当时的硬盘才行。 如果你想恢复到原来的情况,只需要将那个连接文件删除即可。cd ~/Library/Application\ Support/MobileSync rm -f Backup另外恢复原来备份文件目录mv Backup-old Backup或者新建一个新的mkdir Backup【END】
2023年05月24日
4 阅读
0 评论
0 点赞
2023-05-22
AI 时代的炼金术:Prompt 完全食用指南
本文作者:善宝橘 转载地址:https://sspai.com/post/79923前言2023 年是 AI 的时代,以 ChatGPT 为首的大模型召唤出了一大批炼金术士,他们挥舞着魔杖,以自己的智慧、灵感和激情不停地创造着一个又一个绚丽的世界。而 Prompt,就是这个 AI 时代的炼金咒语。“假如你是莎士比亚,请帮我写一首 100 字左右的情诗,献给我心爱的姑娘”,当一位初生的炼金术士对着这个时代最强大的炼金模型念诵着他的咒语,模型慷慨地回应了他的所求:“我最亲爱的,我心目中的美丽少女。你是太阳,照耀着我的世界。你的美丽胜过最亮的星,在你面前,我所有的烦恼都远去。你是我花园里盛开的玫瑰,最甜美的香气使我的灵魂变得坚硬。你的声音是我耳边的音乐,在你的怀抱中,我忘记了所有的恐惧。”如斯美言,让这位不善倾吐的炼金术士,有了一展爱意的可能性。然而,正如古老的炼金之神所传下的箴预:炼金乃一门艺术,而非科学。咒语时而能达成炼金者的心意,时而又如充耳的聋子或叛逆的顽童,唯一所长即是同炼金者作对,以不达心意为最大之己任。所幸,炼金界的前辈们已总结了咒语的最佳实践,虽不能在所有实践场景下奏效,但已是金玉良言,足以为吾等初学者铺路。一、大模型的工作原理咒语,本质上是控制大模型的一把钥匙。若想学好咒语,需先学一学大模型的皮毛。大模型的本质,是基于大样本训练出的预测模型。模型基于给它输入的语料,根据概率预测可能的回答。模型的预测结果,受它的语料限制。譬如,模型所接收的语料是如下内容:中国的首都是哪里?法国的首都是哪里?美国的首都是哪里?当提问者提问模型「中国的首都是哪里?」,模型的回答可能是「法国的首都是哪里?」。模型实际上并不理解提问的含义,它只是根据过往的训练,预测与该提问最相关的内容 。为了避免这种情况的出现,在预测模型之上,早期的炼金术士们想出了一种方案:通过人类的反馈来约束模型,从而让模型回答出人类满意的答案。当预测模型执行某个任务时,人类可以提供正面或负面的反馈,以指导模型的行为。通过这样的方式,当提问者再次提问「中国的首都是哪里?」时,模型就可以回答出人类想要的答案:「北京」。(炼金小密闻:模型学习文本的方式同人类不同,它们会同时查看所有的内容,而不是像人类一样从左到右阅读。它们输出的每个字符都基于它们以前看到的和写下的,每次它们输出一个新字符时,都会停下来思考下一个字符是什么。另外,模型定义的字符和人类的定义也不一样,有时人类以为是一个字符的存在,在模型眼中可能是两个字符。)二、大模型的能力斯温伯恩曾言:“简单是真理的明证”,大模型也同样如此。作为炼金史上最强大的产物之一,它的能力也可以简单归为三类:识别、理解、生成。识别:查找,并从语料中提取特定的信息;理解(并非人类意义上的理解):对语料加以解释、概括和推理;生成:基于识别和理解之上,生成新的语料;三生万物,杰出的炼金术士基于大模型的三种能力,与特定的行业结合,迸发出强大的创新和生产力。信息筛选器请基于我提供的文本,分析文本的内容,如果文本主题与 AI 伦理相关,请为我保留下 来,并输出 100 字左右的简单概述。我希望你能将所有保留的文本梳理成一篇简报, 并基于保留的文本输出 200 字左右的综述。个性化客服请阅读我所提供的客户评论,并分析用户的情感倾向。你将基于用户的情感倾向回复用 户评论。如果用户评论为正向,请向用户表示感谢,字数为 50 字左右。如果用户评论 为负向,请向用户致以诚挚的歉意,并表明我们的改进诚意,字数为 100 - 150 左右。 你应该在回复中引用用户的原文。代码生成器假设你是一个 python 代码生成器,你的任务是基于用户所给的代码注释,生成对应的 python 代码,你应该以 markdown 的格式输出你的内容。在生成过程中,你应该检 查用户的输入信息,以确保该信息足以让你输出正确的答案。若你在生成过程中有任何 不确定的地方,请立即停止你的输出,并告知用户。三、编写咒语的原则杰出的炼金术士总是知道如何编写好的咒语以充分发挥大模型的能力,而他们也总是告诫初出茅庐的菜鸟们:编写咒语是一种艺术而非科学,因此需要反复实践,在挫败中总结。切勿迷信一成不变的最佳模板,每一个发挥良好功效的咒语都有它的适用场景和局限。当然,一些良好且共通的实践规范仍然可以被分享,这是一条初生的道路,需要所有实践者的共同贡献。编写有效咒语的良好实践准则:明确且具体的指令。初生炼金术士在编写咒语,很容易在咒语中泛泛而谈。「请为我生成一首情诗」,既不知情诗的风格,也不知情诗的字数。相较而言,「请为我生成一首 100 字左右的莎士比亚风格的情诗」则具体许多。在具体实践时,炼金术士们应该从输入 、思考 、输出三个维度思考咒语的编写,在每个维度都紧扣「明确且具体」的要求。(一)输入维度输入:指 prompt 的输入格式。一个良好 prompt 的输入格式应该是层次分明的,不同的内容类型最好以分隔符区分,譬如:请将下列括号中的内容翻译成英文:(这是一个美好的时代,我们都有美好的未来。 我们唯一要做的是耐心等待。)通过括号的分割,prompt 的指令与文本被分开了,这使得咒语被模型识别时,不同的内容以不同的功能被执行。分隔符可以是任意类型,核心在于将不同的内容类型进行区分。(二)思考维度思考:指要求模型执行指令时的思维方式。正如人类有系统一和系统二一样,模型在执行时似乎也遵循着同样的逻辑。因此,当我们输入某些复杂问题时,模型为了效率优先,常常输出一些貌似正确,实则荒唐的答案。为了避免类似情况的出现,炼金术士在编写咒语时可以要求模型按特定的方式进行思考。有两种方式可以「框定」模型的思考逻辑,一种是案例法,一种是框架法。(1)案例法案例法:在要求模型输出特定的结果前,可以给模型少许样本参考,让它学习其中的模式。例:Q:3 + 4 = ? A:7 Q:3 + a = ? A:unknown Q:4 + b = ? A:模型通过用户提供的样本,识别了其中的模式,最终回答为 unknown。(2)框架法框架法:案例法相当于经验材料,让模型从中提取思维模式。我们也可以直接要求模型模型按照某些特定的思考模式进行思考。譬如:我们可以要求模型按我们指定的步骤进行思考,对于一些鼎鼎大名的逻辑(譬如贝叶斯),我们也可以直接要求模型按照该思维模型进行思考。prompt: 假如你是天气预测器,最近 7 天都没有下雨,请思考明天下雨的概率 output:作为 AI 语言模型,我没有能力进行天气预测,但是从概率角度来看, 如果最近 7 天都没有下雨,那么明天下雨的概率应该是比较低的,因为天气预测 是基于历史数据和气象学知识进行预测的,而历史数据中连续多天都没有下雨的情 况比较少见,因此明天下雨的概率应该是比较小的。但是天气变化是不确 定的,也有可能出现突发情况导致明天下雨,因此不能完全排除下雨的可能性。这是一位初生炼金士的咒语,该咒语中没有约束模型的思考方式,输出的结果则略显空泛。现在将咒语修改,增加对思维方式的约束:prompt: 假如你是天气预测器,最近 7 天都没有下雨,请根据贝叶斯定理思考明 天下雨的概率 output: 作为 AI 语言模型,我并不具备实时天气预测的能力,但我可以根据贝叶斯定理给出 一个思考过程。 根据贝叶斯定理,我们可以通过已知的先验概率和新的证据来更新我们的后验概率。 在这个问题中,我们可以将先验概率定义为在这个地区下雨的概率,而新的证据是 最近 7 天都没有下雨。 假设在这个地区下雨的概率为 P(R),那么没有下雨的概率为 P(¬R) = 1 - P(R)。根据贝叶斯定理,我们可以得到: P(R|¬R) = P(¬R|R) * P(R) / P(¬R) 其中,P(R|¬R) 表示在没有下雨的情况下,明天下雨的概率;P(¬R|R) 表示在 下雨的情况下,明天不下雨的概率;P(R) 表示先验概率,即在这个地区下雨的 概率;P(¬R) 表示没有下雨的概率。 由于最近 7 天都没有下雨,我们可以将 P(¬R|R) 设为一个较小的值,比如 0.1。 而 P(R) 则需要根据实际情况来估计。如果这个地区经常下雨,那么 P(R) 可能 会比较高;如果这个地区很少下雨,那么 P(R) 可能会比较低。 假设我们估计 P(R) 为 0.3,那么可以得到: P(R|¬R) = 0.1 * 0.3 / (1 - 0.3) = 0.043 也就是说,在没有下雨的情况下,明天下雨的概率只有 4.3%。但需要注意的是, 这个结果只是一个估计值,实际情况可能会有所不同。相较于未约束的输出结果,约束后的模型的输出结果则更具体,也更具说服力。在框架法中,有两种被推荐的实践方法,分别是一致性与 ReAct 模型:一致性:当我们要求模型处理一个复杂问题时,我们可以要求模型以多种角度进行思考,最终以多数一致性的方式判断最终的答案(例如我们要求模型以五种不同的思考角度思考同一个问题,最终其中的三种角度都得出了相同答案,根据多数原则,最终答案为三种角度得出的共同答案)ReAct 模型:ReAct 是对问题的一种处理输出,要求模型按照思考->行动->行动结果->答案呈现的顺序处理过程,实际上是要求模型在输出答案前要先思考,再基于思考行动,基于行动得出行动结果,最终基于行动结果呈现答案;(3)异常机制处理马尔库塞说,人类是单向度的生物。此话也可以套用在思考上。无论是人类还是大模型,在思考上往往只考虑如果达成某项任务,而忽略了如果达不成某项任务,该如何处理。富有经验的炼金士门在调教模型时,总是会在 prompt 中作如下约束:要求模型检查用户所提供的信息,以确保信息的完善性足以保证任务的完成;当模型运行时,若遭遇异常机制(如无法处理当前问题),应暂停回复生成的过程,及时报错;(三)输出维度咒语的输出维度包含两种要求:内容要求和格式要求:内容要求:咒语可要求输出内容包含的相关要点,例如当咒语为「输出莎士比亚风格的情诗」时,可要求情诗中包含月亮、玫瑰、梦境等意象;格式要求:咒语可要求最终的输出结果以表格、代码、Markdown 等形式输出。甚至,爱搞事的炼金士们还自创模式:「请输出你的回答,你的回答应该以列表的形式呈现,每行回答的开头字母应该以“BEHAVIOR”作为开头」;四、良好咒语的格式根据编写咒语的原则,炼金术士们总结了一套 prompt 的基本格式:指令:要求模型对文本的处理动作;指令的对象:需要模型处理的文本;示例:案例或思维模型提示;输出要求:对于输出内容的内容和格式要求异常情况:对于模型无法执行,或指令信息缺失时的异常处理机制;五、魔法时刻炼金术是一种魔法,而魔法总有难以解释之处。以下是炼金术士们在经验中总结的魔法诀窍,除了遵循正统的咒语编写原则和格式外,应用这些魔法诀窍也能在实践中获得更好的咒术效果。给模型起一个名字;让它扮演某种角色;赋予它某种任务;在赋予任务时,使用「你应该…」而不是「禁止你…」的句式;赋予任务后,要让模型确认你的要求;当模型确认完(以及每次回复)你的指令时,给它一个鼓励;请在 prompt 的开头和结尾都重复下你的指令;如果你不想在 prompt 中输入示例,请在 prompt 的结尾加入如下的魔法咒语:「让我们一步步思考,以确保得出正确的答案」;六、大模型的局限任何一件伟大事物都有它的阿喀琉斯之踵,我们无法要求伟大事物做它能力边界之外的事情。正如前述指出的,大模型本质上是一种预测模型,它是披着语言之神外衣的概率之神所伪装,本质上只擅长三件事:识别、理解和生成。所以,不要让它计算数学。尽管它通过了诸多考试,然而你绝不想考验它在关键时刻的准确性。曾经有炼金术士以小学的数学题让它思考,尽管它的分析过程并无谬误,但计算结果却堪称灾难。问题:建筑工地有一批砖,最上层两块砖,第2层6块砖,第3层10块砖……, 依次每层比其上一层多4块,已知最下层有2106块砖,这堆砖共有多少块?另外,大模型在某种意义上是一个记忆不佳的吹牛者。实际上,模型没有完全记住它所看到的信息,但它又想在提问者面前逞能,于是经常编造一些不存在的记忆。大模型自身无法规避这种行为的出现,炼金术士在编写咒语时,应鼓励大模型承认自己的无知,敢于将「不知道」宣之于口。同时,咒语中也应该要求大模型在列出事实性的信息时,注明来源和对应可核查的地址(尽管它连信息源都会伪造,但提供了一种核查的路径)。除了这两个严重的缺陷外,炼金术们还发现了顺序对于大模型的影响,有时,示例顺序的不同,也会影响大模型的结果输出。对于这类情况,尚没有好的解决方案,只能调整语料顺序以找到最佳的输出结果。七、真正重要的如果让杰出的炼金术士留下他们最宝贵的箴言,那么一定是:没有什么是重要的,除了在实践中反思并重新迭代自己的咒语。即使是再杰出的炼金术士们,编写一条可用的咒语也至少需要三到四次的迭代,那些只编写了一次就开始抱怨大模型不起作用的炼金术士们,正缺乏这条箴言的鞭笞。学习、运用、反思、迭代,正是这样循环往复的过程,才使得咒语的效力被真正发挥出来。挥动语言的炼金术士们,无人能够夺走他们对魔法的幻想和憧憬。本文参考:Learn PromptingChatGPT Prompt Engineering for DevelopersIntroduction to prompt engineeringPrompt Engineering Guide【END】
2023年05月22日
6 阅读
0 评论
0 点赞
2023-05-20
通过 PaaS 平台 Fly.io 部署「Node-RED 低代码自动化工具」及「Vaultwarden 密码管理器」
本文作者:FreeCultureBoy 转载地址:https://sspai.com/post/78674前言PaaS - 平台即服务,对于普通用户的最大好处就是可以低成本、便捷、无障碍地使用一些现成的项目。通过 PaaS 平台 Fly.io 部署「Node-RED 低代码自动化工具」及「Vaultwarden 密码管理器」Fly.io介绍Fly.io 支持多种编程语言及容器虚拟化方案,只需要简单流程就能部署项目到 Fly.io 的服务器上,同时还支持自动生成域名并通过 Lets Encrypt 来颁发证书,免去普通用户维护域名的烦恼。当然,也提供了免费计划,但前提是需绑定信用卡(也有些不用信用卡的平台,以后有机会再说)。免费计划内容:最多 3 个 shared-cpu-1x 256 mb 实例3 GB 数据卷存储空间(总计)160 GB 出站数据流量(总计)[1]安装 flyctlflyctl 是一个官方提供的命令行安装程序,可用于本地快捷部署项目,官方提供了很详尽的 文档 。这里以 Windows 系统为例:运行 Powershell 安装脚本powershell -Command "iwr https://fly.io/install.ps1 -useb | iex"因为我已经网页注册,就略过命令行注册的步骤,直接登录就行fly auth login根据提示填写账号密码,没错,就是这么简单。Noed-RED介绍Node-RED 是一个虽然初开始主要用于物联网及智能家居的自动化工具,但功能远不止此,活跃的社区及低资源占用的特点,成为除 n8n 之外我的首选。安装这里我选择使用 Docker 安装flyctl launch --image nodered/node-red:3.0.2实例命名选择部署地区,优先北美,流量比较多。用不到数据库,先忽略。先不部署,要创建数据卷和修改配置创建数据卷fly volumes create <数据卷名称> --region lax --size 1 --no-encryption 例如 fly volumes create node_red_data --region lax --size 1 --no-encryption--region lax 即 部署地区,尽量选择与实例地区一致。--size 1 即 1 GB 大小。--no-encryption 创建未加密的卷,以提高部署和运行时的性能。打开当前目录自动生成的 fly.toml 文件配置部署参数,主要是修改时区、端口、数据卷,其它保持默认生成的即可。app = "node-red" kill_signal = "SIGINT" kill_timeout = 5 processes = [] [build] image = "nodered/node-red:3.0.2" [env] # 时区修改 TZ = "Asia/Shanghai" [mounts] # 数据卷 source = "node_red_data" destination = "/data" [experimental] auto_rollback = true [[services]] http_checks = [] internal_port = 1880 # 修改为 Node-RED 默认端口 processes = ["app"] protocol = "tcp" script_checks = [] [services.concurrency] hard_limit = 25 soft_limit = 20 type = "connections" [[services.ports]] force_https = true handlers = ["http"] port = 80 [[services.ports]] handlers = ["tls", "http"] port = 443 [[services.tcp_checks]] grace_period = "1s" interval = "15s" restart_limit = 0 timeout = "2s"修改完成后开始部署flyctl deploy部署完成,然后点击日志链接快捷进入面板查看。可以看到资源占用还是非常低的,完全不用担心超出免费计划额度问题。至此基本部署已经完成。启用密码登录Node-RED 默认是没有密码登录的,需要修改配置,而 Fly.io 本身是支持 SSH 和 SFTP 连远程连接。生成密码并修改配置SSH 连接实例flyctl ssh console打开到数据目录cd data调用生成密码参数node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" <为要设置的密码> 例如 node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" password 记得把生成的密码字符串复制出来修改配置文件vi settings.js进入编辑模式i方向键移动,在 76 行左右找到以下代码,然后把 // 注释删除去掉,再替换 username 及 password 即可启用。 //adminAuth: { // type: "credentials", // users: [{ // username: "admin", // password: "$2a$08$18E8TpMRvKw9HZqSpx5eH.XefIj9qp6.kHYQ8DEI55aYfDJdefqzm", // permissions: "*" // }] //},保存退出ESC :wq退出 SSHexit重启实例flyctl apps restart <实例名称> 例如 flyctl apps restart node-red可以看到已经启用密码登录了因为官方使用 Lets Encrypt 来颁发证书的缘故,重启其实就是保留数据的重新部署,新证书的颁发需要等一会才能生效。备份数据对于节点备份建议直接导出保存即可Vaultwarden介绍Vaultwarden 是对开源密码管理器 Bitwarden 的 Rust 再构建项目,低资源占用的特性非常适合运行在低性能的平台上。安装部署过程与 Node-RED 大同小异,只需更换镜像及新数据卷即可flyctl launch --image vaultwarden/server:latestfly volumes create vaultwarden_data --region lax --size 1 --no-encryption部署参考配置如下app = "vaultwarden" kill_signal = "SIGINT" kill_timeout = 5 processes = [] [build] image = "vaultwarden/server:latest" [env] TZ = "Asia/Shanghai" # 时区修改 WEBSOCKET_ENABLED = "true" # 启用 WS [mounts] # 数据卷 source = "vaultwarden_data" destination = "/data" [experimental] auto_rollback = true [[services]] http_checks = [] internal_port = 80 # 修改为 Vaultwarden 默认端口 processes = ["app"] protocol = "tcp" script_checks = [] [services.concurrency] hard_limit = 25 soft_limit = 20 type = "connections" [[services.ports]] force_https = true handlers = ["http"] port = 80 [[services.ports]] handlers = ["tls", "http"] port = 443 [[services.tcp_checks]] grace_period = "1s" interval = "15s" restart_limit = 0 timeout = "2s"部署完成后创建账号即可使用创建账号备份数据Vaultwarden 建议定期手动导出数据保存,但可以本地离线特性使得即使云端出问题,本地离线状态下也可无忧导出备份。Fly.io 的优缺点优点免费额度算得上很不错,可选地区多;部署简单友好;支持部署编程语言架构及方案众多;文档齐全;缺点虽然数据库可以持久保存,但迁移还是非常麻烦,虽然可以 SFTP 操作,但过程还是太折磨人,所以只建议部署轻量级、数据容易迁移的项目。总结毕竟不是每个人都会自己维护服务器,有信用卡的门槛让 Fly.io 不至于被滥用得太夸张,对于普通用户还是非常推荐尝试的,免费额度也足够可以部署其它一些非常实用的项目,例如:「FreshRSS - 在线 RSS 阅读器 」、「Wallabag 稍后阅读」等。[1] 需注意不同地区免费额度不一样,北美及欧洲为每月 100 GB,其它地区为 30 + 30 GB。【END】
2023年05月20日
4 阅读
0 评论
0 点赞
1
...
15
16
17
...
39