Article
又往 AI 助手里塞了一个工具:现在它能帮我出小红书配图了
上一篇写了怎么把本地语音识别 SenseVoice 接进 pi——有朋友在评论区问:「除了转录,pi 还能接什么?」
问得好。今天继续。
这次接进去的,是一个我做内容创作时几乎每天都用的功能:出小红书配图。
问题从哪里来
我在做播客和公众号内容,每期出完稿子,都要给小红书配几张图。
以前的流程是:打开某个图片生成网站,登录,写 prompt,等待,下载,看效果不对,再改……来回三四轮,半小时就过去了。
更烦的是:我写稿在一个地方,出图在另一个地方,两件事要来回切换。
思路一旦被打断,就很难找回来了——你们有没有这种感觉?写到一半,切出去做别的事,回来之后盯着屏幕半天,不知道刚才写到哪了。
所以我想把出图这件事,也搬到 pi 的对话窗口里。
工具选型:用哪个 API?
图片生成 API 选的是 gpt-image-2,通过 berrycode.codes 调用。
选它有几个原因:
- 出图质量对内容配图来说够用,不需要 Midjourney 级别的精细度
- API 调用简单,返回 base64,直接解码存文件
- 价格合理,不是按图片收费,而是按 token
参数上,小红书竖版封面选 1152×1536(接近 3:4),横版、方版可以按需切换。
踩了一个让我崩溃的坑
接入过程其实不复杂,但有一个坑耗了我将近一个小时。
明明 API key 是对的,请求格式也是对的,就是一直返回 502。
排查了半天,最后翻到了自己之前写的一份本地代理代码——里面有一行注释:
必须带
User-Agent: BerryCode-Image-Chat-Mac/1.0和Connection: close,否则 502。
就这两个 header。
用 Python 的 urllib 发请求,加上这两个 header,还是 502。换成 curl,立刻好了。
最后的实现是用 subprocess.run(["curl", ...]) 来发请求——不优雅,但稳定。
有时候工程上最稳的方案,不是最优雅的那个。
Extension 的实现逻辑
和上期 SenseVoice 一样,整体分两层:
Python 脚本:负责调用 API,接收 prompt 和尺寸参数,把返回的 base64 图片解码、存文件,输出文件路径。
TypeScript Extension:注册成 pi 工具,描述里告诉 AI 什么场景用它,参数里有一个 size 是必填的——故意不给默认值。
为什么要让 size 必填?
因为小红书封面、正文配图、公众号头图,尺寸要求完全不同。如果工具自己随便选,大概率选错。强制让 AI 先问用户,才能确保出来的图是对的。
这是一个小设计:用参数约束来强制 AI 做正确的事。
现在的体验
整好之后,流程变成这样:
我在 pi 里写稿,写到一半,顺口说一句:「帮我给这期播客出一张小红书封面,主题是 AI 算力,科技感,深色背景。」
pi 问我:「封面还是正文图?建议封面用 1152×1536,你确认一下。」
我回:「封面,用这个尺寸。」
图出来了,存在 ~/Documents/xiaohongshu-cards/,继续写稿。
没有切换,没有等待,没有打断。
如果出来不满意,跟它说「颜色太暗,再出一张,亮一点」,它接着改,不需要我重新打开任何东西。
文件结构
~/.pi/agent/
├── extensions/
│ ├── sensevoice.ts ← 第一期接进去的
│ └── xiaohongshu_card.ts ← 这期接进去的
└── xiaohongshu/
└── config.json ← 存 API key
图片输出:
~/Documents/xiaohongshu-cards/
└── xxxxxx.png
说几句题外话
有人说:这个功能直接用 ChatGPT 不也能出图吗,为什么要自己接?
原因有三:
一是流程不断。我在 pi 里工作,不想为了出一张图再切到另一个产品。
二是可控。API key 是自己的,存储路径是自己的,出来的图直接到本地文件夹,不需要手动下载。
三是可组合。今天只是出图,但明天我可以让 pi 出图之后,自动帮我写配套的小红书文案,再自动存到对应的项目文件夹——这种组合,只有自己接工具才能做到。
接下来还会接更多。
下一期预告:把 AI 配音工具接进来——用克隆的声音,把口播稿直接合成带字幕的视频。
感兴趣的点个关注,我写好就发。
本系列持续更新,记录把各种工具接进 pi 的完整过程,包括踩过的坑。
评论区告诉我你最想接的下一个工具,我来试。