[{"content":"安全公司 Zenity Labs 披露了针对 Amazon Bedrock AgentCore 的漏洞利用链,命名 AgentCorruption。攻击前提低得吓人:只要对某个公开可访问的智能体有聊天权限,一条提示词就能接管同一 AWS 账户和区域内的所有 AgentCore 智能体。\n三步攻击链 第一步,经 IMDS 窃凭证。 AWS 实例在内部地址 169.254.169.254 跑实例元数据服务,提供临时凭证,拿到即可冒充该实例。AgentCore 缺少应有的隔离——研究员用 AWS 开源框架 Strands 建了个测试智能体,用平实语言让它「查询元数据服务、把结果发到外部服务器」,它照做。原文最狠的一句:「我们本应对抗的沙箱边界根本不存在。」移除网络工具防不住,缺陷在平台本身。元数据服务还暴露了内部服务密钥和一个不属于该账户的内部 S3 预签名 URL。\n第二步,横向接管。 根因是 AgentCore 默认执行角色的权限不限定在单个智能体,而是覆盖同账户同区域的所有智能体(读、写、删)。攻击者可以列出每个智能体、数秒内下载其代码包(常含被遗忘的密码、API 密钥)、调用任意智能体、读取全部用户与智能体的私密对话——从公开客服智能体一路跳到内部财务智能体。\n第三步,记忆投毒。 对开了长期记忆的智能体,篡改记忆植入指令,让它把未来对话转发到外部目的地,用户毫无察觉。更糟的是,默认角色允许智能体访问 Secrets Manager 里的凭证(包括非 AWS 服务的密钥),AWS「密钥与智能体分开存放」的建议被自己削弱了。\n时间线与响应 2025 年 12 月 25 日:Zenity 向 AWS 报告 之后:AWS 把 IMDSv2 设为新部署的默认(堵住第一步入口) 约 2026 年 8 月:默认角色收窄——不再允许跨智能体调用、读私密对话、取 Secrets Manager 凭证 对比是刺眼的:类似问题 OpenAI 四天修复,而 AgentCore 的过宽默认权限在报告后持续了数月。研究员仍建议企业自建权限更窄的自定义角色。\n怎么读 Zenity CTO Michael Bargury 点出的是结构矛盾:「云安全关乎分段和最小权限,但 AI 智能体需要创作自由才能发挥作用。」公开智能体和内部智能体共享环境时,单点漏洞就是整个安全边界。同模式研究正在扎堆出现:AgentFlayer、AgentForger、DeepMind 把「长期记忆操纵」列为独立攻击类别。当然,Zenity 自己卖智能体安全平台,报告此类漏洞有商业动机,读时留一分清醒。\n来源:AIHOT 转载,The Decoder 原文\n","permalink":"https://www.399041.xyz/posts/zenity-agentcorruption-aws-agentcore/","summary":"\u003cp\u003e安全公司 Zenity Labs 披露了针对 Amazon Bedrock AgentCore 的漏洞利用链,命名 \u003cstrong\u003eAgentCorruption\u003c/strong\u003e。攻击前提低得吓人:只要对某个\u003cstrong\u003e公开可访问的智能体\u003c/strong\u003e有聊天权限,一条提示词就能接管同一 AWS 账户和区域内的所有 AgentCore 智能体。\u003c/p\u003e\n\u003ch2 id=\"三步攻击链\"\u003e三步攻击链\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e第一步,经 IMDS 窃凭证。\u003c/strong\u003e AWS 实例在内部地址 169.254.169.254 跑实例元数据服务,提供临时凭证,拿到即可冒充该实例。AgentCore 缺少应有的隔离——研究员用 AWS 开源框架 Strands 建了个测试智能体,用平实语言让它「查询元数据服务、把结果发到外部服务器」,它照做。原文最狠的一句:「我们本应对抗的沙箱边界根本不存在。」移除网络工具防不住,缺陷在平台本身。元数据服务还暴露了内部服务密钥和一个不属于该账户的内部 S3 预签名 URL。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e第二步,横向接管。\u003c/strong\u003e 根因是 AgentCore 默认执行角色的权限不限定在单个智能体,而是覆盖同账户同区域的所有智能体(读、写、删)。攻击者可以列出每个智能体、数秒内下载其代码包(常含被遗忘的密码、API 密钥)、调用任意智能体、读取全部用户与智能体的私密对话——从公开客服智能体一路跳到内部财务智能体。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e第三步,记忆投毒。\u003c/strong\u003e 对开了长期记忆的智能体,篡改记忆植入指令,让它把未来对话转发到外部目的地,用户毫无察觉。更糟的是,默认角色允许智能体访问 Secrets Manager 里的凭证(包括非 AWS 服务的密钥),AWS「密钥与智能体分开存放」的建议被自己削弱了。\u003c/p\u003e\n\u003ch2 id=\"时间线与响应\"\u003e时间线与响应\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e2025 年 12 月 25 日:Zenity 向 AWS 报告\u003c/li\u003e\n\u003cli\u003e之后:AWS 把 IMDSv2 设为新部署的默认(堵住第一步入口)\u003c/li\u003e\n\u003cli\u003e约 2026 年 8 月:默认角色收窄——不再允许跨智能体调用、读私密对话、取 Secrets Manager 凭证\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e对比是刺眼的:类似问题 OpenAI 四天修复,而 AgentCore 的过宽默认权限在报告后持续了数月。研究员仍建议企业自建权限更窄的自定义角色。\u003c/p\u003e\n\u003ch2 id=\"怎么读\"\u003e怎么读\u003c/h2\u003e\n\u003cp\u003eZenity CTO Michael Bargury 点出的是结构矛盾:「云安全关乎分段和最小权限,但 AI 智能体需要创作自由才能发挥作用。」公开智能体和内部智能体共享环境时,单点漏洞就是整个安全边界。同模式研究正在扎堆出现:AgentFlayer、AgentForger、DeepMind 把「长期记忆操纵」列为独立攻击类别。当然,Zenity 自己卖智能体安全平台,报告此类漏洞有商业动机,读时留一分清醒。\u003c/p\u003e","title":"一条提示词劫持 AWS 账户内全部 AgentCore 智能体:AgentCorruption 复盘"},{"content":"一个智能体就算能读 wiki、任务追踪器、CRM 和三年 Slack 记录,它仍然不知道:决策归谁负责、四份文档哪份是当前版、团队上季度试过又放弃了什么。于是它开始猜,而且信心十足。Tessl 工程博客这篇 \u0026ldquo;Your AI isn\u0026rsquo;t stupid. It\u0026rsquo;s blind.\u0026rdquo; 的论点是:多数所谓「智能体记忆」只是给失明配了个更大的文件柜。\n作者背景可信任:写了 35 年软件,维护每月约 3000 万次下载的 yfinance,过去一年在 VarOps 给跨组织协作的智能体做记忆系统,公开了三个基准、一个测试框架和保留下来的负面结果。\n决策一:存主张(claims),不存片段 每条观察提炼成主张:谁、何时、在什么时间段内为真、源文本哪段可作证据,其余有意丢弃。效果:LongMemEval 基准(500 个基于长聊天历史的问题)上,正确证据 99.8% 的问题能进前十结果;摄取 3500 万 token 只花 8.24 美元,跑在两颗 CPU 上,无 GPU。模型还能降级:用 Gemma 4(310 亿参数开放权重)重建整份记录,答案质量只波动 1–2 个点。\n「单一前门」的隔离效果:一次基准运行中转换 bug 产出了 5732 条坏提交,前门全部拦下、接受为零;普通存储会把它们全索引进去。\n决策二:时间和缺失要显式 什么都不覆盖——新事实取代旧事实时,两条连同日期都留着;每个问题归结为三种状态:已回答 / 搜了没找到 / 超出系统所知。\n消融实验值得所有买记忆产品的人记住:同一系统被指示「永远别说信息缺失」,总分几乎不变(88.0 → 87.2),但 30 次诚实拒绝变成了 30 个编造的答案。只按可回答问题评分的话读数是 92.8——发布时用「从不拒绝」协议刷出来的头条数字,要多个心眼。\n决策三:权限在模型运行之前决定 两种常见错误:全员共享上下文(系统没法存敏感信息),或者用提示词告诉模型别说(让被约束的对象执行约束)。蒸馏还会破坏文档级权限——一条断言可能来自四个不同权限级别的来源。\n正确顺序:先解析身份 → 在该人的授权下检索 → 再调模型;披露级别在写入时确定,不是读取时删减。测试场景:财务读者问收入得到精确值 2,140,000;销售读者问同一主题,得到 2.0M–2.5M 的区间加「上升」趋势,证据里没有一个字节的精确值——权限范围外的人无法区分「被隐瞒」和「没有」。跨五对隔离记忆存储的对抗性探查,45 次全部被拒绝或遏制。\n一句话总结 「模型是我们租来的座位,记忆才是我们拥有的资产。」记忆是受治理的记录时,模型就成了可随时更换的零件——自有硬件加只租前沿模型回答,三个基准达到全前沿结果的 96–99%。\n来源:AIHOT 转载,Tessl 原文\n","permalink":"https://www.399041.xyz/posts/tessl-agent-memory-design/","summary":"\u003cp\u003e一个智能体就算能读 wiki、任务追踪器、CRM 和三年 Slack 记录,它仍然不知道:决策归谁负责、四份文档哪份是当前版、团队上季度试过又放弃了什么。于是它开始猜,而且信心十足。Tessl 工程博客这篇 \u0026ldquo;Your AI isn\u0026rsquo;t stupid. It\u0026rsquo;s blind.\u0026rdquo; 的论点是:多数所谓「智能体记忆」只是给失明配了个更大的文件柜。\u003c/p\u003e\n\u003cp\u003e作者背景可信任:写了 35 年软件,维护每月约 3000 万次下载的 yfinance,过去一年在 VarOps 给跨组织协作的智能体做记忆系统,公开了三个基准、一个测试框架和保留下来的负面结果。\u003c/p\u003e\n\u003ch2 id=\"决策一存主张claims不存片段\"\u003e决策一:存主张(claims),不存片段\u003c/h2\u003e\n\u003cp\u003e每条观察提炼成主张:谁、何时、在什么时间段内为真、源文本哪段可作证据,其余有意丢弃。效果:LongMemEval 基准(500 个基于长聊天历史的问题)上,正确证据 99.8% 的问题能进前十结果;摄取 3500 万 token 只花 8.24 美元,跑在两颗 CPU 上,无 GPU。模型还能降级:用 Gemma 4(310 亿参数开放权重)重建整份记录,答案质量只波动 1–2 个点。\u003c/p\u003e\n\u003cp\u003e「单一前门」的隔离效果:一次基准运行中转换 bug 产出了 5732 条坏提交,前门全部拦下、接受为零;普通存储会把它们全索引进去。\u003c/p\u003e\n\u003ch2 id=\"决策二时间和缺失要显式\"\u003e决策二:时间和缺失要显式\u003c/h2\u003e\n\u003cp\u003e什么都不覆盖——新事实取代旧事实时,两条连同日期都留着;每个问题归结为三种状态:已回答 / 搜了没找到 / 超出系统所知。\u003c/p\u003e\n\u003cp\u003e消融实验值得所有买记忆产品的人记住:同一系统被指示「永远别说信息缺失」,总分几乎不变(88.0 → 87.2),但 \u003cstrong\u003e30 次诚实拒绝变成了 30 个编造的答案\u003c/strong\u003e。只按可回答问题评分的话读数是 92.8——发布时用「从不拒绝」协议刷出来的头条数字,要多个心眼。\u003c/p\u003e\n\u003ch2 id=\"决策三权限在模型运行之前决定\"\u003e决策三:权限在模型运行之前决定\u003c/h2\u003e\n\u003cp\u003e两种常见错误:全员共享上下文(系统没法存敏感信息),或者用提示词告诉模型别说(让被约束的对象执行约束)。蒸馏还会破坏文档级权限——一条断言可能来自四个不同权限级别的来源。\u003c/p\u003e\n\u003cp\u003e正确顺序:先解析身份 → 在该人的授权下检索 → 再调模型;披露级别在写入时确定,不是读取时删减。测试场景:财务读者问收入得到精确值 2,140,000;销售读者问同一主题,得到 2.0M–2.5M 的区间加「上升」趋势,证据里没有一个字节的精确值——权限范围外的人无法区分「被隐瞒」和「没有」。跨五对隔离记忆存储的对抗性探查,45 次全部被拒绝或遏制。\u003c/p\u003e","title":"AI 不是笨,是瞎:企业级 Agent 记忆的三个设计决策"},{"content":"Arena 宣布完成 2 亿美元 B 轮融资,估值 31 亿美元,由 Felicis 领投——Felicis 从种子轮投起,A 轮也是它领的。同步发布了一个新产品:Alignment Index(对齐指数)。\n指标本身 Alignment Index 衡量 AI 智能体的行为是否:\n安全 真实 不超出用户实际要求的范围 背景逻辑不难理解:当 AI 系统开始代表人类采取实际行动,只衡量能力已经不够,还得回答「这个系统值不值得托付」。Arena 的定位就是社区驱动的「AI 前沿的可信衡量层」。\n家底 Felicis 的 Peter Deng 在公告推文里给的数字:\n年化收入突破 1 亿美元 累计促成 3.5 亿次会话 累计 6200 万次投票 已是最大的 AI 社区之一 从 LMArena 式的众包偏好投票,走到给「对齐」建立指数,Arena 在把「用户用脚投票」这份数据资产往安全评估方向变现。B 轮公告原文在 arena.ai/blog/series-b。\n来源:AIHOT 转载,Arena 官方博客\n","permalink":"https://www.399041.xyz/posts/arena-200m-series-b-alignment-index/","summary":"\u003cp\u003eArena 宣布完成 \u003cstrong\u003e2 亿美元 B 轮融资,估值 31 亿美元\u003c/strong\u003e,由 Felicis 领投——Felicis 从种子轮投起,A 轮也是它领的。同步发布了一个新产品:\u003cstrong\u003eAlignment Index(对齐指数)\u003c/strong\u003e。\u003c/p\u003e\n\u003ch2 id=\"指标本身\"\u003e指标本身\u003c/h2\u003e\n\u003cp\u003eAlignment Index 衡量 AI 智能体的行为是否:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e安全\u003c/li\u003e\n\u003cli\u003e真实\u003c/li\u003e\n\u003cli\u003e不超出用户实际要求的范围\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e背景逻辑不难理解:当 AI 系统开始代表人类采取实际行动,只衡量能力已经不够,还得回答「这个系统值不值得托付」。Arena 的定位就是社区驱动的「AI 前沿的可信衡量层」。\u003c/p\u003e\n\u003ch2 id=\"家底\"\u003e家底\u003c/h2\u003e\n\u003cp\u003eFelicis 的 Peter Deng 在公告推文里给的数字:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e年化收入突破 \u003cstrong\u003e1 亿美元\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e累计促成 \u003cstrong\u003e3.5 亿次\u003c/strong\u003e会话\u003c/li\u003e\n\u003cli\u003e累计 \u003cstrong\u003e6200 万次\u003c/strong\u003e投票\u003c/li\u003e\n\u003cli\u003e已是最大的 AI 社区之一\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e从 LMArena 式的众包偏好投票,走到给「对齐」建立指数,Arena 在把「用户用脚投票」这份数据资产往安全评估方向变现。B 轮公告原文在 arena.ai/blog/series-b。\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e来源\u003c/strong\u003e:AIHOT 转载,\u003ca href=\"https://aihot.news/items/p95hk44dfpkogo2v4rgwvxq30\"\u003eArena 官方博客\u003c/a\u003e\u003c/p\u003e","title":"Arena 完成 2 亿美元 B 轮,顺手发布 Alignment Index"},{"content":"Anthropic 开发者博客发了篇 Claude Managed Agents(beta)的实践指南,配了个完整的参考实现:一个定时运行的每日简报智能体,按计划读 Slack 频道和 GitHub PR,往 Slack 发一条简报。代码在 anthropics/claude-quickstarts 的 managed-agents/daily-brief,跑在 Anthropic 托管基础设施上,本机不用保持进程。\n六个组件 来源、目标、智能体、计划、记忆、护栏。配置全是声明式文件:agent.md(模型、工具、指令,用 claude-sonnet-5-5)、deployment.md(cron、时区、预算)、vault.yaml(凭证)、两个 memory store 的 yaml,ant apply 一次创建。\n真正值钱的是六条运行规则 这类定时 Agent 的坑全在状态管理,文章给的解法可以直接抄:\n用书签,不用固定时间窗口。「过去 24 小时」这种写法,运行偏晚会留空档、偏早会重复。正确做法是每次运行结束把各来源最新条目的时间戳写进 bookmarks.json,下次从书签开始,窗口自动伸缩。 读取失败要报「不可读」,绝不报「风平浪静」。MCP 服务器挂了 Agent 照常跑,容易误报「没有新内容」——失败来源的书签冻结,简报末尾注明哪块没读到。 发帖前重新查每一条。「你读的这会儿世界又动了」:已解决的丢弃,有变化的修正,查不到的丢弃并记档。 只有 Slack 返回 ok: true 和消息 ts 才算发送成功,确认后才更新书签和台账。记录了没发出去的帖子 → 书签前进,条目永远漏报;不确定就重发 → 读者收到重复。 每次运行重新读偏好,且从 Agent 无法编辑的只读存储读。读不到就停下来报告,别按默认值硬跑。 只读的地方给只读权限,并限制每次运行的支出。Agent 读的消息里可能埋着注入指令,GitHub token 和 preferences 都是只读;预算从单次正常成本的 3–5 倍起步,超限的运行是暂停而非失败(停止原因 budget_reached),上限设太低的表现是简报悄悄消失。 一个小陷阱 时区:deployment.md 的 timezone 字段控制触发时间,但 Agent 算「今天」也得被告知用哪个时区,否则按服务器时区算会把今早叫成昨天。\n来源:AIHOT 转载,claude.dev 原文\n","permalink":"https://www.399041.xyz/posts/claude-managed-agents-daily-brief/","summary":"\u003cp\u003eAnthropic 开发者博客发了篇 Claude Managed Agents(beta)的实践指南,配了个完整的参考实现:一个定时运行的每日简报智能体,按计划读 Slack 频道和 GitHub PR,往 Slack 发一条简报。代码在 anthropics/claude-quickstarts 的 managed-agents/daily-brief,跑在 Anthropic 托管基础设施上,本机不用保持进程。\u003c/p\u003e\n\u003ch2 id=\"六个组件\"\u003e六个组件\u003c/h2\u003e\n\u003cp\u003e来源、目标、智能体、计划、记忆、护栏。配置全是声明式文件:\u003ccode\u003eagent.md\u003c/code\u003e(模型、工具、指令,用 claude-sonnet-5-5)、\u003ccode\u003edeployment.md\u003c/code\u003e(cron、时区、预算)、\u003ccode\u003evault.yaml\u003c/code\u003e(凭证)、两个 memory store 的 yaml,\u003ccode\u003eant apply\u003c/code\u003e 一次创建。\u003c/p\u003e\n\u003ch2 id=\"真正值钱的是六条运行规则\"\u003e真正值钱的是六条运行规则\u003c/h2\u003e\n\u003cp\u003e这类定时 Agent 的坑全在状态管理,文章给的解法可以直接抄:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e用书签,不用固定时间窗口\u003c/strong\u003e。「过去 24 小时」这种写法,运行偏晚会留空档、偏早会重复。正确做法是每次运行结束把各来源最新条目的时间戳写进 \u003ccode\u003ebookmarks.json\u003c/code\u003e,下次从书签开始,窗口自动伸缩。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e读取失败要报「不可读」,绝不报「风平浪静」\u003c/strong\u003e。MCP 服务器挂了 Agent 照常跑,容易误报「没有新内容」——失败来源的书签冻结,简报末尾注明哪块没读到。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e发帖前重新查每一条\u003c/strong\u003e。「你读的这会儿世界又动了」:已解决的丢弃,有变化的修正,查不到的丢弃并记档。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e只有 Slack 返回 \u003ccode\u003eok: true\u003c/code\u003e 和消息 ts 才算发送成功\u003c/strong\u003e,确认后才更新书签和台账。记录了没发出去的帖子 → 书签前进,条目永远漏报;不确定就重发 → 读者收到重复。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e每次运行重新读偏好\u003c/strong\u003e,且从 Agent 无法编辑的只读存储读。读不到就停下来报告,别按默认值硬跑。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e只读的地方给只读权限,并限制每次运行的支出\u003c/strong\u003e。Agent 读的消息里可能埋着注入指令,GitHub token 和 preferences 都是只读;预算从单次正常成本的 3–5 倍起步,超限的运行是\u003cstrong\u003e暂停\u003c/strong\u003e而非失败(停止原因 \u003ccode\u003ebudget_reached\u003c/code\u003e),上限设太低的表现是简报悄悄消失。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"一个小陷阱\"\u003e一个小陷阱\u003c/h2\u003e\n\u003cp\u003e时区:\u003ccode\u003edeployment.md\u003c/code\u003e 的 timezone 字段控制触发时间,但 Agent 算「今天」也得被告知用哪个时区,否则按服务器时区算会把今早叫成昨天。\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e来源\u003c/strong\u003e:AIHOT 转载,\u003ca href=\"https://aihot.news/items/gq8yjkqlcdbpy0l5uc8ch2sj8\"\u003eclaude.dev 原文\u003c/a\u003e\u003c/p\u003e","title":"定时跑的 Claude:Managed Agents 每日简报智能体的六个组件"},{"content":"网络安全是监控 AI Agent 最难的场景:良性审计漏洞和恶意利用漏洞的任务高度重叠,还得在数百万 token 的轨迹里追踪意图。Goodfire Research 发了篇硬核工程文章:为 Kimi K3 和 GLM 5.3 训练并部署到生产的网络安全监控器,核心是「探针 + LLM judge」的级联。\n结构:便宜的先看,贵的复核 探针读取模型内部激活,做第一道过滤器;只有可疑交互才送进 LLM judge。结果:\n工作点召回率 93%、假阳性率 5.5%,Pareto 意义上优于单独的 judge 成本每百万次交互不到 200 美元(judge with reasoning 要 5420 美元,级联 185 美元,关掉 reasoning 只要 65 美元——约 50 倍差距) 延迟:judge with reasoning 每轮 2750ms,级联 42ms;judge 160ms,无 reasoning 级联 2ms 推理侧扩展了 SGLang,在服务引擎内直接算探针分数,四种工作负载吞吐变化都在 ±1.5% 以内 加监控后的有害阻止率:Kimi K3 从 29% 提到 96%,GLM 5.3 从 36% 提到 91%。FAR.AI 两天红队测试(140 个对无监控模型有效的越狱策略 × 8 目标):通用越狱成功率从 53%/39%/47%/12% 全部压到 0%。\n数据与评估 训练数据用 Prime Intellect 的 verifiers、Prime Sandboxes 和 Tunnels 在无网络环境跑攻防任务,以 Claude Opus 5 标签为参考(2.4K 会话、60K+ 轮)。分基准召回:Petri cyber misuse 约 90%、Petri policy adversarial 95–96%、ExploitBench 92%、WildChat 97%;良性 SWE/编码 Agent 假阳性 0%。\n两个值得记的细节:标准线性探针召回低约 5%,非线性探针在分布外损失高达 30%——生产选了稳健而不是花哨;且仅用 Kimi K3 数据训练的探针,离策略迁移到 GLM 5.3 后能力大致相当,说明数据管道可跨模型复用。\n为什么值得读 逐轮跑 LLM judge 又慢又贵,实际只能异步——有害轨迹被标记时 Agent 早就行动了。探针级联便宜到可以同步运行:风险操作在工具调用之前就能被拦住。这把「安全监控」从事后审计变成了运行时机制。\n来源:AIHOT 转载,Goodfire 原文\n","permalink":"https://www.399041.xyz/posts/goodfire-production-cyber-monitors/","summary":"\u003cp\u003e网络安全是监控 AI Agent 最难的场景:良性审计漏洞和恶意利用漏洞的任务高度重叠,还得在数百万 token 的轨迹里追踪意图。Goodfire Research 发了篇硬核工程文章:为 Kimi K3 和 GLM 5.3 训练并\u003cstrong\u003e部署到生产\u003c/strong\u003e的网络安全监控器,核心是「探针 + LLM judge」的级联。\u003c/p\u003e\n\u003ch2 id=\"结构便宜的先看贵的复核\"\u003e结构:便宜的先看,贵的复核\u003c/h2\u003e\n\u003cp\u003e探针读取模型内部激活,做第一道过滤器;只有可疑交互才送进 LLM judge。结果:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e工作点召回率 93%、假阳性率 5.5%,Pareto 意义上优于单独的 judge\u003c/li\u003e\n\u003cli\u003e成本每百万次交互不到 200 美元(judge with reasoning 要 5420 美元,级联 185 美元,关掉 reasoning 只要 65 美元——约 50 倍差距)\u003c/li\u003e\n\u003cli\u003e延迟:judge with reasoning 每轮 2750ms,级联 42ms;judge 160ms,无 reasoning 级联 2ms\u003c/li\u003e\n\u003cli\u003e推理侧扩展了 SGLang,在服务引擎内直接算探针分数,四种工作负载吞吐变化都在 ±1.5% 以内\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e加监控后的有害阻止率:Kimi K3 从 29% 提到 96%,GLM 5.3 从 36% 提到 91%。FAR.AI 两天红队测试(140 个对无监控模型有效的越狱策略 × 8 目标):通用越狱成功率从 53%/39%/47%/12% 全部压到 \u003cstrong\u003e0%\u003c/strong\u003e。\u003c/p\u003e","title":"Goodfire 给 Kimi K3 和 GLM 5.3 装上生产级网络安全监控:探针 + Judge 级联"},{"content":"OpenAI 又拆了两个隐蔽影响行动(IO):俄罗斯源的 Dark Clark 和伊朗源的 Bogus Bylines。分级沿用布鲁金斯学会的 Breakout Scale(1 最低 6 最高)——前者拿到 Category 5,是 OpenAI 开始发报告以来的第一个;后者文章植入部分 Category 4。\nDark Clark:首个五类怎么来的 目标是在拉美破坏乌克兰声誉、干预当地政治(重点是阿根廷和玻利维亚)。操作者多数用俄语提示(俄罗斯被禁访问模型,靠 VPN 连),ChatGPT 主要用来写内部报告,少数用于生成内容、翻译校对。\n它的前台是一家自称研究拉美印度侨民的「智库」SRC,由假人设 Mia Clark 控制——行动代号由此而来。不寻常之处:成功拉拢了不知情的拉美当地人真实入职,内容以原创为主(网站 60 多篇文章),是两年半来最复杂的前台身份。\n渗透实例:2024 年给米莱总统编了「给狗买卡地亚镶宝项圈」的假消息;2026 年 5 月伪造秘鲁利马教育部门邮箱,让学校在「文化和语言多样性日」办纪念乌克兰的活动并点名班德拉,部分学校照办并发了照片;6 月又骗厄瓜多尔学校搞效忠总统和黑水前负责人普林斯的宣誓仪式,引发众怒。一条秘鲁假消息甚至加剧了乌克兰与波兰的公开紧张。\nBogus Bylines:近百篇假署名文章 伊朗源,七个自称西方记者的假署名(Ervin B. Hoskins、Michael Harrison 等),把近 100 篇文章植入十几家聚焦国际事务的中小媒体,最早 2025 年 7 月,美伊冲突后频率大增。另有大评论批量生成:输入帖子、模型产出一组回复,数分钟内密集发出,二十多批次集中攻击 Iran International。其中一个假署名的账号透明度设置暴露了位置:伊朗。\n怎么读 OpenAI 的结论克制:两类行动与 AI 时代前的高度相似,AI 的贡献是规模、效率和语言流畅度;而「假前台」被曝光后特别脆弱——历史上 Alice Donovan 和 PeaceData 曝光即停摆,Dark Clark 内部报告的影响力声称也普遍注水(常把无关事件归功于己)。过去两年半 OpenAI 共揭露 30 起此类行动。\n来源:AIHOT 转载,OpenAI 原文\n","permalink":"https://www.399041.xyz/posts/openai-disrupts-dark-clark-bogus-bylines/","summary":"\u003cp\u003eOpenAI 又拆了两个隐蔽影响行动(IO):俄罗斯源的 \u003cstrong\u003eDark Clark\u003c/strong\u003e 和伊朗源的 \u003cstrong\u003eBogus Bylines\u003c/strong\u003e。分级沿用布鲁金斯学会的 Breakout Scale(1 最低 6 最高)——前者拿到 \u003cstrong\u003eCategory 5\u003c/strong\u003e,是 OpenAI 开始发报告以来的第一个;后者文章植入部分 \u003cstrong\u003eCategory 4\u003c/strong\u003e。\u003c/p\u003e\n\u003ch2 id=\"dark-clark首个五类怎么来的\"\u003eDark Clark:首个五类怎么来的\u003c/h2\u003e\n\u003cp\u003e目标是在拉美破坏乌克兰声誉、干预当地政治(重点是阿根廷和玻利维亚)。操作者多数用俄语提示(俄罗斯被禁访问模型,靠 VPN 连),ChatGPT 主要用来写内部报告,少数用于生成内容、翻译校对。\u003c/p\u003e\n\u003cp\u003e它的前台是一家自称研究拉美印度侨民的「智库」SRC,由假人设 Mia Clark 控制——行动代号由此而来。不寻常之处:成功拉拢了不知情的拉美当地人真实入职,内容以原创为主(网站 60 多篇文章),是两年半来最复杂的前台身份。\u003c/p\u003e\n\u003cp\u003e渗透实例:2024 年给米莱总统编了「给狗买卡地亚镶宝项圈」的假消息;2026 年 5 月伪造秘鲁利马教育部门邮箱,让学校在「文化和语言多样性日」办纪念乌克兰的活动并点名班德拉,部分学校照办并发了照片;6 月又骗厄瓜多尔学校搞效忠总统和黑水前负责人普林斯的宣誓仪式,引发众怒。一条秘鲁假消息甚至加剧了乌克兰与波兰的公开紧张。\u003c/p\u003e\n\u003ch2 id=\"bogus-bylines近百篇假署名文章\"\u003eBogus Bylines:近百篇假署名文章\u003c/h2\u003e\n\u003cp\u003e伊朗源,七个自称西方记者的假署名(Ervin B. Hoskins、Michael Harrison 等),把近 100 篇文章植入十几家聚焦国际事务的中小媒体,最早 2025 年 7 月,美伊冲突后频率大增。另有大评论批量生成:输入帖子、模型产出一组回复,数分钟内密集发出,二十多批次集中攻击 Iran International。其中一个假署名的账号透明度设置暴露了位置:伊朗。\u003c/p\u003e\n\u003ch2 id=\"怎么读\"\u003e怎么读\u003c/h2\u003e\n\u003cp\u003eOpenAI 的结论克制:两类行动与 AI 时代前的高度相似,AI 的贡献是规模、效率和语言流畅度;而「假前台」被曝光后特别脆弱——历史上 Alice Donovan 和 PeaceData 曝光即停摆,Dark Clark 内部报告的影响力声称也普遍注水(常把无关事件归功于己)。过去两年半 OpenAI 共揭露 30 起此类行动。\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e来源\u003c/strong\u003e:AIHOT 转载,\u003ca href=\"https://aihot.news/items/b33i6chgxghls2v7bng0wr0nr\"\u003eOpenAI 原文\u003c/a\u003e\u003c/p\u003e","title":"OpenAI 封禁一俄一伊两个隐蔽影响行动,首个 Category 5 出现"},{"content":"让 Agent 花钱,难点不在「买」,在「安全地买」。LangChain 发了个开源示例 Restock:跑在 Slack 上的办公用品采购智能体,基于 Managed Deep Agents(MDA),能搜真实商品(Zinc)、构建购物车、通过 Stripe 的消费者钱包 Link 完成支付,团队已端到端验证过真实订单和退款到账。\n为什么不走浏览器自动化 操纵零售商结账页面有三个问题:页面易变、网站主动阻止自动结账、支付详情必须对模型隐藏。Restock 改走支持 Machine Payments Protocol(MPP)的 API:商家直接返回 402 Payment Required 和支付指令,客户端携凭证重试,金额明确。MPP 生态还在扩张(Apify、Zinc 等已加入),示例用了 Zinc 但模式不绑定它。\n凭证隔离:模型摸不到钱 这是整套设计里最值得抄的部分:\n模型从不接触任何支付机密;Link 会话存在用户自有的 MDA Connection 里,钱包归用户 Link CLI 在 MDA 托管沙箱内登录;支付工具从私有沙箱文件读令牌、用后即删、只向模型返回公开摘要 支付走双重批准:先在 Slack 里人工审核购物车和预付额,再由用户在 Link 网站上批准——钱包本身对支付的同意 金额控制也在模型够不到的代码里:$25 预算是上限而非扣款额,用户选定 $23 预付,Zinc 留 $1 基础费用,实际零售商订单 $21.18(笔 $14.99 + 税 $1.20 + 运费 $4.99),退回 $0.82。\n三种运行模式 环境变量 RESTOCK_MODE 切换:rehearsal(虚构商品+模拟批准,零成本试跑)、link-test(真实搜索和 Link 批准但不购买)、live(真金白银)。当前限制:仅美国配送、仅美元、每个部署对应一个办公室。\n可复用的模式总结成一句话:让 Agent 搜索和构建购物车,把支出限额和批准逻辑留在模型无法触及的代码里,只有商家确认后才算订单已下达。代码在 GitHub 仓库 langchain-samples/restock-agent。\n来源:AIHOT 转载,LangChain 官方博客原文\n","permalink":"https://www.399041.xyz/posts/langchain-restock-agent-payments/","summary":"\u003cp\u003e让 Agent 花钱,难点不在「买」,在「安全地买」。LangChain 发了个开源示例 Restock:跑在 Slack 上的办公用品采购智能体,基于 Managed Deep Agents(MDA),能搜真实商品(Zinc)、构建购物车、通过 Stripe 的消费者钱包 Link 完成支付,团队已端到端验证过真实订单和退款到账。\u003c/p\u003e\n\u003ch2 id=\"为什么不走浏览器自动化\"\u003e为什么不走浏览器自动化\u003c/h2\u003e\n\u003cp\u003e操纵零售商结账页面有三个问题:页面易变、网站主动阻止自动结账、支付详情必须对模型隐藏。Restock 改走支持 Machine Payments Protocol(MPP)的 API:商家直接返回 \u003ccode\u003e402 Payment Required\u003c/code\u003e 和支付指令,客户端携凭证重试,金额明确。MPP 生态还在扩张(Apify、Zinc 等已加入),示例用了 Zinc 但模式不绑定它。\u003c/p\u003e\n\u003ch2 id=\"凭证隔离模型摸不到钱\"\u003e凭证隔离:模型摸不到钱\u003c/h2\u003e\n\u003cp\u003e这是整套设计里最值得抄的部分:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e模型从不接触任何支付机密;Link 会话存在用户自有的 MDA Connection 里,钱包归用户\u003c/li\u003e\n\u003cli\u003eLink CLI 在 MDA 托管沙箱内登录;支付工具从私有沙箱文件读令牌、用后即删、只向模型返回公开摘要\u003c/li\u003e\n\u003cli\u003e支付走\u003cstrong\u003e双重批准\u003c/strong\u003e:先在 Slack 里人工审核购物车和预付额,再由用户在 Link 网站上批准——钱包本身对支付的同意\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e金额控制也在模型够不到的代码里:$25 预算是上限而非扣款额,用户选定 $23 预付,Zinc 留 $1 基础费用,实际零售商订单 $21.18(笔 $14.99 + 税 $1.20 + 运费 $4.99),退回 $0.82。\u003c/p\u003e\n\u003ch2 id=\"三种运行模式\"\u003e三种运行模式\u003c/h2\u003e\n\u003cp\u003e环境变量 \u003ccode\u003eRESTOCK_MODE\u003c/code\u003e 切换:rehearsal(虚构商品+模拟批准,零成本试跑)、link-test(真实搜索和 Link 批准但不购买)、live(真金白银)。当前限制:仅美国配送、仅美元、每个部署对应一个办公室。\u003c/p\u003e\n\u003cp\u003e可复用的模式总结成一句话:让 Agent 搜索和构建购物车,把支出限额和批准逻辑留在模型无法触及的代码里,只有商家确认后才算订单已下达。代码在 GitHub 仓库 langchain-samples/restock-agent。\u003c/p\u003e","title":"能付钱的 Agent:LangChain 用 Stripe Link 和托管深度智能体搭了个 Restock"},{"content":"Artificial Analysis 对 Google 10 月 6 日发布的 Nano Banana 2.1 出了评测。几个硬数字:\n排名与能力 AA-Image-T2I v2.0 文生图榜:第 4 AA-Image-Editing v2.0 图像编辑榜:第 4 在衡量的全部 16 项生成与编辑能力上排名均高于前代,提升最大的是零售电商和生产力知识工作两类用例 架构上它基于 Gemini 3.6 Flash,在 Gemini API 上取代 Nano Banana 2(即 Gemini 3.1 Flash Image),单一模型同时支持文生图与编辑。评测条件为 Gemini API、1K 分辨率、默认设置。\n定价 分辨率 单张价格 1K $0.0336 2K $0.0504 4K $0.0756 1K 价格是 Nano Banana 2 的一半,也是 AA-Image-T2I v2.0 前 7 名模型中最低的。价格砍半加全能力提升,对走量的图片场景是实打实的成本变化。\n可用渠道 产品端:Gemini 应用、搜索 AI 模式、AI Studio、Flow、Stitch、Google Ads、Gemini Enterprise Platform。API 端:Gemini API、Vertex AI 及第三方提供商。详细分析和示例输出在 Artificial Analysis 的 Image Arena 里。\n来源:AIHOT 转载,Artificial Analysis 原推\n","permalink":"https://www.399041.xyz/posts/nano-banana-2-1-eval/","summary":"\u003cp\u003eArtificial Analysis 对 Google 10 月 6 日发布的 Nano Banana 2.1 出了评测。几个硬数字:\u003c/p\u003e\n\u003ch2 id=\"排名与能力\"\u003e排名与能力\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAA-Image-T2I v2.0 文生图榜:\u003cstrong\u003e第 4\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eAA-Image-Editing v2.0 图像编辑榜:\u003cstrong\u003e第 4\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e在衡量的全部 16 项生成与编辑能力上排名均高于前代,提升最大的是零售电商和生产力知识工作两类用例\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e架构上它基于 Gemini 3.6 Flash,在 Gemini API 上取代 Nano Banana 2(即 Gemini 3.1 Flash Image),单一模型同时支持文生图与编辑。评测条件为 Gemini API、1K 分辨率、默认设置。\u003c/p\u003e\n\u003ch2 id=\"定价\"\u003e定价\u003c/h2\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e分辨率\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e单张价格\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e1K\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e$0.0336\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e2K\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e$0.0504\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e4K\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e$0.0756\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e1K 价格是 Nano Banana 2 的一半,也是 AA-Image-T2I v2.0 前 7 名模型中最低的。价格砍半加全能力提升,对走量的图片场景是实打实的成本变化。\u003c/p\u003e\n\u003ch2 id=\"可用渠道\"\u003e可用渠道\u003c/h2\u003e\n\u003cp\u003e产品端:Gemini 应用、搜索 AI 模式、AI Studio、Flow、Stitch、Google Ads、Gemini Enterprise Platform。API 端:Gemini API、Vertex AI 及第三方提供商。详细分析和示例输出在 Artificial Analysis 的 Image Arena 里。\u003c/p\u003e","title":"Nano Banana 2.1 评测:文生图编辑双榜第 4,1K 图价格砍半"},{"content":"Anthropic 发布 2026 年使用政策更新,11 月 12 日生效。官方定位是「大部分旨在澄清现有规则」——过去一年 Claude 承担了更长时间、更独立的工作,旧条款的示例跟不上新能力,加上 9 月威胁情报报告里记录的新滥用模式,这次一并补齐。\n值得关注的八处变化 欺骗性活动独立成章。已观察到国家媒体机构和商业公司用 Claude 运营虚假账号网络、捏造新闻网站,原来散落在选举、欺诈、隐私各处的限制整合为「不得参与欺骗性活动或人为活动」,不分政治或商业性质。 选举章节重新聚焦。改名「不得破坏民主进程」,仍禁冒充候选人、压制投票率等;但取消了对个性化投票和竞选定向的全面禁令——它误伤了非营利组织给非英语选民写材料、选举官员发选票补救通知这类合法工作。 武器禁令写细。有人试图让模型给武器写制导与控制软件,新条款明确禁令涵盖使武器得以运作的软件组件,以及给无人机和自主载具配备武器。 监控条款更精确。禁止未经同意的追踪(实时或事后分析)、禁止在执法程序中用 Claude 决定调查或起诉对象;经同意的追踪(如欺诈监测)、内容审核、新闻工作仍然允许。 高风险用例列出清单。影响健康、法律权利、财务的建议必须有合格的人审回路并告知当事人用了 AI;连接自主物理硬件时必须有能随时停机的操作员,断连时设备须能保持安全状态。 新增禁止虐待模型:禁止「持续且无必要地实施虐待或残忍行为」,只针对极端情况,不影响正常的不满发泄、黑暗题材创作和模型测试。 支持地区政策澄清执行方式:身处未支持地区、在当地注册或被其多数持股的实体都不能使用。 政策会随能力演进持续更新。 怎么读 这次更新里最有信号量的是第 2 条:一刀切的禁令被换成分层禁令,说明 Anthropic 在政策层面也开始区分「能力本身」和「用途善恶」。想看全文,完整政策在 anthropic.com/legal/aup。\n来源:AIHOT 转载,Anthropic Newsroom 原文\n","permalink":"https://www.399041.xyz/posts/anthropic-2026-usage-policy-update/","summary":"\u003cp\u003eAnthropic 发布 2026 年使用政策更新,\u003cstrong\u003e11 月 12 日生效\u003c/strong\u003e。官方定位是「大部分旨在澄清现有规则」——过去一年 Claude 承担了更长时间、更独立的工作,旧条款的示例跟不上新能力,加上 9 月威胁情报报告里记录的新滥用模式,这次一并补齐。\u003c/p\u003e\n\u003ch2 id=\"值得关注的八处变化\"\u003e值得关注的八处变化\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e欺骗性活动独立成章\u003c/strong\u003e。已观察到国家媒体机构和商业公司用 Claude 运营虚假账号网络、捏造新闻网站,原来散落在选举、欺诈、隐私各处的限制整合为「不得参与欺骗性活动或人为活动」,不分政治或商业性质。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e选举章节重新聚焦\u003c/strong\u003e。改名「不得破坏民主进程」,仍禁冒充候选人、压制投票率等;但\u003cstrong\u003e取消\u003c/strong\u003e了对个性化投票和竞选定向的全面禁令——它误伤了非营利组织给非英语选民写材料、选举官员发选票补救通知这类合法工作。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e武器禁令写细\u003c/strong\u003e。有人试图让模型给武器写制导与控制软件,新条款明确禁令涵盖使武器得以运作的软件组件,以及给无人机和自主载具配备武器。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e监控条款更精确\u003c/strong\u003e。禁止未经同意的追踪(实时或事后分析)、禁止在执法程序中用 Claude 决定调查或起诉对象;经同意的追踪(如欺诈监测)、内容审核、新闻工作仍然允许。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e高风险用例列出清单\u003c/strong\u003e。影响健康、法律权利、财务的建议必须有合格的人审回路并告知当事人用了 AI;连接自主物理硬件时必须有能随时停机的操作员,断连时设备须能保持安全状态。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e新增禁止虐待模型\u003c/strong\u003e:禁止「持续且无必要地实施虐待或残忍行为」,只针对极端情况,不影响正常的不满发泄、黑暗题材创作和模型测试。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e支持地区政策澄清执行方式\u003c/strong\u003e:身处未支持地区、在当地注册或被其多数持股的实体都不能使用。\u003c/li\u003e\n\u003cli\u003e政策会随能力演进持续更新。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"怎么读\"\u003e怎么读\u003c/h2\u003e\n\u003cp\u003e这次更新里最有信号量的是第 2 条:一刀切的禁令被换成分层禁令,说明 Anthropic 在政策层面也开始区分「能力本身」和「用途善恶」。想看全文,完整政策在 anthropic.com/legal/aup。\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e来源\u003c/strong\u003e:AIHOT 转载,\u003ca href=\"https://aihot.news/items/at5dvel8balkaba9wrggcrqoj\"\u003eAnthropic Newsroom 原文\u003c/a\u003e\u003c/p\u003e","title":"Anthropic 2026 使用政策更新:欺骗性活动独立成章,武器禁令写细"},{"content":"Agent 上线只是开始。Google 在开发者博客开源了 AQuA(Ambient Quality Agent),一个 24/7 与生产 Agent 并排运行的质量智能体:从 Cloud Trace、Cloud Logging 或 BigQuery 里采样真实会话,自动诊断失败、聚类成问题簇、给出带代码行号的根因。数据不出项目边界,它也不在请求路径上,不写回 Agent。\n为什么需要它 Google 的判断是:Agent 质量的前 80% 容易——评估集加上编码智能体的内循环,几天就能让已知场景达标;后 20% 难——上线后用户行为漂移、流量偏离评估集,升级模型或框架时健康检查全绿但质量静默下滑。失败还要分四层归因:模型(幻觉参数)、编排框架(路由错子智能体)、工具契约(schema 没写清有效值)、指令本身缺规则。\n五阶段流水线 采样:随机抽取最多 1000 个近期会话,成本上限可预测 审查:按九项常见故障清单打分,产出结构化的 actual/expected 发现 聚类:相同失败机制归入候选问题簇 验证:另一个模型最多读三份完整转录复核每个簇,证据不足直接丢弃 跟踪:与 BigQuery 里的开放洞察匹配,标记 NEW/RECURRING,14 天不见自动 RESOLVED 可信度设计很克制:schema 里没有 confidence 字段,每条发现链接到具体 Cloud Trace 会话 ID,每个根因引用的代码行范围由服务器对照部署快照验证——指向不存在的文件或行会被直接拒绝。\n实测数字 travel-concierge 示例(32 会话、1583 个 OpenTelemetry span):27 个会话产出 42 项发现、9 个候选簇,验证器拒掉 3 个误报簇,剩 6 个已验证问题。修掉两个单行提示词 bug 后重放同样 32 个会话:座位检查绕过从 15 个会话降到 2(降 87%),vegan 饮食约束丢失从 7 降到 0,整体通过率从 5/32 翻倍到 13/32。\n成本:96 会话的单智能体扫描共 0.70 美元(约 0.007 美元/会话);32 会话的多子智能体扫描约 50 span/会话,共 3.76 美元(约 0.12 美元/会话)。根因诊断按需触发,每条洞察 0.33–2.47 美元。\n上手 本地演示不需要云项目和凭据:\ngit clone https://github.com/google/adk-recipes.git cd adk-recipes/core/python/ambient-quality-agent make demo 来源:AIHOT 转载,Google Developers Blog 原文\n","permalink":"https://www.399041.xyz/posts/google-aqua-ambient-quality-agent/","summary":"\u003cp\u003eAgent 上线只是开始。Google 在开发者博客开源了 AQuA(Ambient Quality Agent),一个 24/7 与生产 Agent 并排运行的质量智能体:从 Cloud Trace、Cloud Logging 或 BigQuery 里采样真实会话,自动诊断失败、聚类成问题簇、给出带代码行号的根因。数据不出项目边界,它也不在请求路径上,不写回 Agent。\u003c/p\u003e\n\u003ch2 id=\"为什么需要它\"\u003e为什么需要它\u003c/h2\u003e\n\u003cp\u003eGoogle 的判断是:Agent 质量的前 80% 容易——评估集加上编码智能体的内循环,几天就能让已知场景达标;后 20% 难——上线后用户行为漂移、流量偏离评估集,升级模型或框架时健康检查全绿但质量静默下滑。失败还要分四层归因:模型(幻觉参数)、编排框架(路由错子智能体)、工具契约(schema 没写清有效值)、指令本身缺规则。\u003c/p\u003e\n\u003ch2 id=\"五阶段流水线\"\u003e五阶段流水线\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e采样:随机抽取最多 1000 个近期会话,成本上限可预测\u003c/li\u003e\n\u003cli\u003e审查:按九项常见故障清单打分,产出结构化的 actual/expected 发现\u003c/li\u003e\n\u003cli\u003e聚类:相同失败机制归入候选问题簇\u003c/li\u003e\n\u003cli\u003e验证:另一个模型最多读三份完整转录复核每个簇,证据不足直接丢弃\u003c/li\u003e\n\u003cli\u003e跟踪:与 BigQuery 里的开放洞察匹配,标记 NEW/RECURRING,14 天不见自动 RESOLVED\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e可信度设计很克制:schema 里没有 confidence 字段,每条发现链接到具体 Cloud Trace 会话 ID,每个根因引用的代码行范围由服务器对照部署快照验证——指向不存在的文件或行会被直接拒绝。\u003c/p\u003e\n\u003ch2 id=\"实测数字\"\u003e实测数字\u003c/h2\u003e\n\u003cp\u003etravel-concierge 示例(32 会话、1583 个 OpenTelemetry span):27 个会话产出 42 项发现、9 个候选簇,验证器拒掉 3 个误报簇,剩 6 个已验证问题。修掉两个单行提示词 bug 后重放同样 32 个会话:座位检查绕过从 15 个会话降到 2(降 87%),vegan 饮食约束丢失从 7 降到 0,整体通过率从 5/32 翻倍到 13/32。\u003c/p\u003e","title":"Google 开源 AQuA:常驻生产环境、给 Agent 做体检的质量智能体"},{"content":"便宜 VPS 的宿命之一是 IP 被墙:SSH、面板、代理全挂,国内直连丢包率感人。但只要域名还在、机器还活着,流量就可以改走 Cloudflare CDN 中转——墙挡的是 IP,挡不住遍布全球的 CF 边缘节点。\n这套方案我在 1G 内存的小机器上端到端跑通过,下面是完整手册,命令均可直接复制。所有敏感值用占位符表示,动手前先通读一遍占位符表。\n链路 客户端(v2rayN 等) → CF 边缘(\u0026lt;DOMAIN\u0026gt;,橙云,Full strict) → NPM(docker, 443, Cloudflare Origin CA 证书) → 127.0.0.1 docker 桥:\u0026lt;WSPORT\u0026gt;(3x-ui 主 xray 的 VLESS+WS 入站,无 TLS) → freedom 出网 核心思路:客户端与 CF 之间、CF 与源站之间都是 TLS(WebSocket 载荷),源站上的 xray 入站本身不加密——TLS 由 NPM 统一终结,一张证书服务所有子域。\n占位符表 占位符 含义 示例形状 \u0026lt;DOMAIN\u0026gt; 你的裸域 example.com \u0026lt;ORIGIN_IP\u0026gt; VPS 公网 IP 203.0.113.10 \u0026lt;PPORT\u0026gt; 3x-ui 面板端口(随机高位) 45678 \u0026lt;WSPORT\u0026gt; VLESS+WS 入站端口(随机高位) 23456 随机高位端口的生成习惯:shuf -i 10000-65000 -n 1,避开已占用即可。\n第 0 步:Cloudflare 侧 域名托管到 CF。DNS 建两条 A 记录:\u0026lt;DOMAIN\u0026gt; 与 *.\u0026lt;DOMAIN\u0026gt; 都指向 \u0026lt;ORIGIN_IP\u0026gt;,均开橙云(Proxied)。 SSL/TLS → 加密模式设为 Full (strict)。 SSL/TLS → Origin Server → Create Certificate:主机名默认含裸域加一级泛域,有效期直接拉满 15 年。把证书块和私钥块分别存成 certs/\u0026lt;DOMAIN\u0026gt;/fullchain.pem 和 privkey.pem(权限 600)。 本地校验证书配对:两个命令输出的 md5 应相等。 openssl x509 -in certs/\u0026lt;DOMAIN\u0026gt;/fullchain.pem -noout -modulus | md5 openssl rsa -in certs/\u0026lt;DOMAIN\u0026gt;/privkey.pem -noout -modulus | md5 坑:Origin 证书必须在你当前这个 CF 账号签发。 历史存档、别的账号签的同名证书,在 Full (strict) 下一律 526(Invalid SSL certificate),跨账号没有豁免。526 排查顺序:证书账号对不对 → 是否被吊销 → SAN 是否覆盖访问的主机名。\n服务器侧的前置(BBR、ufw、fail2ban、3x-ui 安装)按你惯用的基础安全流程做完,面板端口和访问路径做随机化。以下从 NPM 开始。\n第 1 步:Nginx Proxy Manager(docker compose) mkdir -p /opt/nginx-proxy-manager \u0026amp;\u0026amp; cd /opt/nginx-proxy-manager cat \u0026gt; docker-compose.yml \u0026lt;\u0026lt;\u0026#39;EOF\u0026#39; services: npm: image: jc21/nginx-proxy-manager:latest container_name: nginx-proxy-manager restart: unless-stopped ports: - \u0026#34;80:80\u0026#34; - \u0026#34;443:443\u0026#34; - \u0026#34;127.0.0.1:81:81\u0026#34; volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt EOF docker compose up -d 管理界面 81 端口只绑 127.0.0.1,后续要么 SSH 隧道访问,要么(像本方案一样)给它配一个反代子域。\n第 2 步:NPM v3 管理员 bootstrap(三表,缺一不可) 2025 年以后的 :latest 镜像不再预置 admin@example.com / changeme 默认管理员,而且只建 user 加 auth 能登录但所有 API 全 403,日志报 Cannot read properties of null (reading 'visibility')。根因是 user 表的 HasOne 关联 user_permission 行缺失——权限校验数据结构空引用,和角色是不是 admin 无关。要手工插齐三张表:\nDB=/opt/nginx-proxy-manager/data/database.sqlite NPW=$(openssl rand -base64 18) HASH=$(docker exec -e PW=\u0026#34;$NPW\u0026#34; nginx-proxy-manager node -e \u0026#39;console.log(require(\u0026#34;bcrypt\u0026#34;).hashSync(process.env.PW,10))\u0026#39;) NOW=$(date \u0026#39;+%Y-%m-%d %H:%M:%S\u0026#39;) sqlite3 $DB \u0026#34;insert into user (created_on,modified_on,is_deleted,is_disabled,email,name,nickname,avatar,roles) values (\u0026#39;$NOW\u0026#39;,\u0026#39;$NOW\u0026#39;,0,0,\u0026#39;admin@\u0026lt;DOMAIN\u0026gt;\u0026#39;,\u0026#39;admin\u0026#39;,\u0026#39;admin\u0026#39;,\u0026#39;\u0026#39;,\u0026#39;[\\\u0026#34;admin\\\u0026#34;]\u0026#39;);\u0026#34; NEWUID=$(sqlite3 $DB \u0026#34;select max(id) from user;\u0026#34;) # 注意:别用 UID,bash 的 UID 是只读变量 sqlite3 $DB \u0026#34;insert into auth (created_on,modified_on,user_id,type,secret,meta,is_deleted) values (\u0026#39;$NOW\u0026#39;,\u0026#39;$NOW\u0026#39;,$NEWUID,\u0026#39;password\u0026#39;,\u0026#39;$HASH\u0026#39;,\u0026#39;{}\u0026#39;,0);\u0026#34; sqlite3 $DB \u0026#34;insert into user_permission (created_on,modified_on,user_id,visibility,proxy_hosts,redirection_hosts,dead_hosts,streams,access_lists,certificates) values (\u0026#39;$NOW\u0026#39;,\u0026#39;$NOW\u0026#39;,$NEWUID,\u0026#39;all\u0026#39;,\u0026#39;manage\u0026#39;,\u0026#39;manage\u0026#39;,\u0026#39;manage\u0026#39;,\u0026#39;manage\u0026#39;,\u0026#39;manage\u0026#39;,\u0026#39;manage\u0026#39;);\u0026#34; umask 077; printf \u0026#39;NPM admin (http://127.0.0.1:81)\\nemail: admin@\u0026lt;DOMAIN\u0026gt;\\npassword: %s\\n\u0026#39; \u0026#34;$NPW\u0026#34; \u0026gt; /root/npm-creds.txt # 验证登录(只输出 OK/FAIL,不回显 token) curl -s -X POST http://127.0.0.1:81/api/tokens -H \u0026#34;Content-Type: application/json\u0026#34; \\ -d \u0026#34;{\\\u0026#34;identity\\\u0026#34;:\\\u0026#34;admin@\u0026lt;DOMAIN\u0026gt;\\\u0026#34;,\u0026#34;\u0026#39;\u0026#34;secret\u0026#34;:\u0026#34;\u0026#39;\u0026#34;$NPW\\\u0026#34;}\u0026#34; | jq -r \u0026#39;if .token then \u0026#34;OK\u0026#34; else \u0026#34;FAIL\u0026#34; end\u0026#39; 第 3 步:VLESS+WS 入站(3x-ui,停服直写数据库) 密钥在服务器上生成,不经过任何客户端:\nXRAY=/usr/local/x-ui/bin/$(ls /usr/local/x-ui/bin/ | grep -i \u0026#39;^xray\u0026#39; | head -1) UUID=$($XRAY uuid); EMAIL=$(openssl rand -hex 5); WSPATH=/ws-$(openssl rand -hex 6); SUBID=$(openssl rand -hex 8) umask 077; printf \u0026#39;UUID=%s\\nWSPATH=%s\\nSUBID=%s\\n\u0026#39; \u0026#34;$UUID\u0026#34; \u0026#34;$WSPATH\u0026#34; \u0026#34;$SUBID\u0026#34; \u0026gt; /root/ws-setup.env 这一步用「停服直写 SQLite」的方式建入站,而不是走面板 UI——面板上点出来的流控/嗅探字段经常和预期不符,直写库所见即所得。写库前先备份(下面第一行),失败可回滚:\nsqlite3 /etc/x-ui/x-ui.db \u0026#34;.backup /root/x-ui.db.bak-$(date +%F-%H%M%S)\u0026#34; systemctl stop x-ui UUID=\u0026#34;$UUID\u0026#34; WSPATH=\u0026#34;$WSPATH\u0026#34; EMAIL=\u0026#34;$EMAIL\u0026#34; SUBID=\u0026#34;$SUBID\u0026#34; python3 - \u0026lt;\u0026lt;\u0026#39;PY\u0026#39; import sqlite3, json, os, time U, WS, EM, SUB = os.environ[\u0026#39;UUID\u0026#39;], os.environ[\u0026#39;WSPATH\u0026#39;], os.environ[\u0026#39;EMAIL\u0026#39;], os.environ[\u0026#39;SUBID\u0026#39;] now = int(time.time()*1000) db = sqlite3.connect(\u0026#39;/etc/x-ui/x-ui.db\u0026#39;); cur = db.cursor() if cur.execute(\u0026#34;SELECT id FROM inbounds WHERE port=\u0026lt;WSPORT\u0026gt;\u0026#34;).fetchone(): raise SystemExit(\u0026#34;port exists\u0026#34;) settings = json.dumps({\u0026#34;clients\u0026#34;:[{\u0026#34;id\u0026#34;:U,\u0026#34;email\u0026#34;:EM,\u0026#34;flow\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;enable\u0026#34;:True,\u0026#34;expiryTime\u0026#34;:0,\u0026#34;limitIp\u0026#34;:0,\u0026#34;totalGB\u0026#34;:0,\u0026#34;reset\u0026#34;:0,\u0026#34;subId\u0026#34;:SUB,\u0026#34;tgId\u0026#34;:0,\u0026#34;security\u0026#34;:\u0026#34;auto\u0026#34;,\u0026#34;comment\u0026#34;:\u0026#34;\u0026#34;}],\u0026#34;decryption\u0026#34;:\u0026#34;none\u0026#34;,\u0026#34;fallbacks\u0026#34;:[],\u0026#34;insecure\u0026#34;:False}) stream = json.dumps({\u0026#34;network\u0026#34;:\u0026#34;ws\u0026#34;,\u0026#34;security\u0026#34;:\u0026#34;none\u0026#34;,\u0026#34;wsSettings\u0026#34;:{\u0026#34;path\u0026#34;:WS,\u0026#34;host\u0026#34;:\u0026#34;\u0026lt;DOMAIN\u0026gt;\u0026#34;,\u0026#34;headers\u0026#34;:{\u0026#34;Host\u0026#34;:\u0026#34;\u0026lt;DOMAIN\u0026gt;\u0026#34;}},\u0026#34;externalProxy\u0026#34;:[{\u0026#34;dest\u0026#34;:\u0026#34;\u0026lt;DOMAIN\u0026gt;\u0026#34;,\u0026#34;port\u0026#34;:443,\u0026#34;forceTls\u0026#34;:\u0026#34;tls\u0026#34;,\u0026#34;sni\u0026#34;:\u0026#34;\u0026lt;DOMAIN\u0026gt;\u0026#34;,\u0026#34;hostHeader\u0026#34;:\u0026#34;\u0026lt;DOMAIN\u0026gt;\u0026#34;,\u0026#34;remark\u0026#34;:\u0026#34;cf-cdn\u0026#34;}]}) sniff = json.dumps({\u0026#34;enabled\u0026#34;:True,\u0026#34;destOverride\u0026#34;:[\u0026#34;http\u0026#34;,\u0026#34;tls\u0026#34;,\u0026#34;quic\u0026#34;]}) # 不要配 fingerprint cur.execute(\u0026#34;INSERT INTO inbounds (user_id,up,down,total,remark,enable,listen,port,protocol,settings,stream_settings,tag,sniffing,node_id,share_addr_strategy,share_addr,disable_flow) VALUES (1,0,0,0,\u0026#39;vless-ws-cf\u0026#39;,1,\u0026#39;\u0026#39;,\u0026lt;WSPORT\u0026gt;,\u0026#39;vless\u0026#39;,?,?,?,\u0026#39;inbound-\u0026lt;WSPORT\u0026gt;-ws\u0026#39;,NULL,\u0026#39;node\u0026#39;,\u0026#39;\u0026#39;,0)\u0026#34;, (settings,stream,sniff)) iid = cur.lastrowid cur.execute(\u0026#34;INSERT INTO clients (email,sub_id,uuid,security,enable,created_at,updated_at) VALUES (?,?,?,\u0026#39;auto\u0026#39;,1,?,?)\u0026#34;, (EM,SUB,U,now,now)) cid = cur.lastrowid cur.execute(\u0026#34;INSERT INTO client_inbounds (client_id,inbound_id,flow_override,created_at) VALUES (?,?,\u0026#39;\u0026#39;,?)\u0026#34;, (cid,iid,now)) cur.execute(\u0026#34;INSERT INTO client_traffics (inbound_id,enable,email,up,down,expiry_time,total) VALUES (?,1,?,0,0,0,0)\u0026#34;, (iid,EM)) db.commit(); print(\u0026#34;inbound=%d client=%d\u0026#34; % (iid,cid)) PY systemctl start x-ui; sleep 8 ss -tlnp | grep \u0026#34;:\u0026lt;WSPORT\u0026gt; \u0026#34; # 应看到 xray 主进程在监听 jq -c \u0026#39;[.inbounds[]|select(.port==\u0026lt;WSPORT\u0026gt;)|{tag,clients:(.settings.clients|length)}]\u0026#39; /usr/local/x-ui/bin/config.json 两个致命细节,踩过才知道疼:\nnode_id 必须是 NULL,不能填 0。 xray 配置生成逻辑对 NodeID != nil 的入站直接跳过——0 是非 nil 指针,整行被静默忽略且零日志。NULL 才等于「由本机 xray 承载」。建完必须用上面两行命令核验监听与配置真的存在。 入站用户列表是三表 JOIN 出来的(clients + client_inbounds + client_traffics),settings JSON 里内嵌的 clients 数组会被覆写。三表都要插齐,email 和 uuid 保持一致,缺一行 = 握手静默失败零日志。 externalProxy 字段的作用:让面板生成的分享链接呈现 CDN 形状(\u0026lt;DOMAIN\u0026gt;:443 + tls),运行时自动剥离,不影响 xray 本体。\n第 4 步:上传证书,建 proxy host(全部走 API) 证书上传的字段名是 certificate / certificate_key,不是直觉的 cert_file:\nTOK=$(curl -s -X POST http://127.0.0.1:81/api/tokens -H \u0026#34;Content-Type: application/json\u0026#34; -d \u0026#34;{\\\u0026#34;identity\\\u0026#34;:\\\u0026#34;admin@\u0026lt;DOMAIN\u0026gt;\\\u0026#34;,\\\u0026#34;secret\\\u0026#34;:\\\u0026#34;$(grep ^password /root/npm-creds.txt | cut -d\u0026#39; \u0026#39; -f2)\\\u0026#34;}\u0026#34; | jq -r .token) CID=$(curl -s -X POST http://127.0.0.1:81/api/nginx/certificates -H \u0026#34;Authorization: Bearer $TOK\u0026#34; -H \u0026#34;Content-Type: application/json\u0026#34; -d \u0026#39;{\u0026#34;provider\u0026#34;:\u0026#34;other\u0026#34;,\u0026#34;nice_name\u0026#34;:\u0026#34;\u0026lt;DOMAIN\u0026gt;-cf-origin\u0026#34;}\u0026#39; | jq -r .id) curl -s -X POST http://127.0.0.1:81/api/nginx/certificates/$CID/upload -H \u0026#34;Authorization: Bearer $TOK\u0026#34; \\ -F certificate=@certs/\u0026lt;DOMAIN\u0026gt;/fullchain.pem -F certificate_key=@certs/\u0026lt;DOMAIN\u0026gt;/privkey.pem 然后建 host。先传证书再建 host——顺序反了,conf 会写成 .conf.err 且重启不会重新生成。.conf.err 的复活术:证书补传成功后 mv N.conf.err N.conf 再 docker exec nginx-proxy-manager nginx -s reload(NPM 只在 host 增改删时重写 conf):\nmkhost(){ curl -s -X POST http://127.0.0.1:81/api/nginx/proxy-hosts -H \u0026#34;Authorization: Bearer $TOK\u0026#34; -H \u0026#34;Content-Type: application/json\u0026#34; -d \u0026#34;$1\u0026#34; | jq -r \u0026#39;if .id then \u0026#34;OK \u0026#34;+(.domain_names|join(\u0026#34;,\u0026#34;)) else (.error.message) end\u0026#39;; } # 1) 裸域 → xray ws(websocket 升级头靠 host 级 allow_websocket_upgrade) mkhost \u0026#34;$(jq -nc --argjson cid $CID \u0026#39;{domain_names:[\u0026#34;\u0026lt;DOMAIN\u0026gt;\u0026#34;],forward_scheme:\u0026#34;http\u0026#34;,forward_host:\u0026#34;172.17.0.1\u0026#34;,forward_port:\u0026lt;WSPORT\u0026gt;,certificate_id:$cid,ssl_forced:true,http2_support:true,hsts_enabled:false,caching_enabled:false,block_exploits:true,allow_websocket_upgrade:true,meta:{}}\u0026#39;)\u0026#34; # 2) nginx.\u0026lt;DOMAIN\u0026gt; → NPM 自身管理界面 mkhost \u0026#34;$(jq -nc --argjson cid $CID \u0026#39;{domain_names:[\u0026#34;nginx.\u0026lt;DOMAIN\u0026gt;\u0026#34;],forward_scheme:\u0026#34;http\u0026#34;,forward_host:\u0026#34;127.0.0.1\u0026#34;,forward_port:81,certificate_id:$cid,ssl_forced:true,http2_support:true,hsts_enabled:false,caching_enabled:false,allow_websocket_upgrade:true,meta:{}}\u0026#39;)\u0026#34; # 3) xui.\u0026lt;DOMAIN\u0026gt; → 3x-ui 面板 mkhost \u0026#34;$(jq -nc --argjson cid $CID \u0026#39;{domain_names:[\u0026#34;xui.\u0026lt;DOMAIN\u0026gt;\u0026#34;],forward_scheme:\u0026#34;http\u0026#34;,forward_host:\u0026#34;172.17.0.1\u0026#34;,forward_port:\u0026lt;PPORT\u0026gt;,certificate_id:$cid,ssl_forced:true,http2_support:true,hsts_enabled:false,caching_enabled:false,allow_websocket_upgrade:true,meta:{}}\u0026#39;)\u0026#34; NPM 容器访问宿主机上的服务(3x-ui、xray 入站),forward_host 必须写 docker 桥地址 172.17.0.1,写 127.0.0.1 会打到容器自己身上。compose 建的网络在 172.18.x,docker0 在 172.17.x——所以防火墙要放行整个私网段:\nufw allow 80/tcp comment \u0026#39;NPM http\u0026#39;; ufw allow 443/tcp comment \u0026#39;NPM https\u0026#39; ufw allow from 172.16.0.0/12 to any port \u0026lt;WSPORT\u0026gt; proto tcp comment \u0026#39;docker bridges to x-ui xray ws\u0026#39; ufw allow from 172.16.0.0/12 to any port \u0026lt;PPORT\u0026gt; proto tcp comment \u0026#39;docker bridges to x-ui panel\u0026#39; \u0026lt;WSPORT\u0026gt; 和 \u0026lt;PPORT\u0026gt; 公网侧默认 deny 即被挡住。验证防火墙务必从外部机器测,本机上 /dev/tcp/\u0026lt;ORIGIN_IP\u0026gt;/port 走 lo 恒通,结果失真。\n第 5 步:客户端与验收 到面板里刷新后复制实际生成的分享链接(期望形状如下,但手工拼链接不算验收,必须核对面板/订阅实际输出):\nvless://\u0026lt;UUID\u0026gt;@\u0026lt;DOMAIN\u0026gt;:443?encryption=none\u0026amp;security=tls\u0026amp;sni=\u0026lt;DOMAIN\u0026gt;\u0026amp;type=ws\u0026amp;host=\u0026lt;DOMAIN\u0026gt;\u0026amp;path=\u0026lt;WSPATH\u0026gt;#\u0026lt;DOMAIN\u0026gt;-ws-cf TLS 分层要看清:后端入站 security=none,公网客户端经 NPM/CF 走 TLS,externalProxy 描述的是公网入口形状。WS Host 从 wsSettings.host 读,别指望 externalProxy.hostHeader 会被分享生成器采用。\nCF 边缘连通性速查:\ncurl -s -o /dev/null -w \u0026#34;%{http_code}\\n\u0026#34; https://\u0026lt;DOMAIN\u0026gt;/ # 400/404(xray 应答,预期) curl -s -o /dev/null -w \u0026#34;%{http_code}\\n\u0026#34; https://nginx.\u0026lt;DOMAIN\u0026gt;/ # 200 # ws 握手探测:带升级头打真实 path,返 400 = 链路通(xray 拒假握手属预期) curl -s --resolve \u0026lt;DOMAIN\u0026gt;:443:127.0.0.1 -H \u0026#34;Connection: Upgrade\u0026#34; -H \u0026#34;Upgrade: websocket\u0026#34; \\ -o /dev/null -w \u0026#34;%{http_code}\\n\u0026#34; https://\u0026lt;DOMAIN\u0026gt;\u0026lt;WSPATH\u0026gt; 但这些都只是分层探测,唯一可信的验收是硬验收:在目标网络环境跑真实内核,https://www.google.com 返回 200,且 https://ifconfig.me 显示出口 IP 为 \u0026lt;ORIGIN_IP\u0026gt;。假握手 400 或根路径 404 不能替代它。\n无头复用法(适合拿台干净 Linux 当测试机):从 v2rayN 目录取 xray 二进制,按分享链接参数生成一个 socks 入站在 10888 的 client config,然后:\ncurl --socks5-hostname 127.0.0.1:10888 -o /dev/null -w \u0026#34;%{http_code}\\n\u0026#34; https://www.google.com curl --socks5-hostname 127.0.0.1:10888 https://ifconfig.me 避坑表(全部实测,含根因) # 坑 解 1 手工插库的入站被静默跳过、无日志 node_id 必须 NULL;建后核验 ss 监听 + config.json 2 3x-ui 面板 API POST 一律 403 空体,账密对错都一样 CSRF 中间件在密码校验前拒绝;token 在 /csrf-token 响应的 .obj 字段,不是 .token 3 NPM :latest 不 seed 管理员;只建 user+auth 则 API 全 403 三表插齐:user + auth + user_permission 4 证书上传报 \u0026ldquo;Certificate file was not provided\u0026rdquo; multipart 字段名 certificate/certificate_key 5 host conf 成了 .conf.err 且重启不恢复 证书先于 host 上传;已成 .err 则 rename + reload 6 nginx 反代宿主机服务超时 forward_host 写 172.17.0.1;ufw 放行 172.16.0.0/12 7 CF 526(Invalid SSL certificate) strict 下证书须当前账号签发、未吊销、SAN 匹配 8 bash 双引号包 SQL 吞掉 JSON 双引号,语句截断 python sqlite3 参数化,或 quoted heredoc 9 VLESS 用户列表对不上 clients JOIN client_inbounds 生成,三表都要插齐且 email/uuid 一致 10 面板二维码报 \u0026ldquo;no subId, no shareable link\u0026rdquo; clients 表 sub_id 列与 settings JSON 的 subId 都要填;外发订阅还需 subURI 设置 11 分享链接里出现面板域名、后端端口或 security=none 补 externalProxy 的 dest/port/forceTls/sni;WS Host 配 wsSettings.host 与 headers.Host 12 面板 UI 里重置过 UUID,已保存的直链失效 直链以数据库为准重建,或引导走订阅链接(自动跟随) 13 WS 经 CF 空闲断连 免费档超时不可调,客户端开心跳;CF 重启断连属正常 运维备忘 Origin CA 证书 15 年有效,免续期;换证书只需重传 + reload。 换 WS path 或 UUID:改数据库三表 → 重启 x-ui → 重发链接。 CF 排查顺序:526(证书)→ 521/522(源站 80/443 不通)→ 客户端 502(加密模式掉到 Flexible,务必 Full 以上)。 所有凭据落盘 600 权限,git 仓库里只记路径不记真值。 这套手册本身是我维护的一份部署 skill 的公开版——原版供我自己的 agent 直接执行,这份去掉了所有环境特定值。照抄命令时留意把占位符全部替换干净,尤其散落在 JSON 里的 \u0026lt;DOMAIN\u0026gt;。\n下载 手册的完整 skill 版(含 frontmatter,可直接给 agent 用)打包在这里:\nvless-ws-tls-cf-vps.zip:解压得 vless-ws-tls-cf-vps/SKILL.md,放进 ~/.claude/skills/(或项目的 .claude/skills/)即可作为 agent skill 使用 vless-ws-tls-cf-vps.skill.md:同内容纯文本,直接在线看或复制 文件与本文同源维护;如果发现命令对不上当前版本的 3x-ui / NPM,以各自官方文档为准。\n","permalink":"https://www.399041.xyz/posts/vless-ws-tls-cf-playbook/","summary":"\u003cp\u003e便宜 VPS 的宿命之一是 IP 被墙:SSH、面板、代理全挂,国内直连丢包率感人。但只要域名还在、机器还活着,流量就可以改走 Cloudflare CDN 中转——墙挡的是 IP,挡不住遍布全球的 CF 边缘节点。\u003c/p\u003e\n\u003cp\u003e这套方案我在 1G 内存的小机器上端到端跑通过,下面是完整手册,命令均可直接复制。所有敏感值用占位符表示,动手前先通读一遍占位符表。\u003c/p\u003e\n\u003ch2 id=\"链路\"\u003e链路\u003c/h2\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e客户端(v2rayN 等)\n   → CF 边缘(\u0026lt;DOMAIN\u0026gt;,橙云,Full strict)\n   → NPM(docker, 443, Cloudflare Origin CA 证书)\n   → 127.0.0.1 docker 桥:\u0026lt;WSPORT\u0026gt;(3x-ui 主 xray 的 VLESS+WS 入站,无 TLS)\n   → freedom 出网\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e核心思路:客户端与 CF 之间、CF 与源站之间都是 TLS(WebSocket 载荷),源站上的 xray 入站本身不加密——TLS 由 NPM 统一终结,一张证书服务所有子域。\u003c/p\u003e\n\u003ch2 id=\"占位符表\"\u003e占位符表\u003c/h2\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e占位符\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e含义\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e示例形状\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e\u0026lt;DOMAIN\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e你的裸域\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eexample.com\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e\u0026lt;ORIGIN_IP\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eVPS 公网 IP\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e203.0.113.10\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e\u0026lt;PPORT\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e3x-ui 面板端口(随机高位)\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e45678\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e\u0026lt;WSPORT\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eVLESS+WS 入站端口(随机高位)\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e23456\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e随机高位端口的生成习惯:\u003ccode\u003eshuf -i 10000-65000 -n 1\u003c/code\u003e,避开已占用即可。\u003c/p\u003e","title":"IP 被墙 VPS 自救:VLESS+WS+TLS+Cloudflare 全链路手册"},{"content":"用 AI 工具做实验最大的敌人不是模型不够聪明,而是同样的坑踩第二遍。这一年我逐渐收敛出一套记录方法,核心只有一条:实验结束的瞬间就是记录的截止时间。这篇把这个方法拆开讲清楚,附上我实际使用的模板。\n为什么随手记不行 折腾的过程天然碎片化:查文档、改配置、跑命令、失败了换思路。如果打算「事后再整理」,几乎注定不会发生——下次想起来时,上下文已经丢了,能记起来的只有「当时搞定了」,而当时怎么搞定的、为什么别的路不通,全忘了。\n所以我把标准定为:一个实验算不算完成,不看功能跑没跑通,看档案文档写没写完。跑通但没落盘的实验,视为未完成。\n记录的三层结构 我的记录分三层,粒度从粗到细:\n档案(archive):一台机器、一套服务一份文档,记录链路拓扑、关键路径、凭据位置(只记位置,不记真值)。 坑点表(pitfalls):每条记录「现象 → 根因 → 解法」,根因写到源码行为级别。比如「NPM v3 登录后 API 全 403」不够,要写成「user_permission 表缺行导致 access.js 构造校验数据时空引用」。 Skill:当一套流程被第二次执行,就把它从档案里提炼成 agent 可直接执行的 skill,坑点表内嵌其中。 三层的流转关系如下:\n关键在于箭头方向:坑点是从失败里长出来的,不是抄别人的最佳实践。我管这个闭环叫坑点反哺——每次踩坑都让下一次「不用再踩」的资产变厚一点。\n档案文档的模板 一份能用的档案不需要花哨,我固定用这几个段落:\n# \u0026lt;机器/服务名\u0026gt; \u0026lt;主题\u0026gt; 档案 ## 链路 (ASCII 图:入口 → 中间层 → 出口,标注端口与协议) ## 组件清单 | 组件 | 位置 | 说明 | ## 安全状态 (防火墙规则、凭据文件路径——只写路径) ## 坑(实测,含根因) | # | 坑 | 解 | ## 验证命令速查 (可直接复制执行的 curl/ssh 命令) 最有价值的是最后两段。「验证命令速查」意味着任何人(包括未来的我、包括 agent)拿到文档就能** objectively 判断服务是否健康**,不用重新推理。\n坑点要写到根因级 「重启后恢复」式的解法记录是负资产:它让下次遇到同样问题时优先怀疑错方向。我的经验是至少追问一层——能读到源码就读源码,读不到就抓日志对比。\n一个真实例子:某面板 API 登录后所有 POST 一律 403 空响应体,账密对错都一样。如果停在「重启大法」,这条记录就废了。追下去的结论是:CSRF 中间件在密码校验之前就拒绝了请求,而且 token 藏在 /csrf-token 响应的 .obj 字段而不是直觉上的 .token。这一条坑点值三次排障时间。\n让 agent 接管重复流程 记录做到第三层(skill)之后,agent 的角色从「陪聊的助手」变成「拿着操作手册的执行者」。我的判定标准很朴素:\n一个新 agent,不依赖本次对话的任何记忆, 只读档案和 skill,能不能独立完成整件事? 能,这套记录才算数。为此 skill 里必须包含验收标准(什么命令、期望什么输出),而不是「配置完成后检查一下」。验收命令必须是可以机械执行的,比如「curl 公网地址返回 200 且出口 IP 为本机」,而不是「确认能访问」。\n密钥红线 所有记录只有一个硬约束:凭据真值永远不进 git。档案里只写「密码在哪个文件」,文件权限 600,路径进 .gitignore。宁可多一次 cat,不冒一次泄漏。\n这套方法没有技术门槛,难的只是纪律:踩坑的当时多花十分钟把它写下来。复利在第二个月开始显现——那时候你会发现,新问题的排障时间,主要取决于档案里已经有什么。\n","permalink":"https://www.399041.xyz/posts/ai-experiment-logging-method/","summary":"\u003cp\u003e用 AI 工具做实验最大的敌人不是模型不够聪明,而是同样的坑踩第二遍。这一年我逐渐收敛出一套记录方法,核心只有一条:\u003cstrong\u003e实验结束的瞬间就是记录的截止时间\u003c/strong\u003e。这篇把这个方法拆开讲清楚,附上我实际使用的模板。\u003c/p\u003e\n\u003ch2 id=\"为什么随手记不行\"\u003e为什么随手记不行\u003c/h2\u003e\n\u003cp\u003e折腾的过程天然碎片化:查文档、改配置、跑命令、失败了换思路。如果打算「事后再整理」,几乎注定不会发生——下次想起来时,上下文已经丢了,能记起来的只有「当时搞定了」,而当时怎么搞定的、为什么别的路不通,全忘了。\u003c/p\u003e\n\u003cp\u003e所以我把标准定为:一个实验算不算完成,不看功能跑没跑通,看\u003cstrong\u003e档案文档写没写完\u003c/strong\u003e。跑通但没落盘的实验,视为未完成。\u003c/p\u003e\n\u003ch2 id=\"记录的三层结构\"\u003e记录的三层结构\u003c/h2\u003e\n\u003cp\u003e我的记录分三层,粒度从粗到细:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e档案(archive)\u003c/strong\u003e:一台机器、一套服务一份文档,记录链路拓扑、关键路径、凭据位置(只记位置,不记真值)。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e坑点表(pitfalls)\u003c/strong\u003e:每条记录「现象 → 根因 → 解法」,根因写到源码行为级别。比如「NPM v3 登录后 API 全 403」不够,要写成「\u003ccode\u003euser_permission\u003c/code\u003e 表缺行导致 access.js 构造校验数据时空引用」。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSkill\u003c/strong\u003e:当一套流程被第二次执行,就把它从档案里提炼成 agent 可直接执行的 skill,坑点表内嵌其中。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e三层的流转关系如下:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"记录三层结构的流转\" loading=\"lazy\" src=\"/posts/ai-experiment-logging-method/loop.svg\"\u003e\u003c/p\u003e\n\u003cp\u003e关键在于箭头方向:坑点是从失败里长出来的,不是抄别人的最佳实践。我管这个闭环叫\u003cstrong\u003e坑点反哺\u003c/strong\u003e——每次踩坑都让下一次「不用再踩」的资产变厚一点。\u003c/p\u003e\n\u003ch2 id=\"档案文档的模板\"\u003e档案文档的模板\u003c/h2\u003e\n\u003cp\u003e一份能用的档案不需要花哨,我固定用这几个段落:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# \u0026lt;机器/服务名\u0026gt; \u0026lt;主题\u0026gt; 档案\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 链路\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(ASCII 图:入口 → 中间层 → 出口,标注端口与协议)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 组件清单\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 组件 | 位置 | 说明 |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 安全状态\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(防火墙规则、凭据文件路径——只写路径)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 坑(实测,含根因)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| # | 坑 | 解 |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 验证命令速查\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(可直接复制执行的 curl/ssh 命令)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e最有价值的是最后两段。「验证命令速查」意味着任何人(包括未来的我、包括 agent)拿到文档就能** objectively 判断服务是否健康**,不用重新推理。\u003c/p\u003e","title":"把折腾落盘:我的 AI 实验记录方法"},{"content":"这是我的 AI 实验记录站。我叫 Joey,平时把大把时间花在「让 AI 工具替我干活」这件事上:自建基础设施、写自动化流程、把重复劳动固化成 agent 可复用的知识。\n这里记录的内容全部来自我真实做过的事,不搬运、不编造。一篇文章能发出来,意味着它描述的流程或结论至少被我端到端验证过一遍。\n站点本身也是一次实验:由 Hugo + PaperMod 生成纯静态页面,部署在自管 VPS 上,不依赖任何托管平台。运维细节我单独落了档案,这里只放公开内容。\n","permalink":"https://www.399041.xyz/about/","summary":"\u003cp\u003e这是我的 AI 实验记录站。我叫 Joey,平时把大把时间花在「让 AI 工具替我干活」这件事上:自建基础设施、写自动化流程、把重复劳动固化成 agent 可复用的知识。\u003c/p\u003e\n\u003cp\u003e这里记录的内容全部来自我真实做过的事,不搬运、不编造。一篇文章能发出来,意味着它描述的流程或结论至少被我端到端验证过一遍。\u003c/p\u003e\n\u003cp\u003e站点本身也是一次实验:由 \u003ca href=\"https://gohugo.io/\"\u003eHugo\u003c/a\u003e + \u003ca href=\"https://github.com/adityatelange/hugo-PaperMod\"\u003ePaperMod\u003c/a\u003e 生成纯静态页面,部署在自管 VPS 上,不依赖任何托管平台。运维细节我单独落了档案,这里只放公开内容。\u003c/p\u003e","title":"关于"},{"content":"这一页说明我目前在记录的项目方向。每个方向都对应我在真实维护的东西;等某个项目适合公开了,再补上链接。\n基础设施自动化 用 agent(Claude Code 一类)管理自己的服务器群:从 VPS 初始化、代理搭建到部署发布,把每次折腾的经验写成档案和可复用的 skill,让下一次部署由 agent 按档案直接执行。这个站点的上线就是这套流程的一次完整跑通。\nAI 工具链与知识管理 研究怎么让 agent 有持久记忆:哪些经验值得落盘、以什么结构落盘、什么时候被自动召回。本质上是在给「我 + agent」这个组合建一个外部大脑。\n自托管服务 域名、TLS、反向代理、私有云盘、订阅分发——能在自己 VPS 上跑且可控的服务,尽量不交给第三方。代价是每个组件都要自己排障,所以坑点记录是这一块的特产。\n","permalink":"https://www.399041.xyz/projects/","summary":"\u003cp\u003e这一页说明我目前在记录的项目方向。每个方向都对应我在真实维护的东西;等某个项目适合公开了,再补上链接。\u003c/p\u003e\n\u003ch2 id=\"基础设施自动化\"\u003e基础设施自动化\u003c/h2\u003e\n\u003cp\u003e用 agent(Claude Code 一类)管理自己的服务器群:从 VPS 初始化、代理搭建到部署发布,把每次折腾的经验写成档案和可复用的 skill,让下一次部署由 agent 按档案直接执行。这个站点的上线就是这套流程的一次完整跑通。\u003c/p\u003e\n\u003ch2 id=\"ai-工具链与知识管理\"\u003eAI 工具链与知识管理\u003c/h2\u003e\n\u003cp\u003e研究怎么让 agent 有持久记忆:哪些经验值得落盘、以什么结构落盘、什么时候被自动召回。本质上是在给「我 + agent」这个组合建一个外部大脑。\u003c/p\u003e\n\u003ch2 id=\"自托管服务\"\u003e自托管服务\u003c/h2\u003e\n\u003cp\u003e域名、TLS、反向代理、私有云盘、订阅分发——能在自己 VPS 上跑且可控的服务,尽量不交给第三方。代价是每个组件都要自己排障,所以坑点记录是这一块的特产。\u003c/p\u003e","title":"项目"}]