AutoSaleVPS的Github仓库:
开发和调试不易,希望小伙伴们帮忙给项目点Star、关注我的帐号呀!感谢感谢!
日志
- 2025-12-13:新增特性:1. 显性提示卡片信息的最新更新时间; 2. 插件系统日志的可控性持久化。 3. 额外CSS更新策略优化(不过,如果WordPress博客使用了比较激进的缓存策略,生效时间还是会有点久)
- 2025-11-29:提交AutoSaleVPS的首个公开版本。
前言
最近恰逢2025年黑色星期五,又到了频繁需要更新VPS信息的时候。由于我的推广页面是一个WordPress页面,手动编辑多有不便,所以我就一直想着,开发一个WordPress插件来自动完成编辑VPS信息的任务。刚好这周六有点空,早上简单地构思了一下,在AI的辅助下花了几个小时搓出了这个项目——AutoSaleVPS。AutoSaleVPS 是一个基于大语言模型(LLM)的WordPress 插件,主要用于辅助WordPress博主进行高效的VPS 推广。它的主要特点包括:
- 开源、免费使用
- 自动生成推广卡片
- 校验商品是否还能下单,并在售罄时高亮提醒
- 基于LLM 驱动自动生成推广信息,完美支持OhMyGPT等类OpenAI的第三方API
- 提供配置编辑、日志和巡检工具
- 基于简码使用,非常简单
现在,我的推广页面已经更新了基于AutoSaleVPS的功能,感兴趣的小伙伴可以了解一下:

虽然本项目的开发初衷是为了推广VPS;但是,只要你的推广商品的链接具有固定的链接模式(具有affiliate ID和product ID),那么AutoSaleVPS插件都是适用的。下面,我来介绍一下如何使用AutoSaleVPS插件吧!
基本使用
下载项目
下载最新版的AutoSaleVPS.zip:

后台安装
在 WordPress 后台安装插件:登录 WP 后台 → 插件 → 安装插件 → 上传插件 → 选择 AutoSaleVPS.zip → 安装并启用。这个我就不多说了!来咱这看教程的基本上都知道怎么安装WordPress插件吧 (~ ̄▽ ̄)~
基本使用
创建展示页面(或者某个已经建立的页面/文章都可以):内容里输入短代码:
[AutoSaleVPS]
管理员和访客的界面是不一样的。这是管理员的页面,方便我们直接在页面内编辑(不过我个人推荐去后台操作):

这是访客的界面,只能看到VPS的相关信息:

后台设置
首先,我们进入后台,它的位置和大部分主流插件是类似的:

配置 API Key
- 在含短代码的页面顶部点击「添加KEY」。
- 输入
sk-开头的密钥;眼睛图标仅在鼠标悬停时短暂显示内容,鼠标移开立刻隐藏,防止泄露。 - 输入完成后,以后看的时候会发现无法看到具体的KEY。没关系,实际上是生效的。这种设置是为了保证KEY的安全。
修改配置
- 点击「编辑 VPS 配置」打开
config.toml,在弹窗中粘贴你的推广信息(示例见下节)。 - 点击「编辑 模型配置」调整 你的LLM 服务、模型、提示词(示例见下节)。
-
点击「查看VPS状态」都会立即触发一次全量校验,并在日志面板记录结果。
-
点击「检查可用性」会即时测试网络、LLM、以及所有
valid_format链接。不过,平时我们可以依赖插件的自动巡检:遵循valid_interval_time周期,并在每个 VPS 之间等待valid_vps_time(随机值)以防访问被判为爬虫。我设置valid_interval_time是一个比较大的值,48小时,可对大部分人来说有点慢 (~ ̄▽ ̄)~ 这个按需修改吧!
示例配置
非常重要!
我个人还是倾向于将主要设置文件化,这样我们通过文本来维持功能,从而避免开发比较复杂的界面、增强代码可维护性和扩展性。我们的项目主要有2个重要的设置文件:config.toml和model.toml。
config.toml
在编辑VPS配置按钮里进行配置。基本操作如下:

