Java 21 + Spring Boot 3.5 + Spring AI Alibaba · Apache-2.0 全部开源 · 一个 JAR 交付、数据零出网
做 Agent 的人大概都有个体感:原子能力早就堆得差不多了——联网搜索、抓网页、文生图、HTML 渲染成图、结构化记忆、定时任务、技能运行时,一样不缺。真正难的从来不是"再加一个工具",而是把这些散装能力编排成一条能干完整活的流水线。
MateClaw 1.8.0 干的就是这件事。这个版本把数字员工从"一箱工具"推向"能把活干完的人":一句话简报,就能产出一篇躺进公众号草稿箱的图文,或一组可直接发布的小红书竖版卡片——用你自己的口吻、过了可度量的去 AI 化、扫过合规、还记进了台账。
先声明一件重要的事:MateClaw 是 Apache-2.0 全部开源的——后端、前端、桌面端、网页组件、内置技能,一个都不留在闭源里,没有功能墙。下面这篇按技术视角把 1.8.0 拆开讲。
一、内容工作室:把原子能力编排成一条流水线
内容工作室是 1.8.0 的招牌场景,也是 MateClaw第一个完全用自身原子能力端到端搭起来的场景——没有为它写死任何"内容专用"的黑盒逻辑,它就是把已有工具按顺序编排起来。
预置的「内容工作室」员工出厂就绑好了对应技能与工具,system prompt 固化了七段工作流:
七段里有几处值得单独点名的技术细节:
- ② 搜集:公众号文章 URL 走专用的
wechat_article_extract工具,把mp.weixin.qq.com页面清洗成结构化的{标题, 作者, 时间, 正文, 图片},让员工做角度差异化而不是洗稿。 - ③ 成文:遵循你的人设与文风记忆——第二篇起就不必再交代口吻,记忆里存着。
- ⑦ 交付:在外向、不可逆的那一步停下来等你确认,任何东西离开机器前都先过审。
首批两个平台一等公民:
| 平台 | 技能 | 产出 |
|---|---|---|
| 微信公众号 | gzh_article | 内联样式 HTML 文章(公众号编辑器不吃<style>,一切样式内联)、按头图尺寸的封面、小节配图、合规自查——可粘贴交付,或经gzh_publish直接推进草稿箱。 |
| 小红书 | xhs_note | 以图为主的成品包:标题四件套 + 碎句正文配话题标签,以及至少 3 张竖版 3:4 卡片,由 HTML 模板渲染并在线预览;xhs_package硬校验「≥3 图」。 |
因为排版本质就是 HTML,模板可以由 AI 对话创建与打磨:先渲染出预览 PNG、看着图改、满意再定稿,可复用的自定义模板沉淀进你自己的可编辑技能(内置技能保持不可变)。
下图是内容工作室在控制台里由一条简报产出一篇公众号文章——左边对话推进,右侧「运行总览」里能看到实时生成的封面等文件:
二、去 AI 化:一条可度量的闭环,而不是玄学
整个场景的差异化灵魂,是"去 AI 化"被做成了可度量、可回归的东西,而不是往 prompt 里塞一句"写得像人一点"。
核心是一个启发式脚本ai_trace_score——纯 Python、无 LLM、确定性可回归,给文本打 0–100 分,并返回具体信号与位置:
六个信号覆盖了机器味最典型的几种来源:句长方差过低(整齐划一)、模板连接词密度、套话短语、列表/破折号滥用、段落机械等长、以及具体性缺失(数字/专名/第一人称太少)。
员工据此针对信号定向改写——口语化、上第一人称、补具体细节、句长打散、删套话、按平台调口吻(公众号沉稳、小红书活泼)——再复评,循环到达标或触及max_rounds = 3。到上限就取当前最好版本并如实告知分数,而不是无限烧 token。
需要说清楚:这是启发式质量增强,不保证绕过任何 AI 检测器——技能与产出都会明确标注这一点。老老实实,比吹能过检测靠谱。
三、发布链:为"连发三个月"而逐行加固
发一次草稿很容易;连续三个月每天发,坑才会一个个冒出来。1.8.0 对发布链逐行审计:
逐条说下工程细节:
- 正文图不再裂。微信不抓正文里的外链图,所以一篇满是
/api/v1/files/generated/…的草稿发出去正文图全裂。现在发布链解析 HTML,把每张正文图上传进微信作为图文内图片并改写src;上传失败的图保留原src并回报,而不阻断整篇。 - 密钥加密落库。
weixinoa.app_secret等敏感设置以AES-GCM 加密存储,密钥取自环境变量MATECLAW_SETTING_KEY(未配置回退到机器派生密钥),密文带enc:v1:前缀,旧明文读时透明兼容、下次写入自动升级。 - 一个微信服务、一个 token。微信同 appId 只有一个有效 token 且取 token 有限额。现在服务实例按 appId 缓存、token持久化,重复调用与多实例部署不再互踩;密钥变更即失效缓存。
- 瞬时失败重试,已知错误说人话。对可重试的微信错误码指数退避重试,并把已知错误码翻译成可操作的中文提示——比如 IP 白名单错误直接提示"把服务器公网 IP 加进公众号后台白名单"。
- 草稿永远有封面。封面解析不到时渲染一张内置占位封面,保证草稿仍能落地,并在返回里如实提示用了占位封面。
发布保持草稿箱优先:群发/发表是外向、不可逆且受频次限制的动作,由 MateClaw 出草稿、你在后台点"发表";可选的publish动作走 approval 审批流。
四、内容日历:把合规与台账焊进交付工具本身
凡是"这条也让模型顺手记一下"的设计,薄弱点就在模型会忘。1.8.0 把合规与台账焊进交付工具,不再依赖模型记得调:
- 交付 = 扫 + 记。
gzh_package与xhs_package交付时跑服务端合规扫描(极限词 / 诱导词 / 承诺收益词),交付成功后自动落台账。高危命中在返回里显式标出,高危发布默认拦截。 - 选题指纹防重复。每条台账带一个归一化的选题指纹;
content_item check_recent回看近 N 天的packaged/published记录(忽略draft/failed),让每日定时任务不再选到你已经做过的题。 - 个人违禁词并入。合规扫描把你结构化记忆里的
banned_words作为额外类目,叠加在内置词库之上。 - 只读的内容日历页。新页列出每条台账——平台、标题、状态、选题、预览链接、时间——顶部带状态计数卡。ID 全程按字符串处理(雪花精度约定)。
五、浏览器 Agent:按引用去看,不再对着像素猜
用截图坐标驱动真实浏览器很脆:页面一重排,点击就落空。1.8.0 给浏览器 Agent 一种结构化的看与做的方式:
- 无障碍树 ref 快照。Agent 把页面读成一棵紧凑的无障碍树,每个可交互元素拿到一个稳定的
ref句柄。 - 按 ref 交互。点击、输入、选择都针对
ref指向的元素,而不是像素——一次操作能挺过重排,比坐标寻找可靠得多。 - 真实浏览器的隐私护栏。用用户真实浏览器会话有实打实的风险,所以被隐私护栏围起来,并保留一个受控的 CDP(Chrome DevTools Protocol)逃生舱应对安全路径够不着的场景——显式启用,而非默认。
六、运行时加固 + 更快更轻
一批 Agent 运行时的加固,让长的、工具密集的运行不脱轨:
- 注意力锚定与环境感知——每个工具带上溯源(来自哪个 MCP 服务或技能),skill 约束被固定在模型注意力里不随长跑漂走,员工还会收到关于自身环境的事件通知。
- 工具调用循环护栏——同一工具用同样参数在紧循环里反复调会被识别并打断,而不是静默烧掉迭代预算。
- 改动后校验提醒——在一次会改变状态的操作(写文件、改代码)之后,Agent 被提醒去校验而不是盲目宣布成功。
性能与工程侧:
- 快加载:按需引入 Element Plus 并对未用组件 tree-shake,加上懒加载的 3D 模型查看器与修掉的 preload 泄漏,把初始加载包体砍掉约 78%,首字更快。
- 聊天上下文占用面板:按来源拆分谁在占用上下文窗口(记忆 / Wiki / 身份 / 工具 / 历史),让你看清窗口为什么满了。
- Wiki 跨知识库 wikilink:
[[wikilink]]现在能跨知识库解析,原始素材支持批量操作。 - MCP 进度通知:长跑 MCP 工具流式回报进度,不再一黑到底。
- 新增供应商:火山方舟 Agent Plan 加入供应商序列;技能 Python 脚本可配置pip 源(适配离线/内网)。
- 底座升级:公开 Docker 栈切到PostgreSQL 16,后端升级到Spring Boot 3.5.16。
七、升级与自部署
配置完全兼容。员工 / 技能 / Wiki / 渠道 / 定时任务 / 工作流 / 触发器 / 目标全部原样保留。Flyway 新增一张表mate_content_item,三方言(H2 / MySQL / KingbaseES-PostgreSQL)各一份,已有库自动 baseline。
从 v1.7.0 升上来,几点要注意:
- 内容工作室按需启用——升级后出现预置员工及其技能(
gzh_article、xhs_note、deai_humanize),不主动跟它说话就什么都不跑。 - 要发公众号,在设置里配
app_id/app_secret(现在加密落库)。请把MATECLAW_SETTING_KEY设成一个稳定密钥并做好备份:它用来解密已有密文,丢了就得重填密钥。别忘了把服务器公网 IP 加进公众号白名单。 - 小红书无官方发布 API——产出可直接发布的卡片素材包(默认),浏览器辅助上传作为可选、需审批的增强,不绕过任何风控或人机验证。
自己跑起来只要一个 JAR,或者一条 Docker 命令:
# 源码构建cdmateclaw-server&&exportDASHSCOPE_API_KEY=your-key mvn spring-boot:run# 端口 18088,H2 文件库# 或 Docker(PostgreSQL 16 + SearXNG + 后端)cp.env.example .env# 填 DASHSCOPE_API_KEY 等dockercompose up-d# 宿主机 18080前端pnpm build会打进后端 JAR 的static/,所以生产就是一个java -jar,数据全程零出网。
结语:从"它有工具"到"它把事办了"
一箱工具,等着被拿起来;一个能干活的人,把活干完。1.8.0 是 MateClaw 第一次用自身原子能力端到端干完一整件活——从选题到草稿箱,外向那一步为你的确认而停,每次交付都被扫描、被记录。也是浏览器 Agent 不再对着像素猜、开始对着真实存在的东西下手的版本。
来源: github或者gitee搜索 MateClaw