679 字
3 分钟
给 WorkBuddy 写个图片搜索 Skill
为什么会有这个 Skill
之前给文章配图,流程是这样的:
- 打开 Unsplash 网站
- 搜索关键词(中文搜不到换英文)
- 翻几页找合适的图
- 下载到本地
- 调整尺寸(博客文章一般 600px 宽)
- 写 Markdown 链接
- 找摄影师信息写致谢
一篇文章配图要 5-10 分钟,效率太低。
于是写了这个 tool-image Skill,一句话搞定所有事情。
Skill 实现原理
tool-image Skill 基于 Unsplash API 实现。
工作流程:
- 接收关键词(英文)
- 调用 Unsplash Search API
- 返回第一张图片的 Markdown 格式(带摄影师致谢)
- 自动限制图片尺寸为 600×400px
完整代码
Skill 文件:workbuddy\skills\tool-image\tools\image_search.py
#!/usr/bin/env python3
import argparse
import warnings
import sys
import requests
from urllib.parse import quote
warnings.filterwarnings("ignore")
ACCESS_KEY = "占位符"
def image_search(query: str, count: int = 1) -> str:
clean_query = quote(" ".join(query.split()[:5]))
url = "https://api.unsplash.com/search/photos"
params = {
"query": clean_query,
"per_page": count,
"client_id": ACCESS_KEY
}
try:
res = requests.get(url, params=params, timeout=15)
res.raise_for_status()
data = res.json()
except Exception as e:
return f"Error: {str(e)}"
results = data.get("results", [])
if not results:
return f"No images found for query: {clean_query}"
output = []
for item in results[:count]:
img_url = item["urls"]["regular"] + "?w=600&h=400&fit=crop&q=80"
author = item["user"]["name"]
profile = item["user"]["links"]["html"]
markdown = (
f"\n"
f"*Photo by [{author}]({profile}) on [Unsplash](https://unsplash.com)*"
)
output.append(markdown)
return "\n\n".join(output)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Search Unsplash images")
parser.add_argument("--object", required=True)
parser.add_argument("--number", type=int, default=1)
args = parser.parse_args()
result = image_search(args.object, args.number)
print(result)
API Key 说明
ACCESS_KEY = "占位符"
可以直接使用,也可以替换成自己的。
申请方式:
- 注册 Unsplash
- 打开 https://unsplash.com/developers
- 创建应用
- 替换 Key
执行脚本
脚本路径: WorkBuddy\Claw\scripts\search_image.ps1
param(
[Parameter(Mandatory=$true)]
[string]$Object,
[int]$Number = 1
)
python "image_search.py" --object $Object --number $Number
使用方式:
pwsh -NoProfile -ExecutionPolicy Bypass -File "search_image.ps1" -Object "artificial intelligence" -Number 1
实际案例演示
案例 1:《研究生奴隶》配图
关键词:
university student studying library
效果如下:
Photo by Dominic Kurniawan Suryaputra on Unsplash
案例 2:《Python 与 C 混编》配图
关键词:
python c programming code
效果如下:
Photo by Hitesh Choudhary on Unsplash
关键词选择技巧
| 搜索词 | 结果质量 | 原因 |
|---|---|---|
| 研究生 | ❌ 差 | 太抽象 |
| university student | ✅ 中 | 不够具体 |
| university student studying library | ✅✅ 好 | 场景+动作 |
原则
- 英文优先
- 场景词优先
- 动作词优先
- 越具体越好
封面图 vs 内插图
封面图
image: './image/YYMMDD_01.ext'
- 本地存储
- 永久有效
- 占空间
内插图

- 外链
- 快速
- 不占空间
- 依赖网络
版权说明
所有图片来自 Unsplash:
- 免费使用(商用+个人)
- 无需授权
- 建议标注摄影师
故障排查
Key 未设置
$env:UNSPLASH_ACCESS_KEY = "你的AccessKey"
搜不到图
- 换英文
- 增加具体描述
尺寸问题
?w=600&h=400&fit=crop
Skill 配置
路径:
workbuddy\skills\tool-image\
核心文件:
workbuddy\skills\tool-image\tools\image_search.py
总结
这个 Skill 本质上是:
把“找图 → 下载 → 处理 → 写 Markdown”自动化
效果:
- 5–10 分钟 → 10 秒
- 输出直接可用
- 自动符合版权规范
现在写文章,配图不再是负担。