直接按下面的配置粘贴进去就可以(以RackNerd VPS的推广为例):
[aff]
[aff.rn]
code = '4886' # 这是你的Affilicate ID。一般在自己的合作方的后台可以看到这个数字。
[url]
[url.rn]
sale_format = 'https://my.racknerd.com/aff.php?aff={aff}&pid={pid}'
valid_format = 'https://my.racknerd.com/cart.php?a=add&pid={pid}'
valid_interval_time = '172800' # 每 48 小时校验一次
valid_vps_time = '5-10' # 每个 VPS 之间随机等待 5-10 秒
[vps]
[vps.rn.923]
pid = '923'
human_comment = '比较基础的一款VPS' # 随便写点什么。也可以留空。我个人建议写一下,这样AI可以跟据你的喜好优化最终的推广话术。
[vps.rn.924]
pid = '924'
human_comment = '2025年黑色星期五活动。CPU弱点,但内存还行。预算有限的人推荐选。'
[vps.rn.925]
pid = '925'
human_comment = '2025年黑色星期五活动。作为主流机型推荐,内存、CPU、磁盘空间的均衡很好。'
关键字段说明:
aff.<厂商>.code:联盟 ID。url.<厂商>.sale_format:前台展示的推广链接模板,支持{aff}、{pid}占位符。url.<厂商>.valid_format:仅用于巡检 的链接,避免浪费真实的推广点击。url.<厂商>.valid_interval_time:多久跑一次全量巡检(秒)。url.<厂商>.valid_vps_time:单次巡检中不同 VPS 的请求间隔范围("5-10"表示随机 5~10 秒)。vps.<厂商>.<pid>:具体商品配置;human_comment会与 LLM 输出合并为推广语。
值得说明的是,这里的rn 只是一个厂商的示例命名;可以用 vps.hetzner.1234、vps.hwvps.88 等形式扩展。咱们这个项目对于厂家是没有限制的!
model.toml
prompt_valid、prompt_vps_info这些都是LLM Prompt,可以按自己的喜好更改的。这也是基于AI的好处呀!
[model_providers]
[model_providers.omg]
base_url = 'https://api.ohmygpt.com/v1'
model = "gpt-4.1-mini"
prompt_valid = '''
你是 AutoSaleVPS 的可卖性审核助手。你将收到一个 JSON,其中包含:
- vendor / pid / valid_url;
- HTTP status、精选响应头、正文摘要、HTML 截断片段;
- initial_state / initial_reason(启发式结论)以及 signals(关键字命中列表)。
请结合所有字段(尤其是 signals 与正文语义)判断该 VPS 是否还可下单,若信息不足可返回 unknown。
输出要求:
- 必须是单个 JSON 对象,不能带额外文字。
- 字段:status(online/offline/unknown)、reason(<=120字,概述证据)、confidence(0~1 可选),可扩展 evidence 数组列出关键线索。
- 若检测到“sold out”“out of stock”等负面信号,直接判定 offline;若能确认有购入按钮/库存提示再判定 online。
严格遵守 JSON 输出格式,避免自然语言描述。
'''
prompt_vps_info = '基于输入给出一段推销VPS的广告,字数限定在40字左右。推广要求贴合VPS的实际,不能无脑推。从建立博客、AI、RSS、Docker等4个应用场景评估VPS的推荐性。不要添加推广链接,我已经在其它地方展示推广链接。'
prompt_meta_layout = '请将输入JSON整理成固定的8行中文,依次为:厂商、CPU、内存、存储、带宽、网络、价格、地理位置。每一行必须使用“字段:内容”格式,字段名需与上述完全一致,如信息缺失则填“-”,不要输出其他文字。'
base_url和model要根据你的模型商来设置。如果您还没有模型商,可以点击OhMyGPT注册;我已经用了很久了,这一家应该还是相当不错的,各种功能的更新和支持都比较及时、全面。
当点击「保存配置」或执行巡检时,插件会按照这里的 base_url 和 model 调用 LLM 来:
- 解析销售页面 HTML,生成规范的元信息;
- 结合
human_comment与元信息产出 30 字左右的中文推广语 - 依据
prompt_valid的指令判断该 VPS 是否仍有库存
显然,prompt_*这一类参数完全是可自制化的,就是咱们和ChatGPT聊天时写的Prompt。这就给LLM的留下了巨大的发挥空间,也保证了AutoSaleVPS的智能化。
额外CSS
为了保证在不同WordPress主题下能够正常工作,我还设置了额外CSS,让用户可以自由定义VPS卡片的各种样式。这是我在博客https://blognas.hwb0307.com用的一个样式,大家可以适当参考:
样式1
/* 白天:保持 BlogNAS 正常主题的暖色按钮 */
.asv-root .asv-sale-btn {
background: linear-gradient(110deg, #ffe1b2, #ffb45c);
color: #4c1d06;
border: 1px solid rgba(255, 180, 92, 0.65);
box-shadow: 0 14px 30px rgba(255, 180, 92, 0.35);
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);
}
/* 夜间:针对 BlogNAS 的夜间模式开关和常见暗色标记,同时兜底系统暗色偏好 */
body.dark-mode .asv-root .asv-sale-btn,
body.night-mode .asv-root .asv-sale-btn,
body[data-theme='dark'] .asv-root .asv-sale-btn {
background: linear-gradient(125deg, #34d399, #0f9d58);
color: #032818;
border: 1px solid rgba(52, 211, 153, 0.8);
box-shadow: 0 16px 32px rgba(15, 157, 88, 0.4);
text-shadow: none;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode):not(.night-mode):not([data-theme='dark']) .asv-root .asv-sale-btn {
background: linear-gradient(125deg, #34d399, #0f9d58);
color: #032818;
border: 1px solid rgba(52, 211, 153, 0.8);
box-shadow: 0 16px 32px rgba(15, 157, 88, 0.4);
text-shadow: none;
}
}
/* 悬停/按下的细节,两种模式都共用 */
.asv-root .asv-sale-btn:hover {
transform: translateY(-2px) scale(1.01);
filter: brightness(1.02);
}
.asv-root .asv-sale-btn:active {
transform: translateY(0);
filter: brightness(0.98);
}
/* VPS 信息代码框高度 */
.asv-root .asv-meta-section .asv-meta-block,
.asv-root .asv-meta-editor__textarea.asv-meta-block {
min-height: 190px;
}
样式2
这是我比较喜欢的样式
/* AutoSaleVPS extra CSS — align with
blognas.hwb0307.com Argon style */
.asv-root {
padding: 0;
background: transparent;
}
.asv-vps-list { gap: 16px; }
.asv-card {
background: #fff;
border: 1px solid rgba(95, 141, 78, 0.18);
border-radius: 15px;
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.08);
padding: 18px;
transition: transform 0.2s ease, box-shadow 0.2s
ease, border-color 0.2s ease;
}
.asv-card:hover {
transform: translateY(-4px);
box-shadow: 0 18px 40px rgba(0, 0, 0, 0.12);
border-color: rgba(95, 141, 78, 0.32);
}
.asv-card__title strong { color: #2b3c2b; letter-
spacing: 0.4px; }
.asv-card__timestamp { color: #6b7c6b; }
.asv-status-pill--up {
background: rgba(95, 141, 78, 0.15);
color: #3f6c32;
border: 1px solid rgba(95, 141, 78, 0.35);
}
.asv-status-pill--down {
background: rgba(220, 86, 111, 0.12);
color: #c0392b;
border: 1px solid rgba(220, 86, 111, 0.3);
}
.asv-status-pill--idle {
background: rgba(95, 141, 78, 0.08);
color: #3f6c32;
border: 1px solid rgba(95, 141, 78, 0.25);
}
.asv-sale-btn {
background: linear-gradient(135deg, #5f8d4e,
#4a6e3c);
border: none;
border-radius: 999px;
color: #fff !important;
padding: 10px 16px;
box-shadow: 0 12px 24px rgba(95, 141, 78, 0.25);
transition: transform 0.15s ease, box-shadow 0.15s
ease, filter 0.15s ease;
}
.asv-sale-btn:hover {
transform: translateY(-1px);
box-shadow: 0 14px 28px rgba(95, 141, 78, 0.3);
filter: brightness(1.03);
}
.asv-card__promo,
.asv-meta-block {
background: #f6f8f4;
border: 1px dashed rgba(95, 141, 78, 0.2);
border-radius: 12px;
padding: 10px 12px;
color: #334;
}
.asv-card__note {
background: rgba(95, 141, 78, 0.08);
border-radius: 10px;
padding: 8px 10px;
color: #2b3c2b;
}
/* Dark mode friendly (site uses html.darkmode) */
html.darkmode .asv-card {
background: #22282b;
border-color: rgba(95, 141, 78, 0.25);
box-shadow: 0 10px 28px rgba(0, 0, 0, 0.35);
}
html.darkmode .asv-card__promo,
html.darkmode .asv-meta-block {
background: #1a1f22;
color: #dfe7dc;
border-color: rgba(95, 141, 78, 0.35);
}
html.darkmode .asv-card__timestamp,
html.darkmode .asv-card__note { color: #cdd7cc; }
小结
AutoSaleVPS项目是比较有趣的,也是我第一个利用LLM主导开发的开源项目。整个过程还是比较顺利的。我用的工具是Codex,模型是GPT-5.1-CODEX,推理强度为Medium。开发得比较仓促,基本的功能有,但bug估计少不了。还请大家多多使用哈,有什么bug可以在issues里反馈,我会看情况跟进!
---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍
感谢分享,回头我也试试
加油 ~ 欢迎交流 (~ ̄▽ ̄)~