feat(article): 更新文章内容并集成CDN图片上传功能
- 将文章中的本地图片路径替换为CDN链接 - 修改文章引子部分,更新案例描述和内容细节 - 添加即梦AI图片生成命令配置文件 - 添加七牛云OSS上传命令配置文件和上传脚本 - 创建七牛云存储凭证文档 - 更新OpenClaw相关内容和图片引用链接
This commit is contained in:
parent
95e1129fd2
commit
fdf5cc278f
54
.claude/commands/generate-image.md
Normal file
54
.claude/commands/generate-image.md
Normal file
@ -0,0 +1,54 @@
|
||||
# 即梦 AI 图片生成
|
||||
|
||||
使用即梦 AI(火山引擎)生成图片。
|
||||
|
||||
## 使用方式
|
||||
|
||||
用户会提供:
|
||||
1. **prompt**:图片描述(中文)
|
||||
2. **output_path**:输出路径(可选,默认保存到当前工作目录)
|
||||
|
||||
## 执行步骤
|
||||
|
||||
1. 激活项目虚拟环境:`source .venv/bin/activate`
|
||||
2. 调用 `scripts/jimeng_gen.py` 生成图片
|
||||
3. 即梦 API 仅支持 **1024x1024** 正方形尺寸
|
||||
4. 如果用户需要 16:9 比例,先生成 1024x1024,再用 Pillow 居中裁剪为 1024x576
|
||||
5. 展示生成的图片给用户
|
||||
|
||||
## 调用示例
|
||||
|
||||
```bash
|
||||
source .venv/bin/activate && python scripts/jimeng_gen.py "图片描述prompt" "输出路径.png"
|
||||
```
|
||||
|
||||
## 16:9 裁剪(如需要)
|
||||
|
||||
```bash
|
||||
source .venv/bin/activate && python -c "
|
||||
from PIL import Image
|
||||
img = Image.open('输出路径.png')
|
||||
w, h = img.size
|
||||
new_h = int(w * 9 / 16)
|
||||
top = (h - new_h) // 2
|
||||
img.crop((0, top, w, top + new_h)).save('输出路径.png')
|
||||
"
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 即梦 API **仅支持 1024x1024**,其他尺寸会提交成功但生成失败
|
||||
- 需要非正方形图片时,先生成方形再裁剪
|
||||
- 提交后需要轮询等待结果,通常 5-10 秒完成
|
||||
- 脚本位于 `scripts/jimeng_gen.py`,密钥已内置
|
||||
- 虚拟环境位于 `.venv/`,已安装 `requests` 和 `Pillow`
|
||||
|
||||
## API 凭证(已内置于脚本)
|
||||
|
||||
- Endpoint: `https://visual.volcengineapi.com`
|
||||
- Region: `cn-north-1`
|
||||
- Service: `cv`
|
||||
- 模型: `jimeng_t2i_v40`(即梦图片生成 4.0)
|
||||
- 签名: HMAC-SHA256 V4
|
||||
|
||||
$ARGUMENTS
|
||||
99
.claude/commands/upload-qiniu.md
Normal file
99
.claude/commands/upload-qiniu.md
Normal file
@ -0,0 +1,99 @@
|
||||
# 七牛云 OSS 上传
|
||||
|
||||
将本地文件上传到七牛云 CDN 存储。
|
||||
|
||||
## 使用方式
|
||||
|
||||
用户会提供:
|
||||
1. **file_path**:要上传的本地文件路径(支持单个文件或目录)
|
||||
2. **prefix**:OSS 存储路径前缀(可选,默认 `self-media/`)
|
||||
|
||||
## 执行步骤
|
||||
|
||||
1. 激活项目虚拟环境:`source .venv/bin/activate`
|
||||
2. 使用七牛 Python SDK 上传文件
|
||||
3. 返回 CDN 访问链接
|
||||
|
||||
## 单文件上传
|
||||
|
||||
```bash
|
||||
source .venv/bin/activate && python -c "
|
||||
from qiniu import Auth, put_file
|
||||
import os
|
||||
|
||||
AK = 't1PIPGcvBY9lJVXFZFb48maTQsGGhvLsR5QQlNq0'
|
||||
SK = 'KGooFdF5eCLdCIMCOD6x5ofMzu4vYE17T5Mvp9qC'
|
||||
BUCKET = 'union-saas'
|
||||
CDN = 'https://cdn.union.jxyunge.com'
|
||||
|
||||
local_path = '本地文件路径'
|
||||
key = 'self-media/远程存储路径'
|
||||
|
||||
q = Auth(AK, SK)
|
||||
token = q.upload_token(BUCKET, key, 3600)
|
||||
ret, info = put_file(token, key, local_path, version='v2')
|
||||
|
||||
if info.status_code == 200:
|
||||
print(f'上传成功: {CDN}/{key}')
|
||||
else:
|
||||
print(f'上传失败: {info}')
|
||||
"
|
||||
```
|
||||
|
||||
## 批量上传目录
|
||||
|
||||
```bash
|
||||
source .venv/bin/activate && python scripts/upload_qiniu.py
|
||||
```
|
||||
|
||||
脚本 `scripts/upload_qiniu.py` 会上传 `articles/001/images/` 下所有 PNG 文件。
|
||||
|
||||
## 自定义批量上传
|
||||
|
||||
```bash
|
||||
source .venv/bin/activate && python -c "
|
||||
from qiniu import Auth, put_file
|
||||
import os, glob
|
||||
|
||||
AK = 't1PIPGcvBY9lJVXFZFb48maTQsGGhvLsR5QQlNq0'
|
||||
SK = 'KGooFdF5eCLdCIMCOD6x5ofMzu4vYE17T5Mvp9qC'
|
||||
BUCKET = 'union-saas'
|
||||
CDN = 'https://cdn.union.jxyunge.com'
|
||||
|
||||
local_dir = '本地目录路径'
|
||||
prefix = 'self-media/自定义前缀/'
|
||||
|
||||
q = Auth(AK, SK)
|
||||
for f in sorted(glob.glob(os.path.join(local_dir, '*'))):
|
||||
name = os.path.basename(f)
|
||||
key = prefix + name
|
||||
token = q.upload_token(BUCKET, key, 3600)
|
||||
ret, info = put_file(token, key, f, version='v2')
|
||||
status = '成功' if info.status_code == 200 else '失败'
|
||||
print(f'[{status}] {name} -> {CDN}/{key}')
|
||||
"
|
||||
```
|
||||
|
||||
## 在 Markdown 中替换图片链接
|
||||
|
||||
上传后,将文章中的本地图片路径替换为 CDN 链接:
|
||||
- 本地路径格式:``
|
||||
- CDN 链接格式:``
|
||||
|
||||
## 七牛凭证
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|------|
|
||||
| 上传地址 | `https://up-z0.qiniup.com` |
|
||||
| AK | `t1PIPGcvBY9lJVXFZFb48maTQsGGhvLsR5QQlNq0` |
|
||||
| SK | `KGooFdF5eCLdCIMCOD6x5ofMzu4vYE17T5Mvp9qC` |
|
||||
| CDN 域名 | `https://cdn.union.jxyunge.com` |
|
||||
| 空间名 | `union-saas` |
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 虚拟环境 `.venv/` 已安装 `qiniu` SDK
|
||||
- 上传同名文件会覆盖
|
||||
- CDN 链接格式:`https://cdn.union.jxyunge.com/{key}`
|
||||
|
||||
$ARGUMENTS
|
||||
@ -4,19 +4,21 @@
|
||||
> 分类:技术解读 / 科普
|
||||
> 作者:老邓唠AI
|
||||
|
||||

|
||||

|
||||
|
||||
## 引子:一觉醒来,AI 帮我省了 4200 美元
|
||||
## 引子:律所用它打官司,淘宝店主用它盯竞品
|
||||
|
||||
2026 年 2 月的一个清晨,软件工程师 AJ Stuyvenberg 醒来后发现,他的 AI 助手在他睡觉的 8 个小时里,自动与三家汽车经销商进行了多轮邮件砍价,为他想买的 2026 款现代汽车谈下了 **4200 美元的折扣**。
|
||||
2026 年 2 月,上海某律所合伙人张律师做了一个大胆的实验:他让一只"龙虾"接管了自己的工作流。
|
||||
|
||||
他甚至没有下达过具体指令。
|
||||
这只龙虾每天自动抓取裁判文书网的最新判例,分析对手律所过去三年的胜率数据,甚至能模拟庭审对抗——把对方律师可能的论点逐条拆解,提前准备反驳策略。**以前助理团队要干两周的案件调研,龙虾一个晚上就跑完了。**
|
||||
|
||||
这个 AI 助手的名字叫 **OpenClaw**——一只龙虾。
|
||||
这只龙虾的名字叫 **OpenClaw**。
|
||||
|
||||
而更疯狂的是:另一位用户 Hormold 的龙虾,在没有明确授权的情况下,自己翻阅了一封保险拒赔邮件,引用保单条款撰写法律驳回函,迫使保险公司重新启动调查。
|
||||
而在杭州,一位淘宝店主让龙虾同时监控拼多多、京东、抖音三个平台的竞品价格,**实时自动调整自己的定价策略**——竞品降了 5 块,龙虾 10 秒内就把自己的价格跟上,还顺手改了详情页的促销文案。另一位闲鱼买家更绝:让龙虾同时跟 **8 个卖家砍价**,最终以低于心理价位 30% 的价格拿下了一台二手 MacBook。
|
||||
|
||||
**这不是科幻。这是 2026 年正在发生的事。**
|
||||
**他们甚至不需要盯着屏幕。龙虾在后台 24 小时自己干活。**
|
||||
|
||||
这不是科幻。这是 2026 年正在发生的事。
|
||||
|
||||
今天,老邓带你深入拆解这只龙虾,以及围绕它诞生的 12 个"兄弟"——从 4000 行代码的极简龙虾,到 10 块钱开发板上的嵌入式龙虾,再到中国大厂的国产龙虾军团。
|
||||
|
||||
@ -24,7 +26,7 @@
|
||||
|
||||
## 一、OpenClaw:那只改变游戏规则的龙虾
|
||||
|
||||

|
||||

|
||||
|
||||
### 它不是聊天机器人,是"数字员工"
|
||||
|
||||
@ -116,7 +118,7 @@ OpenClaw 的问题催生了反思,反思催生了一批"兄弟"——它们要
|
||||
|
||||
### 3.1 Nanobot —— 4000 行代码的极简龙虾
|
||||
|
||||

|
||||

|
||||
|
||||
| 维度 | 详情 |
|
||||
|------|------|
|
||||
@ -131,7 +133,7 @@ OpenClaw 的问题催生了反思,反思催生了一批"兄弟"——它们要
|
||||
|
||||
### 3.2 PicoClaw —— 10 美元开发板上的龙虾
|
||||
|
||||

|
||||

|
||||
|
||||
| 维度 | 详情 |
|
||||
|------|------|
|
||||
@ -144,7 +146,7 @@ OpenClaw 的问题催生了反思,反思催生了一批"兄弟"——它们要
|
||||
|
||||
### 3.3 ZeroClaw —— Rust 写的安全堡垒
|
||||
|
||||

|
||||

|
||||
|
||||
| 维度 | 详情 |
|
||||
|------|------|
|
||||
@ -160,7 +162,7 @@ OpenClaw 的安全是"门上加锁",ZeroClaw 是"用钢筋混凝土重建房
|
||||
|
||||
### 3.5 memU —— 知识图谱记忆龙虾
|
||||
|
||||

|
||||

|
||||
|
||||
| 维度 | 详情 |
|
||||
|------|------|
|
||||
@ -178,11 +180,11 @@ OpenClaw 的记忆是平铺式日志,memU 把记忆做成知识图谱——自
|
||||
|
||||
## 四、龙虾全家桶:中国大厂篇
|
||||
|
||||

|
||||

|
||||
|
||||
### 4.1 LobsterAI —— 网易有道
|
||||
|
||||

|
||||

|
||||
|
||||
名字就叫"龙虾 AI",国内最接近 OpenClaw 的产品。两个杀手锏:
|
||||
- **有 GUI 图形界面**:OpenClaw 纯命令行,小白用不来;LobsterAI 降低了门槛
|
||||
@ -192,7 +194,7 @@ OpenClaw 的记忆是平铺式日志,memU 把记忆做成知识图谱——自
|
||||
|
||||
### 4.2 HiClaw —— 阿里 Higress
|
||||
|
||||

|
||||

|
||||
|
||||
HiClaw 是目前**安全架构最先进**的方案。核心设计:
|
||||
|
||||
@ -238,7 +240,7 @@ HiClaw 是目前**安全架构最先进**的方案。核心设计:
|
||||
|
||||
### 选龙虾决策树
|
||||
|
||||

|
||||

|
||||
|
||||
**按你是谁来选:**
|
||||
- **小白用户** → **Nanobot**,4000 行代码读懂 Agent 是怎么回事
|
||||
@ -258,7 +260,7 @@ HiClaw 是目前**安全架构最先进**的方案。核心设计:
|
||||
|
||||
## 六、安全避坑指南:养龙虾的 5 条铁律
|
||||
|
||||

|
||||

|
||||
|
||||
经过上面的分析,你应该已经明白:**龙虾越强大,风险越大。** 以下是养龙虾的 5 条铁律:
|
||||
|
||||
|
||||
6
passport/七牛.md
Normal file
6
passport/七牛.md
Normal file
@ -0,0 +1,6 @@
|
||||
七牛上传地址 https://up-z0.qiniup.com
|
||||
七牛云存储AK t1PIPGcvBY9lJVXFZFb48maTQsGGhvLsR5QQlNq0
|
||||
七牛云存储SK KGooFdF5eCLdCIMCOD6x5ofMzu4vYE17T5Mvp9qC
|
||||
七牛云存储地址 https://cdn.union.jxyunge.com
|
||||
七牛云存储空间名 union-saas
|
||||
|
||||
48
scripts/upload_qiniu.py
Normal file
48
scripts/upload_qiniu.py
Normal file
@ -0,0 +1,48 @@
|
||||
"""上传图片到七牛云 OSS"""
|
||||
|
||||
import os
|
||||
import glob
|
||||
from qiniu import Auth, put_file
|
||||
|
||||
ACCESS_KEY = 't1PIPGcvBY9lJVXFZFb48maTQsGGhvLsR5QQlNq0'
|
||||
SECRET_KEY = 'KGooFdF5eCLdCIMCOD6x5ofMzu4vYE17T5Mvp9qC'
|
||||
BUCKET_NAME = 'union-saas'
|
||||
CDN_DOMAIN = 'https://cdn.union.jxyunge.com'
|
||||
UPLOAD_PREFIX = 'self-media/001/'
|
||||
|
||||
|
||||
def upload_file(local_path, key):
|
||||
"""上传单个文件到七牛"""
|
||||
q = Auth(ACCESS_KEY, SECRET_KEY)
|
||||
token = q.upload_token(BUCKET_NAME, key, 3600)
|
||||
ret, info = put_file(token, key, local_path, version='v2')
|
||||
if info.status_code == 200:
|
||||
url = f'{CDN_DOMAIN}/{key}'
|
||||
print(f' OK {os.path.basename(local_path)} -> {url}')
|
||||
return url
|
||||
else:
|
||||
print(f' FAIL {os.path.basename(local_path)}: {info}')
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
img_dir = os.path.join(os.path.dirname(__file__), '..', 'articles', '001', 'images')
|
||||
files = sorted(glob.glob(os.path.join(img_dir, '*.png')))
|
||||
|
||||
results = {}
|
||||
for f in files:
|
||||
name = os.path.basename(f)
|
||||
key = UPLOAD_PREFIX + name
|
||||
url = upload_file(f, key)
|
||||
if url:
|
||||
results[name] = url
|
||||
|
||||
print(f'\n===== 上传完成: {len(results)}/{len(files)} =====')
|
||||
for name, url in results.items():
|
||||
print(f'{name}: {url}')
|
||||
|
||||
return results
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Loading…
Reference in New Issue
Block a user