<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agent on PlumePHP</title><link>https://plumephp.com/categories/agent/</link><description>Recent content in Agent on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 14 Oct 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/categories/agent/index.xml" rel="self" type="application/rss+xml"/><item><title>《AI Agent 高级编程》11.1 平台化：Agent 注册、版本与配额</title><link>https://plumephp.com/agent-advanced-11-1-platformization/</link><pubDate>Sat, 10 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-11-1-platformization/</guid><description>把单实例 ResearchCopilot 推进成多 Agent 平台：用一份可运行的注册表实现 Agent 的注册、发现与 semver 版本路由，再用配额账本在调用前完成扣减与拒绝。附真跑输出，并给出「平台替你做了什么、你又让渡了什么」的对照表。</description></item><item><title>《AI Agent 高级编程》11.2 真实 API 冒烟：假模型 vs 真模型量化差距</title><link>https://plumephp.com/agent-advanced-11-2-real-vs-fake-gap/</link><pubDate>Sat, 10 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-11-2-real-vs-fake-gap/</guid><description>全卷都在用假模型跑确定性对照，但「假模型全绿」到底能不能代表上线质量？本节给出一套可运行的对照 harness：同评测集、同评分器，先真跑出假模型列的数字，再把真模型列留空、显式标注「需用户授权后运行 --real 才填」，并逐条列出假模型量不出的五件事及其度量方法。</description></item><item><title>《AI Agent 高级编程》11.3 全景回顾：从零到框架的完整路径与展望</title><link>https://plumephp.com/agent-advanced-11-3-panorama-review/</link><pubDate>Sat, 10 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-11-3-panorama-review/</guid><description>三卷本收官：把卷一的 minagent（从零手写）、卷二的 ResearchCopilot（工程化服务）与卷三的框架重写与生产化串成一条线，用一张「能力 × 卷 × 视角」总表看清各自的位置与取舍，回顾卷三 11 章各自解决了什么，并给出从零到框架的完整路径与下一步展望。</description></item><item><title>《AI Agent 高级编程》目录</title><link>https://plumephp.com/agent-advanced-toc/</link><pubDate>Sat, 10 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-toc/</guid><description>《AI Agent 高级编程》全书导航页：说明本卷定位与前置知识、五到六周学习节奏与三条阅读路径，交代「用框架重写 ResearchCopilot」的主线、与卷一、卷二的关系及「与既有 AI 专题的分工」，并按五个部分列出 11 章 33 节的完整章节索引，另含常见问题速查表。</description></item><item><title>《AI Agent 工程实战》18.1 容量与架构评审清单</title><link>https://plumephp.com/agent-practice-18-1-capacity-review/</link><pubDate>Sat, 10 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-18-1-capacity-review/</guid><description>收官章先把全卷散落的工程决策收成一份可执行清单：接口与契约、数据与一致性、并发与资源、可观测与告警、安全与合规五组，每条给出可判定的通过标准。再给一套容量估算方法，用一个真跑的脚本代入具体参数，算出每日 token、模型成本、DB 增速、Redis 内存与 worker 数。</description></item><item><title>《AI Agent 工程实战》18.2 故障演练：模型超时/DB 宕机/队列积压</title><link>https://plumephp.com/agent-practice-18-2-failure-drills/</link><pubDate>Sat, 10 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-18-2-failure-drills/</guid><description>设计三个受控故障演练：模型超时（假模型注入延迟，验证超时止损与降级链）、DB 不可达（连不存在的端口，验证 readiness 摘流量与明确报错）、队列积压（往队列塞远超消费能力的任务，验证背压与告警）。每个都写清注入方式、预期表现、观测点、恢复动作与复盘问题，并逐个在本机真跑贴出日志、耗时与队列深度，最后给出复盘模板表。</description></item><item><title>《AI Agent 工程实战》18.3 上线、观察与迭代 + 真实 API 端到端冒烟（可选）</title><link>https://plumephp.com/agent-practice-18-3-launch-iterate/</link><pubDate>Sat, 10 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-18-3-launch-iterate/</guid><description>收官节分三块收束全卷：上线检查单、上线后的观察节奏（第 1 小时/第 1 天/第 1 周各看什么、何时回滚）、把线上失败与成本异常回流成评测样本与优化项的迭代闭环。再给出可选的真实 API 端到端冒烟流程与代码，明确标注需自备密钥、本机未执行，并用假模型跑同一脚本做离线等价验证，最后给全卷回顾与通往卷三的路线。</description></item><item><title>《AI Agent 工程实战》目录</title><link>https://plumephp.com/agent-practice-toc/</link><pubDate>Sat, 10 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-toc/</guid><description>《AI Agent 工程实战》全书导航页：说明本卷定位、读者画像与前置知识、六到八周学习节奏与三条阅读路径，交代贯穿项目 ResearchCopilot 与「与既有 AI 专题的分工」，并按六个部分列出 18 章 54 节的完整章节索引，另含常见问题速查表与通往卷三的路线。</description></item><item><title>《AI Agent 开发入门》18.1 端到端</title><link>https://plumephp.com/agent-intro-18-1-end-to-end/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-18-1-end-to-end/</guid><description>五轮脚本走 search→read→search→read→final，串联保护循环、固定资料、词面引用候选、span、示例账单和评分。它是模块接线验证，不是真实模型检索质量评测。observed_run 复用 run 并检查停止；合成 usage 合计 input=1640、output=128，示例每百万 3/15 USD 得 0.00684 USD。数字是脚本账单，不是实测 API 成本。</description></item><item><title>《AI Agent 开发入门》18.2 真实 API 冒烟（可选）</title><link>https://plumephp.com/agent-intro-18-2-real-api-smoke/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-18-2-real-api-smoke/</guid><description>smoke_live.py 默认只提示离线入口；显式 --live 后才创建 SDK 请求。模型从参数或环境获取，不把演示 id 当成真实可用型号。可选 --record 保存原始模型响应，并写实际 UTC 时间和 origin=live；文件限制权限，仍可能含敏感数据，发布前需要脱敏。demo_recorded.py 只用 origin=synthetic 人工夹具。</description></item><item><title>《AI Agent 开发入门》18.3 回顾与路线</title><link>https://plumephp.com/agent-intro-18-3-retrospective/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-18-3-retrospective/</guid><description>本节收束卷一：把 minagent 从 20 行循环长成完整模块的 18 章推进逐条盘清，讲明「从零手写」得到了什么、还差什么，预告卷二（服务化、持久化、并发、可观测、评测回归、部署）与卷三（框架重写、durable execution、computer use、A2A、Agent RL），并给出一份「学完卷一你应该能回答」的自测清单。</description></item><item><title>《AI Agent 开发入门》前言</title><link>https://plumephp.com/agent-intro-preface/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-preface/</guid><description>《AI Agent 开发入门》前言：说明本书的目标读者与前置知识、六部分 18 章的结构分工、每一节的组织方式，交代 Python 3.14 主线与 TypeScript 对照线的版本口径、venv 与假模型零凭据的运行方式，预告入门/实战/高级三卷结构，并说明本书与站内既有 AI 专题的分工。</description></item><item><title>《AI Agent 开发入门》序</title><link>https://plumephp.com/agent-intro-foreword/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-foreword/</guid><description>《AI Agent 开发入门》的序。从大模型「会聊天」到「会做事」的转折谈起，说明 Agent 工程在可靠性、可观测、成本与安全四个方向的真实难点，解释为什么本书选择「从零手写 + 假模型确定性复现」这条路线，并交代本书与站内既有 AI 专题的分工与不同起点的读者该从哪里进入。</description></item><item><title>《AI Agent 开发入门》目录</title><link>https://plumephp.com/agent-intro-toc/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-toc/</guid><description>《AI Agent 开发入门》全书导航页：说明本卷定位、读者画像与前置知识、八到九周学习节奏与三条阅读路径，交代贯穿项目 minagent 与「与既有 AI 专题的分工」，并按六个部分列出 18 章 54 节的完整章节索引，另含序、前言、附录 A–D 与常见问题速查表，方便读者按需定位、跳读与随时查阅。</description></item><item><title>《AI Agent 开发入门》附录 A.minagent API 与模块速查</title><link>https://plumephp.com/agent-intro-appendix-a-api-cheatsheet/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-appendix-a-api-cheatsheet/</guid><description>核对全卷项目公开 API、模块归属、停止条件、会话、预算与计费边界，提供已复现项目与运行入口。</description></item><item><title>《AI Agent 开发入门》附录 B.FakeModel 脚本与测试夹具速查</title><link>https://plumephp.com/agent-intro-appendix-b-fakemodel-cheatsheet/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-appendix-b-fakemodel-cheatsheet/</guid><description>整理 FakeModel、合成夹具与真实录制的区别，提供标准库回归、练习验收点及已运行的参考检查。</description></item><item><title>《AI Agent 开发入门》附录 C.环境与离线复现速查</title><link>https://plumephp.com/agent-intro-appendix-c-environment-cheatsheet/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-appendix-c-environment-cheatsheet/</guid><description>区分标准库离线项目、可选 SDK/HTTP 环境和付费冒烟，明确版本、运行入口、SSE 与 TypeScript 验证边界。</description></item><item><title>《AI Agent 开发入门》附录 D.常见错误与 FAQ</title><link>https://plumephp.com/agent-intro-appendix-d-faq/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-appendix-d-faq/</guid><description>汇总本次完整项目复现中的启动、API、循环、预算、引用、取消、恢复和写操作边界，提供可执行排查路径。</description></item><item><title>《AI Agent 高级编程》10.1 统一可观测：三框架 trace 归一 OTel</title><link>https://plumephp.com/agent-advanced-10-1-unified-observability/</link><pubDate>Fri, 09 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-10-1-unified-observability/</guid><description>pydantic-ai 原生就吐 OTel span，smolagents 与 minagent 却只有各自的内部轨迹。本节在装了 opentelemetry-sdk 1.44.0 的环境里真跑：把三种来源的 trace 归一到一张中间表示，再统一 emit 成 GenAI 语义约定的 OTel span 树，并给出三框架 span 字段到 OTel 属性的逐项映射表。</description></item><item><title>《AI Agent 高级编程》10.2 成本与延迟治理：路由/缓存/并发 + 评测兜底</title><link>https://plumephp.com/agent-advanced-10-2-cost-latency-governance/</link><pubDate>Fri, 09 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-10-2-cost-latency-governance/</guid><description>路由、缓存、并发上限、降级——成本与延迟治理的四个旋钮，任何一个拧过头都会伤质量。本节用本地假模型真跑一条完整治理链：语义缓存命中即跳过、预算耗尽自动降级到小模型、Semaphore 把在飞请求压到上限内，再用评测集证明「降级后分数会掉」，并如实说明假模型为何量不出真实成本与延迟。</description></item><item><title>《AI Agent 高级编程》10.3 安全纵深：注入/越权/供应链审计</title><link>https://plumephp.com/agent-advanced-10-3-security-in-depth/</link><pubDate>Fri, 09 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-10-3-security-in-depth/</guid><description>提示注入、工具越权、供应链投毒——Agent 的安全面比传统应用多出一整层「把不可信文本当指令用」。本节给出攻击面 × 防护措施对照表，并真跑两个最小防线：输入侧剥离注入指令行、工具侧按收件人白名单拦截越权调用，再用审计轨迹证明每一次拦截都留痕可查。</description></item><item><title>《AI Agent 工程实战》17.1 流水线：lint/test/评测/构建串联</title><link>https://plumephp.com/agent-practice-17-1-pipeline/</link><pubDate>Fri, 09 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-17-1-pipeline/</guid><description>本节把 ResearchCopilot 的 CI 串成一条分阶段流水线：静态检查 → 单元测试 → 评测质量门 → 构建镜像，按「快先跑、贵后跑」排序。真跑 compileall、pytest、评测夹具回放与 docker build，打印每段真实退出码，给出一键脚本与 GitHub Actions 形态。</description></item><item><title>《AI Agent 工程实战》17.2 灰度与回滚：新提示/新模型小流量</title><link>https://plumephp.com/agent-practice-17-2-canary-rollback/</link><pubDate>Fri, 09 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-17-2-canary-rollback/</guid><description>Agent 服务的发布对象不只是代码，提示词、模型 ID、工具集、检索参数都是可发布的配置，改提示词的风险不低于改代码。本节设计按流量比例的灰度与自动回滚条件，真跑一个灰度路由器：新版正常时放量、新版劣化时按成功率/成本/P95 三个条件触发一键回滚，并演示影子流量。</description></item><item><title>《AI Agent 工程实战》17.3 版本与迁移：不中断 schema 迁移演练</title><link>https://plumephp.com/agent-practice-17-3-version-migration/</link><pubDate>Fri, 09 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-17-3-version-migration/</guid><description>灰度让新旧两版代码同时在跑，于是 schema 变更不能一删了事。本节讲 expand–contract 五阶段迁移法，并在本机 Postgres 17.11 上用 psycopg 真跑一遍：加新列、双写、回填、切读、删旧列，每阶段查询验证新旧两列一致，另演示 DDL 锁表与 CREATE INDEX CONCURRENTLY。</description></item><item><title>《AI Agent 开发入门》17.1 库的对外接口</title><link>https://plumephp.com/agent-intro-17-1-public-api/</link><pubDate>Fri, 09 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-17-1-public-api/</guid><description>本节把 minagent 从「一堆模块」整理成「一个库」：用 __init__.py 收敛出稳定的公开 API 面，用 __all__ 与下划线前缀划清公开契约与内部实现的边界，并定下 SemVer 版本策略——破坏性变更何时允许、哪些名字属于契约。最后用 import minagent as ma 真跑一段只碰公开面的稳定性示例。</description></item><item><title>《AI Agent 开发入门》17.2 HTTP 服务化</title><link>https://plumephp.com/agent-intro-17-2-fastapi-sse/</link><pubDate>Fri, 09 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-17-2-fastapi-sse/</guid><description>本节固定 FakeModel 只回答预设加法，验证 /run、/stream 与 OpenAPI 接线，不理解任意问题。HTTP/SDK 都是核心之外的可选环境。StreamingResponse 按帧传输不等于模型增量流；complete 阶段仍等完整响应。原生 EventSource 是 GET，本节 POST 用 fetch。同步线程不因连接断开就被杀死，真实服务需另设计异步调用和取消。</description></item><item><title>《AI Agent 开发入门》17.3 TS 落点一：同一协议的 TS 客户端</title><link>https://plumephp.com/agent-intro-17-3-ts-client/</link><pubDate>Fri, 09 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-17-3-ts-client/</guid><description>客户端用 fetch 发 POST，检查 HTTP 状态与 Content-Type，再逐字节解码并交给有状态 SSEParser。原生 EventSource 的 GET 接口不适合这个 POST 演示。空行才派发事件；流结束时 flush TextDecoder，未终止的残帧按规范丢弃。心跳注释忽略，帧长度与总请求时间有上限；finally 释放 reader。协议中的 id/retry 与自动重连尚未实现。</description></item><item><title>《AI Agent 高级编程》9.1 问题设定：轨迹、奖励与信用分配</title><link>https://plumephp.com/agent-advanced-09-1-rl-problem-setup/</link><pubDate>Thu, 08 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-09-1-rl-problem-setup/</guid><description>Agent 的强化学习不是给分类任务换个 loss。本节把 Agent 的多步交互形式化成轨迹（状态、动作、奖励序列），讲清奖励设计与信用分配——到底是哪一步的功劳。配一段可运行的轨迹与奖励数据结构，以及一个按折扣回报做信用归因、再按总回报给轨迹排序的离线小例子，真跑贴输出；全程不训练模型，不编造任何实验曲线。</description></item><item><title>《AI Agent 高级编程》9.2 从 SFT 到 RL：工具使用与多步推理训练流程</title><link>https://plumephp.com/agent-advanced-09-2-sft-to-rl/</link><pubDate>Thu, 08 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-09-2-sft-to-rl/</guid><description>SFT 教会模型「格式」，RL 才教会它「取舍」。本节讲清从监督微调到强化学习的完整流程，聚焦工具使用与多步推理：对比偏好奖励与可验证奖励，说明为什么「工具调用成功、引用可回溯」这类可自动判分的信号特别适合 Agent，并给出一个真跑的离线策略打分例子——给定若干轨迹与奖励函数，算出每条的分数并选出最优。</description></item><item><title>《AI Agent 高级编程》9.3 何时该训、何时调提示：成本收益决策清单</title><link>https://plumephp.com/agent-advanced-09-3-train-or-prompt/</link><pubDate>Thu, 08 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-09-3-train-or-prompt/</guid><description>训模型不是默认答案。本节给出一张「何时该训、何时调提示」的成本收益决策清单，把调提示、换模型、加工具、微调、RL 五种干预按成本与收益排开，说清每种手段的前置条件与失效场景；并配一个可运行的决策打分小脚本，对「冷启动无标注」与「有 5k 可验证轨迹」两种场景真跑排序，帮你在动手训之前先算清楚这笔账。</description></item><item><title>《AI Agent 工程实战》16.1 TS 落点三：Python + Node 双栈镜像瘦身</title><link>https://plumephp.com/agent-practice-16-1-dual-stack-image/</link><pubDate>Thu, 08 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-16-1-dual-stack-image/</guid><description>本节是 TS 落点三的上半场：把 ResearchCopilot 打成 Python + Node 双栈镜像。用多阶段构建分别产出 TS 前端产物与 Python 依赖，只把产物拷进运行时镜像；再叠加 .dockerignore、--no-cache-dir、slim 基础镜像与 digest 固定四个瘦身杠杆。Dockerfile 在本机真构建，贴出镜像体积、分层与容器内验证的真实输出。</description></item><item><title>《AI Agent 工程实战》16.2 本地编排：compose 起 API/worker/postgres/redis</title><link>https://plumephp.com/agent-practice-16-2-compose-orchestration/</link><pubDate>Thu, 08 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-16-2-compose-orchestration/</guid><description>上一节做出了 ResearchCopilot 的镜像，但一个镜像撑不起一个服务——它还要数据库、缓存和后台 worker。本节写 docker-compose.yml 编排这四个服务，讲清 depends_on 不等于「依赖就绪」（须配 healthcheck）、同一镜像靠 command 扮演 api/worker 两种角色。真跑 config 与 ps 起栈验证。</description></item><item><title>《AI Agent 工程实战》16.3 配置注入、健康检查与优雅退出</title><link>https://plumephp.com/agent-practice-16-3-config-health-shutdown/</link><pubDate>Thu, 08 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-16-3-config-health-shutdown/</guid><description>16.2 把服务编排起来了，但容器编排还有三件「看不见却致命」的事：配置怎么注入、健康检查怎么区分 liveness 与 readiness、收到 SIGTERM 后怎么优雅退出。本节讲清用环境变量注入配置、两条健康线各自的取舍、以及「停止接新请求→等在途 run 收尾→关连接池→退出」四步。用 uvicorn 0.54.0 + lifespan 真发 SIGTERM，贴出完整日志序列与参数表。</description></item><item><title>《AI Agent 开发入门》16.1 确定性测试</title><link>https://plumephp.com/agent-intro-16-1-deterministic-tests/</link><pubDate>Thu, 08 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-16-1-deterministic-tests/</guid><description>本节使用标准库 unittest，不要求 pytest。测试应验证工具顺序、模型实际收到的消息、受控停止和错误回灌，而不是只检查最终一句话。四个 BookTests 是教学入门用例；完整项目另有基础和扩展回归，覆盖并行、预算、恢复、批准、幂等与日志。测试通过只针对这些路径，不承诺不误报或没有其他缺陷。</description></item><item><title>《AI Agent 开发入门》16.2 评测集与打分</title><link>https://plumephp.com/agent-intro-16-2-eval-set-scoring/</link><pubDate>Thu, 08 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-16-2-eval-set-scoring/</guid><description>本节提供完整 Case、Score、Report 和 evaluate。修订示例使用两条固定用例：检索用例与已知失败用例，不再引用旧六条统计。权重非负且和为一，评测集不能空，case id 不能重复。AgentLoopError 保留部分失败轨迹；脚本耗尽属于运行失败，其他配置错误继续向上暴露。</description></item><item><title>《AI Agent 开发入门》16.3 对比实验</title><link>https://plumephp.com/agent-intro-16-3-ab-experiments/</link><pubDate>Thu, 08 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-16-3-ab-experiments/</guid><description>demo_ab.py 复用同一个评测模块，比较 max_steps 和人工设置的两版脚本。期望与评分规则保持相同，结果变化来自固定脚本行为。真实 A/B 应固定测试集和评分口径，随机分配配置、覆盖多次运行、记录模型版本与不确定性。一次一个变量有助归因，但不能代替随机化和统计检验。</description></item><item><title>《AI Agent 高级编程》8.1 A2A 协议：Agent Card/Task/消息，起两个本地 Agent 通信</title><link>https://plumephp.com/agent-advanced-08-1-a2a-protocol/</link><pubDate>Wed, 07 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-08-1-a2a-protocol/</guid><description>前七章讲的是单个 Agent 怎么用框架写得更好，可真实系统往往有多个 Agent。它们怎么互相发现、怎么把活儿交出去、怎么拿回结果？这正是 A2A（Agent2Agent）协议要解决的。本节先讲清 Agent Card、Task、Message、Artifact 四个核心对象与任务状态机，再用 Python 标准库起一个 A2A 服务端、由客户端发现并委派任务，把一次真实的任务往返贴出来。</description></item><item><title>《AI Agent 高级编程》8.2 与 MCP 分工：工具协议 vs 协作协议</title><link>https://plumephp.com/agent-advanced-08-2-a2a-vs-mcp/</link><pubDate>Wed, 07 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-08-2-a2a-vs-mcp/</guid><description>上一节把 A2A 跑通了，可很多人第一反应是：这跟 MCP 有什么区别？答案是它们解决的根本不是同一件事——MCP 是 Agent 连工具，A2A 是 Agent 连 Agent。本节用一张对照表把「解决什么、谁连谁、典型对象、有无状态、怎么发现、什么时候用哪个」逐项讲清，再真跑 MCP 与 A2A 两端的对象与调用，给出一张「该用哪个」的决策表与两者的组合形态。</description></item><item><title>《AI Agent 高级编程》8.3 跨语言 Agent：TS 实现 A2A 端与 Python 协作</title><link>https://plumephp.com/agent-advanced-08-3-cross-language-agent/</link><pubDate>Wed, 07 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-08-3-cross-language-agent/</guid><description>8.1 的 A2A 端是 Python 写的，可真实团队里另一半服务可能是 TypeScript。协议的价值正在于此：只要双方说同一种「线上语言」，语言就不重要。本节用 TypeScript（Node 26，只用可擦除语法）实现一个 A2A 端，与 8.1 的 Python 端跨语言真跑一次双向协作：TS 服务端被 Python 客户端调用，TS 客户端又反过来调用 Python 服务端。</description></item><item><title>《AI Agent 工程实战》15.1 输入侧：提示注入与越权工具拦截</title><link>https://plumephp.com/agent-practice-15-1-input-guardrails/</link><pubDate>Wed, 07 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-15-1-input-guardrails/</guid><description>本节给 ResearchCopilot 立起输入侧护栏：先讲清 Agent 特有的四个注入面，重点剖析检索文档里的间接注入为何最危险，再落分层防御——内容与指令分离、工具白名单与参数校验、危险动作人审、长度与频率限制。用一段自造的含注入指令假文档，真跑无防护版（删除真被执行）与有防护版（注入被当资料、危险工具被拦）两次轨迹。</description></item><item><title>《AI Agent 工程实战》15.2 输出侧：敏感信息、越狱与幻觉引用校验</title><link>https://plumephp.com/agent-practice-15-2-output-guardrails/</link><pubDate>Wed, 07 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-15-2-output-guardrails/</guid><description>本节给 ResearchCopilot 补上输出侧三道关：① 敏感信息用正则加结构化检测，命中就脱敏或拒答，并讨论误伤；② 越狱与不当内容靠独立于模型的检查层，不指望提示词；③ 幻觉引用校验把每条引用回语料核对（存在吗？支持吗？）。真跑三条答案，打印三道关各自的判定与最终处置，并给出校验项清单表。</description></item><item><title>《AI Agent 工程实战》15.3 审计与合规：不可篡改审计日志</title><link>https://plumephp.com/agent-practice-15-3-audit-compliance/</link><pubDate>Wed, 07 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-15-3-audit-compliance/</guid><description>本节讲清审计日志与普通日志的区别：普通日志可丢可采样，审计日志必须完整、必须能证明没被改过。用追加式加哈希链实现审计日志，每条记录带前一条的哈希，改任何一条都会让链断掉。真跑：写 5 条记录、校验链完整、篡改中间一条再校验，打印「第 N 条校验失败」，并给出审计字段表与保留策略表。</description></item><item><title>《AI Agent 开发入门》15.1 运行追踪</title><link>https://plumephp.com/agent-intro-15-1-run-tracing/</link><pubDate>Wed, 07 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-15-1-run-tracing/</guid><description>Tracer 用 ContextVar 关联父子 span，observed_run 包装模型和注册表，继续调用已有保护循环。故障同样关闭 span 并恢复上下文。ContextVar 是当前上下文中的状态，不会无条件自动传播到新线程。并行观测需要显式复制上下文或传父 span，且共享 tracer 的并发写入需独立设计。</description></item><item><title>《AI Agent 开发入门》15.2 结构化日志与关联 ID</title><link>https://plumephp.com/agent-intro-15-2-structured-logs/</link><pubDate>Wed, 07 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-15-2-structured-logs/</guid><description>日志层只负责 JSON 行编码；observe.py 负责统一调用 run，避免把 tools 同时当 schema 列表与可调用函数。JSON 结构化便于检索，不自动提供脱敏、存储限额或审计权限。自定义 fields 仍可能含敏感数据，接入真实业务前需定义允许字段与保存周期。</description></item><item><title>《AI Agent 开发入门》15.3 成本与用量核算</title><link>https://plumephp.com/agent-intro-15-3-cost-accounting/</link><pubDate>Wed, 07 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-15-3-cost-accounting/</guid><description>CostTracker 用每轮 input/output usage 乘示例价格计算 USD；ObservedModel 在同一轮记录一次，不重复把费用记给每个工具。PRICES 是教学值，不是现行报价。真实账单还有缓存读写、思考、服务端工具等项目，应按具体供应商计费分类扩展。归因到工具是模型决策轮次标签，不是工具自身收费。</description></item><item><title>《AI Agent 高级编程》7.1 Computer Use 基础：截图/坐标动作/循环最小实现</title><link>https://plumephp.com/agent-advanced-07-1-computer-use-basics/</link><pubDate>Tue, 06 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-07-1-computer-use-basics/</guid><description>Computer Use 的循环拆开只有三件事：截图、输出坐标动作、再截图。本节先用 PIL 合成一块 320×200 的假屏幕，再让脚本化假模型依次吐出 type / click 动作，真跑一遍「截图 → 动作 → 再截图」的最小闭环；随后对照 Anthropic computer use 工具的真实动作空间，说明我们简化掉了什么、这套循环的边界在哪。</description></item><item><title>《AI Agent 高级编程》7.2 浏览器 Agent：Playwright 工具化完成网页取数</title><link>https://plumephp.com/agent-advanced-07-2-browser-agent/</link><pubDate>Tue, 06 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-07-2-browser-agent/</guid><description>7.1 用坐标点屏幕，通用但昂贵；本节退一步，用 Playwright 把浏览器操作工具化，对本地 file:// 静态页面真跑取数、点击、读文本。用 Node 版 1.59.1 演示 createRequire 加载全局包，把 goto/click/read_text/extract_table 包成可序列化工具，再用 ARIA snapshot 替代截图观察，最后给出三种观察口径对照表。</description></item><item><title>《AI Agent 高级编程》7.3 安全与成本：不可逆动作沙箱与人工确认</title><link>https://plumephp.com/agent-advanced-07-3-computer-use-safety/</link><pubDate>Tue, 06 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-07-3-computer-use-safety/</guid><description>7.1 点错坐标、7.2 点错按钮，后果可能只是一次空操作，也可能是一笔真实转账。本节把「不可逆动作」单独拎出来：先给风险三级分级表，再讲 dry-run / 审批回调 / 配额上限三道防线，并用一个可运行的最小沙箱真跑「高危动作二次确认」——批准转账、拒绝发信、配额拦下删除，最后实测截图体积随分辨率的增长。</description></item><item><title>《AI Agent 工程实战》14.1 延迟剖析：模型/检索/工具各占多少</title><link>https://plumephp.com/agent-practice-14-1-latency-profiling/</link><pubDate>Tue, 06 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-14-1-latency-profiling/</guid><description>Agent 的延迟结构跟普通 Web 服务完全不同，大头在模型调用而非 CPU。本节给一次 run 的模型、检索、工具、序列化四个阶段分别计时，真跑打印各阶段耗时与占比表，再实测「同步阻塞拖垮异步服务」：在 async 路由里调同步 IO 会让并发 5 个请求的墙钟从 201ms 涨到 1029ms。</description></item><item><title>《AI Agent 工程实战》14.2 成本优化：缓存、路由、小模型降级 + 评测兜底</title><link>https://plumephp.com/agent-practice-14-2-cost-optimization/</link><pubDate>Tue, 06 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-14-2-cost-optimization/</guid><description>成本优化三招：缓存命中即零模型成本、按难度路由分流、上下文瘦身。本节给路由写判定规则并真跑对比「全用强模型」与「按路由分流」：100 条请求（简单/复杂各半）总成本从 1.200 降到 0.738 美元、降到 0.61 倍，平均得分只掉 0.012，并强调任何降本改动都必须过第 12 章的评测兜底。</description></item><item><title>《AI Agent 工程实战》14.3 吞吐与并发压测：找容量上限与拐点</title><link>https://plumephp.com/agent-practice-14-3-throughput-loadtest/</link><pubDate>Tue, 06 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-14-3-throughput-loadtest/</guid><description>用纯标准库 asyncio 写一个极简压测器（固定并发、固定请求数，统计 QPS/P50/P95/错误率），对第 8 章的并发受限服务跑 4 档并发。真跑显示 QPS 在并发 8 附近见顶（110→176 后不再涨），延迟却从 45ms 涨到 224ms，拐点清晰；再加请求超时后 QPS 会虚高而错误率飙到 87%，并给出容量规划余量。</description></item><item><title>《AI Agent 开发入门》14.1 分类错误与重试</title><link>https://plumephp.com/agent-intro-14-1-error-classification/</link><pubDate>Tue, 06 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-14-1-error-classification/</guid><description>可重试状态来自 status 或 SDK 常见 status_code。错误分类只给候选策略，超时、429 和 5xx 不自动意味着写操作可安全重发。适配器关闭 SDK 自动重试，避免两层叠加。生产还需要 Retry-After、总时间预算与业务幂等判断；不可把所有 Exception 都归为暂时故障。</description></item><item><title>《AI Agent 开发入门》14.2 超时、取消与结构化并发</title><link>https://plumephp.com/agent-intro-14-2-timeout-cancellation/</link><pubDate>Tue, 06 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-14-2-timeout-cancellation/</guid><description>asyncio.timeout 与 TaskGroup 通过取消协作任务实施超时。工具在 CancelledError 后清理资源并重新抛出，不能吞掉取消继续运行。同步线程、阻塞扩展和外部副作用不会因此被强制终止。to_thread 只转移阻塞工作；取消 await 不停止已经执行的线程。强终止需要独立进程与相应资源生命周期设计。</description></item><item><title>《AI Agent 开发入门》14.3 幂等与副作用</title><link>https://plumephp.com/agent-intro-14-3-idempotent-tools/</link><pubDate>Tue, 06 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-14-3-idempotent-tools/</guid><description>相同参数不等于同一次业务。给同一客户发送相同正文的第二次合法通知应允许执行；重试同一通知则应复用原操作键。本进程锁串行包住查缓存、执行和存结果，防止同进程并发重复。snapshot/restore 保留已记录结果；函数异常不缓存，失败前是否已经产生副作用必须由业务确认。</description></item><item><title>《AI Agent 高级编程》6.1 为什么需要持久化执行：崩溃/重启/长任务改造</title><link>https://plumephp.com/agent-advanced-06-1-why-durable/</link><pubDate>Mon, 05 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-06-1-why-durable/</guid><description>Agent 一次任务要跑几十步、跨小时甚至跨天，进程一崩内存里的进度就全没了。本节用一个 append-only 日志把多步任务改造成可持久化执行：真跑一个在第 3 步硬崩溃的任务，第二次运行从日志跳过已完成步骤、只重放未完成部分，并用对照实验证明「有日志」比「从头重跑」少花模型调用。</description></item><item><title>《AI Agent 高级编程》6.2 确定性重放与副作用：模型调用变可重放步骤</title><link>https://plumephp.com/agent-advanced-06-2-deterministic-replay/</link><pubDate>Mon, 05 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-06-2-deterministic-replay/</guid><description>持久化执行要能重放，前提是每一步都确定。本节把模型调用变成可重放的步骤：把输入输出录到 tape，重放时命中记录就不再真调模型；再演示副作用（写文件、发通知）如何用幂等键隔离成只生效一次的步骤。真跑给出「record 2 次真调 → replay 0 次真调、输出摘要哈希不变」的证据，并实测跨进程不确定性来源与两类重放失败症状。</description></item><item><title>《AI Agent 高级编程》6.3 与自研检查点对照：轮子与现成品边界</title><link>https://plumephp.com/agent-advanced-06-3-durable-vs-checkpoint/</link><pubDate>Mon, 05 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-06-3-durable-vs-checkpoint/</guid><description>卷一 7.3 的自研检查点只够单机单进程，现成 Durable Execution 框架替你做了什么？本节把自研检查点、LangGraph 检查点、Temporal 类模型逐项对照：真跑 LangGraph 的 InMemorySaver，看它在崩溃后续跑、人在环 interrupt 的行为，再把自研日志引擎的存储换成 SQLite，最后给出「何时自研够用、何时该上框架」的选型边界表。</description></item><item><title>《AI Agent 工程实战》13.1 结构化日志与追踪：OTel GenAI 语义约定埋点</title><link>https://plumephp.com/agent-practice-13-1-otel-genai/</link><pubDate>Mon, 05 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-13-1-otel-genai/</guid><description>把一次 run 变成 span 树：agent.run 下挂 model.complete 与 tool.call，用 contextvars 传递当前 span 建立父子关系，并行工具的 span 并列成兄弟；日志走 JSON 行，带 trace_id/run_id/workspace_id。OTel 只装了 API 未装 SDK，故用标准库实现最小 span 模型并对齐 GenAI 字段名。</description></item><item><title>《AI Agent 工程实战》13.2 指标与看板：延迟/成功率/成本/工具错误</title><link>https://plumephp.com/agent-practice-13-2-metrics-dashboard/</link><pubDate>Mon, 05 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-13-2-metrics-dashboard/</guid><description>把 13.1 的 span 数据聚合成四类指标：延迟分位（P50/P95/P99）、成功率、每 run 成本、按工具名分组的错误率，讲清平均值为何被长尾骗、直方图与摘要的差别、以及 run_id 当标签会炸掉时序库的基数问题；给出四块看板布局。真跑 200 次模拟 run，打印分位表与错误工具 Top 榜。</description></item><item><title>《AI Agent 工程实战》13.3 告警与 on-call：从 trace 到告警演练</title><link>https://plumephp.com/agent-practice-13-3-alerting-oncall/</link><pubDate>Mon, 05 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-13-3-alerting-oncall/</guid><description>告警要少而准：给出覆盖成功率、P95 延迟、单 run 成本、工具错误率、队列积压的规则表，讲 SLO 与错误预算（99% 成功率每月可消耗多少失败）与连续窗口门槛为何能压噪声。真跑一个极简告警求值器，喂正常与劣化两段序列，打印触发判定；末尾给从告警定位到具体 run 与工具的演练脚本。</description></item><item><title>《AI Agent 开发入门》13.1 角色与分工</title><link>https://plumephp.com/agent-intro-13-1-supervisor-worker/</link><pubDate>Mon, 05 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-13-1-supervisor-worker/</guid><description>把单个 Agent 拆成 supervisor 与 worker：Worker 是一个带专用 system 提示与工具子集的 Agent（检索员、计算员），Supervisor 负责把目标拆成子任务、派给合适的 worker 并汇总结果。用假模型脚本化一次路由决策，真跑「拆成子任务、各自执行、汇总」的完整流程并打印派发与回收，给出单 Agent 与 supervisor-worker 的取舍表。</description></item><item><title>《AI Agent 开发入门》13.2 消息总线与共享状态</title><link>https://plumephp.com/agent-intro-13-2-message-bus/</link><pubDate>Mon, 05 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-13-2-message-bus/</guid><description>MessageBus 是进程内顺序 pub/sub，按发布序号记录历史。它不是持久化消息队列，也不提供重试、确认或跨进程投递。同一 handler 失败会中断当前发布链；递归发布循环需调用方自行限制。worker 的同步调用移到线程不等于线程会被取消，同一个 worker 并发使用仍可能共享模型状态。</description></item><item><title>《AI Agent 开发入门》13.3 协作模式对照</title><link>https://plumephp.com/agent-intro-13-3-collaboration-topologies/</link><pubDate>Mon, 05 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-13-3-collaboration-topologies/</guid><description>pipeline、debate、voting 用固定脚本展示信息怎么流动，不比较真实模型质量。LatencyModel 延时也是人工模拟，不能当真实性能测量。AGREEMENT 是人工演示标签，不是计算出的真实一致率；多数票也可能同错。选择拓扑应基于任务、独立质量样本、总调用与真实延时，而不是这组固定结果。</description></item><item><title>《AI Agent 高级编程》5.1 读 LangGraph：图执行器与检查点机制</title><link>https://plumephp.com/agent-advanced-05-1-read-langgraph/</link><pubDate>Sun, 04 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-05-1-read-langgraph/</guid><description>打开本机 langgraph 1.2.14 的源码读图执行器：StateGraph.compile 产出 CompiledStateGraph，PregelLoop 的 tick/after_tick 一轮就是一次超步，超步之间只做通道合并；每个超步结束调用 _put_checkpoint，检查点按 thread_id 落进 Checkpointer。</description></item><item><title>《AI Agent 高级编程》5.2 读 PydanticAI：run 循环与重试调用链</title><link>https://plumephp.com/agent-advanced-05-2-read-pydanticai/</link><pubDate>Sun, 04 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-05-2-read-pydanticai/</guid><description>打开本机 pydantic-ai 2.55.0 源码读 run 循环：Agent 不是 while，而是 GraphBuilder 拼出的状态机（UserPromptNode→ModelRequestNode→CallToolsNode）。结构化输出校验失败抛 ModelRetry，_build_retry_node 造一个带 RetryPromptPart 的新请求节点。附真实重试调用链。</description></item><item><title>《AI Agent 高级编程》5.3 读 Claude Agent SDK：subagent 与 hook 调度（含 TS SDK 对照）</title><link>https://plumephp.com/agent-advanced-05-3-read-claude-sdk/</link><pubDate>Sun, 04 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-05-3-read-claude-sdk/</guid><description>打开本机 claude-agent-sdk 0.2.165 源码读 subagent 与 hook 调度：subagent 是 asdict 后的 AgentDefinition 随 initialize 送到 CLI，hook 注册成 callback_id，由 CLI 反向发 control_request 回调 Python。附 inspect 核对与 TS SDK 对照。</description></item><item><title>《AI Agent 工程实战》12.1 评测集与评分器：成功率/引用准确率/成本</title><link>https://plumephp.com/agent-practice-12-1-eval-set-scorers/</link><pubDate>Sun, 04 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-12-1-eval-set-scorers/</guid><description>本节给 ResearchCopilot 建一个可版本化的评测集：JSON 存问题、期望要点与必须引用的来源，配套「加样本写理由、改期望留痕」的维护纪律；实现成功率、引用准确率、成本三个评分器，对 10 条样本真跑并打印逐条得分与汇总，最后给出自动打分与人工评审的分界表。</description></item><item><title>《AI Agent 工程实战》12.2 离线回放与夹具：假模型 + 录制样本确定性回归</title><link>https://plumephp.com/agent-practice-12-2-offline-replay/</link><pubDate>Sun, 04 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-12-2-offline-replay/</guid><description>CI 里调真模型不确定、要钱、要网络、会限流。本节把一次模型交互的请求与响应存成夹具，回放时按请求指纹匹配取响应：本机按 Anthropic Messages API 结构手工构造三条夹具真跑一遍完整 run，连跑两次逐字一致；再改问题制造夹具失配，验证回放器报错而非静默给错响应，最后给出夹具的存放与更新流程。</description></item><item><title>《AI Agent 工程实战》12.3 CI 质量门：分数下降即拦截</title><link>https://plumephp.com/agent-practice-12-3-ci-quality-gate/</link><pubDate>Sun, 04 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-12-3-ci-quality-gate/</guid><description>评测跑完只打印一张表，不会拦住任何东西。本节把评测变成质量门：与基线比对，总体指标掉超阈值、或某条样本由 PASS 变 FAIL，就让流水线 exit 1。真跑先验证「与基线持平」退出码 0，再注入「关掉引用产出」的退化使质量门失败退出码 1，打印逐样本差异，最后给出 GitHub Actions 接入形态（注明未在本机执行）。</description></item><item><title>《AI Agent 开发入门》12.1 状态机式编排</title><link>https://plumephp.com/agent-intro-12-1-graph-orchestration/</link><pubDate>Sun, 04 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-12-1-graph-orchestration/</guid><description>循环式 Agent 适合开放式任务，但固定流程需要显式结构。本节手写 minagent 的最小图引擎：Node（名字加一个函数）、Edge（源到目标、可带条件）、Graph（add_node/add_edge/set_entry/run），节点间用 dict 状态传递数据。用假模型真跑一条分类→检索→综合的三节点线性链，打印每个节点的进出 state，并给出图编排与循环式 Agent 的取舍表。</description></item><item><title>《AI Agent 开发入门》12.2 分支、合并与循环</title><link>https://plumephp.com/agent-intro-12-2-branch-merge-loop/</link><pubDate>Sun, 04 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-12-2-branch-merge-loop/</guid><description>本节保留单后继 Graph，另写 WaveGraph 表达 fan-out。波内节点顺序执行，因此共享状态更新有顺序，不是线程并行。条件路径必须与 join 的要求一致；某前驱被条件跳过而永不到达时，本例会报缺失前驱。动态分支取消、跨轮关联、部分成功合并需要更完整调度协议。</description></item><item><title>《AI Agent 开发入门》12.3 人类在环</title><link>https://plumephp.com/agent-intro-12-3-human-in-the-loop/</link><pubDate>Sun, 04 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-12-3-human-in-the-loop/</guid><description>HumanGraph 用于本节单后继人工流程，与 WaveGraph 分开。暂停发生在敏感节点前；演示只记录模拟邮件参数，不向外部发送消息。状态与 token 只保存在本进程，示例调用方可信。真实审批需要验证身份、绑定不可篡改的操作参数、持久化一次性批准及恢复记录，不能把普通 dict/token 直接暴露到公网。</description></item><item><title>《AI Agent 高级编程》4.1 OpenAI Agents SDK：handoff/guardrails/tracing 实现委派</title><link>https://plumephp.com/agent-advanced-04-1-openai-agents-sdk/</link><pubDate>Sat, 03 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-04-1-openai-agents-sdk/</guid><description>OpenAI Agents SDK 用三个原语组织 Agent：handoff 委派、guardrails 护栏、tracing 追踪。本节现场核对 0.23.1 的 API 表面，离线跑通护栏函数与 span 捕获，并和卷一 minagent 的 supervisor/worker 模式逐一对照。</description></item><item><title>《AI Agent 高级编程》4.2 smolagents：CodeAgent「代码即行动」重写子任务</title><link>https://plumephp.com/agent-advanced-04-2-smolagents/</link><pubDate>Sat, 03 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-04-2-smolagents/</guid><description>smolagents 的 CodeAgent 让模型直接写 Python 代码来行动，而不是吐结构化工具调用。本节现场核对 1.26.0 的 API，用本地假模型驱动 CodeAgent 离线真跑，并实测 CodeAgent 与 ToolCallingAgent 在工具可见性上的差别。</description></item><item><title>《AI Agent 高级编程》4.3 三框架同题对照：同评测集比分数与成本</title><link>https://plumephp.com/agent-advanced-04-3-framework-benchmark/</link><pubDate>Sat, 03 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-04-3-framework-benchmark/</guid><description>用实际 minagent 交付、PydanticAI FunctionModel 与 smolagents CodeAgent 对照同一个离线检索任务，提供完整文件及重复运行断言；调用次数不替代质量、成本或性能实测。</description></item><item><title>《AI Agent 工程实战》11.1 写入流水线：抽取、去重、冲突消解</title><link>https://plumephp.com/agent-practice-11-1-memory-write-pipeline/</link><pubDate>Sat, 03 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-11-1-memory-write-pipeline/</guid><description>卷一讲了记忆「怎么读」，本节讲记忆「怎么存」做成一条服务：从对话里抽取候选记忆，用文本归一化和向量相似度两档去重，再用时间戳加保留历史加标记取代来消解冲突。我们真连本机 Postgres 把 5 条候选走完整条流水线，验证同一条对话重放两次不产生重复记忆。</description></item><item><title>《AI Agent 工程实战》11.2 检索注入：长期记忆接入 run 并量化收益</title><link>https://plumephp.com/agent-practice-11-2-memory-retrieval-injection/</link><pubDate>Sat, 03 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-11-2-memory-retrieval-injection/</guid><description>记忆写进来不等于用得上。本节把长期记忆接进一次 run：检索、排序、按 token 预算截断、再注入，并讲清 system、首条 user、工具返回三种注入位置对模型注意力的影响。最后用一个 10 题的评测小集真跑对照，量化「不注入」与「注入」的得分差。</description></item><item><title>《AI Agent 工程实战》11.3 记忆治理：TTL、隐私与按用户删除</title><link>https://plumephp.com/agent-practice-11-3-memory-governance/</link><pubDate>Sat, 03 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-11-3-memory-governance/</guid><description>记忆是用户数据，写进来容易，管起来难。本节讲三件治理：用 TTL 让该过期的记忆自动清掉，用隐私分级和写入侧拒绝清单把密钥、卡号、证件号、健康信息挡在库外，用按用户级联删除让「删除我的数据」真的删干净并留下审计。真连本机 Postgres 跑一次完整的删除流程。</description></item><item><title>《AI Agent 开发入门》11.1 任务分解：把大问题拆成子任务 DAG</title><link>https://plumephp.com/agent-intro-11-1-task-decomposition/</link><pubDate>Sat, 03 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-11-1-task-decomposition/</guid><description>把 5.2 的线性计划升级为带依赖的 DAG：定义 Task 与 Plan，给出让模型输出任务图的 JSON 协议，实现 validate_plan 检测环与悬空依赖，并用假模型脚本化「检索→并行抽取→综合」的 4 任务 DAG，真跑打印 DAG 与拓扑序，最后给出线性计划与 DAG 计划的取舍表。</description></item><item><title>《AI Agent 开发入门》11.2 计划执行器</title><link>https://plumephp.com/agent-intro-11-2-plan-executor/</link><pubDate>Sat, 03 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-11-2-plan-executor/</guid><description>每层只执行依赖已完成的任务，失败的下游标记 skipped。PlanExecutor 在启动前拒绝非法 DAG，并限制线程数。线程等待不是取消或安全隔离，外部副作用没有回滚。任务描述或上游语义变化时不能只凭同 id 复用；第 11.3 节按任务与依赖闭包确认可复用范围。</description></item><item><title>《AI Agent 开发入门》11.3 重规划</title><link>https://plumephp.com/agent-intro-11-3-replanning/</link><pubDate>Sat, 03 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-11-3-replanning/</guid><description>修订计划与原计划共用严格结构校验。允许 max_replans 次修订，预算耗尽后不再额外调用模型。任务 id 是引用坐标，不是业务语义指纹。副作用任务不能仅靠计划复用去重，仍需要业务操作键；模型生成的补救步骤也必须通过权限与工具约束。</description></item><item><title>《AI Agent 高级编程》3.1 核心概念：subagent/hooks/权限/session 搭研究任务</title><link>https://plumephp.com/agent-advanced-03-1-claude-sdk-core/</link><pubDate>Fri, 02 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-03-1-claude-sdk-core/</guid><description>Claude Agent SDK 不是模型 SDK，而是把 Claude Code 的 Agent 运行时（subagent / hooks / 权限 / session）打包成 Python 接口。本节现场核对 0.2.165 的 API，讲清 AgentDefinition、HookMatcher 与 session，并搭出多 subagent 加 hook 的研究任务骨架。</description></item><item><title>《AI Agent 高级编程》3.2 工具与权限：allow/deny 与审批回调</title><link>https://plumephp.com/agent-advanced-03-2-claude-sdk-permissions/</link><pubDate>Fri, 02 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-03-2-claude-sdk-permissions/</guid><description>上一节把权限一笔带过，本节拆开讲透。Claude Agent SDK 用四道闸门控制工具：tools 决定有哪些工具、allowed_tools / disallowed_tools 做静态白黑名单、permission_mode 定档位、can_use_tool 回调做动态人工审批。全部字段与签名现场核对 0.2.165，并给出「只读研究助手 + 写操作二次确认」的完整骨架。</description></item><item><title>《AI Agent 高级编程》3.3 与自研运行时对照：内置省了什么、锁定了什么</title><link>https://plumephp.com/agent-advanced-03-3-claude-sdk-vs-minagent/</link><pubDate>Fri, 02 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-03-3-claude-sdk-vs-minagent/</guid><description>前两节讲了 Claude Agent SDK 怎么用，这一节算总账。把它的每项能力逐条映射回卷一 minagent 的自研实现，看清它内置省下的四块重活（subagent 调度、hook、权限、session 持久化），也看清它锁定的边界：依赖 claude CLI、绑定 Anthropic 模型、可观测与扩展受限、假模型测试被掐断。文末给对照表与选型清单。</description></item><item><title>《AI Agent 工程实战》10.1 MCP 客户端接入：minagent 作为 client 连本地 Server</title><link>https://plumephp.com/agent-practice-10-1-mcp-client/</link><pubDate>Fri, 02 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-10-1-mcp-client/</guid><description>本节把 MCP Server 当成工具源：写一个同步外壳的 MCPToolSource，连上本地 stdio Server、list_tools，把每个远程工具适配成 minagent 的 Tool 注册进 ToolRegistry，并讲清命名冲突、错误映射与连接生命周期；最后用假模型驱动 Agent 真跑一次 MCP 调用（Python 3.14.6 + mcp 2.3.0 实测）。</description></item><item><title>《AI Agent 工程实战》10.2 工具设计模式：读写分离、幂等、可观测</title><link>https://plumephp.com/agent-practice-10-2-tool-design-patterns/</link><pubDate>Fri, 02 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-10-2-tool-design-patterns/</guid><description>工具设计有五条可复用模式：读写分离（只读随便调、写入要审批加幂等键）、幂等、可观测、单一粒度、描述即提示词。本节先用假模型做「描述含糊 vs 描述具体」的选中率对照（实测 67% 对 100%），再用 pydantic 约束对照万能 sql 与专用工具的危险调用拦截率（实测 0/6 对 5/6）。</description></item><item><title>《AI Agent 工程实战》10.3 工具沙箱：子进程/容器隔离高危工具</title><link>https://plumephp.com/agent-practice-10-3-tool-sandbox/</link><pubDate>Fri, 02 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-10-3-tool-sandbox/</guid><description>Agent 会执行模型写出来的代码、SQL 与命令，必须隔离。本节讲三层隔离：进程内不可信、子进程加资源限制、容器加只读挂载与无网络。实现 sandboxed_python 真跑正常代码、死循环超时、写文件三例，如实说明 subprocess 不是安全边界，再用 Docker 只读无网络容器真跑对照。</description></item><item><title>《AI Agent 开发入门》10.1 文档加载与切分</title><link>https://plumephp.com/agent-intro-10-1-doc-loading-chunking/</link><pubDate>Fri, 02 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-10-1-doc-loading-chunking/</guid><description>检索增强的第一步是把一堆文件变成可检索的块。本节先剥掉 frontmatter，再用带重叠的 chunk(text, size, overlap) 固定长度切块，并拿本仓库 content/posts/python/ 下 6 篇真实文章实测：文件数、总块数、平均/最长/最短块长全部给出。最后对比按字符切与按语义切的取舍，代码在 Python 3.14.6 跑通。</description></item><item><title>《AI Agent 开发入门》10.2 索引与检索工具</title><link>https://plumephp.com/agent-intro-10-2-search-read-tools/</link><pubDate>Fri, 02 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-10-2-search-read-tools/</guid><description>把 10.1 切好的块做成两个工具：search(query) 返回命中块（doc_id、chunk_id、片段），read(doc_id, chunk_id) 取回完整块。两者注册进第 4 章的 ToolRegistry，再用假模型脚本化一条多跳检索轨迹并真跑。本节聚焦「检索作为工具」，检索算法复用第 9 章的关键词 + 哈希向量混合思路。</description></item><item><title>《AI Agent 开发入门》10.3 带引用的回答</title><link>https://plumephp.com/agent-intro-10-3-cited-answers/</link><pubDate>Fri, 02 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-10-3-cited-answers/</guid><description>把句末 [doc_id#chunk_id] 解析出来，可以检查坐标和词面相关性；这仍然不是事实核验。修订版不再把词汇重叠称为引用有效。错误的否定句可以与正确来源共享几乎全部词汇，拿到高重叠分。无引用句不会出现在 rows 中，不能把空 rows 当作全部通过。块存在、实际读取、词面相关和语义支持应分别检验。</description></item><item><title>《AI Agent 高级编程》2.1 核心模型：Agent/RunContext/依赖注入重写问答路径</title><link>https://plumephp.com/agent-advanced-02-1-pydanticai-core/</link><pubDate>Thu, 01 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-02-1-pydanticai-core/</guid><description>本节用 PydanticAI 的 Agent 重写卷二单跳问答路径：用 deps_type 声明依赖、用 RunContext 把假检索器注入工具、用 FunctionModel 与 TestModel 本地确定性跑通「检索→带引用回答」。实测 Agent 的输出参数是 output_type 而非旧版 result_type，并给出框架与自研引擎的让渡清单。</description></item><item><title>《AI Agent 高级编程》2.2 结构化输出与工具：输出模型 + 校验重试</title><link>https://plumephp.com/agent-advanced-02-2-pydanticai-output/</link><pubDate>Thu, 01 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-02-2-pydanticai-output/</guid><description>本节把 Agent 的 output_type 从 str 换成 Pydantic 模型，让回答自带类型与校验：citations 至少一条、confidence 落在 0~1。再用 FunctionModel 注入一次非法输出（citations 为空），真跑出框架的校验重试——模型被调用三次、第二次的 retry-prompt 里带着 pydantic 的报错。最后给出重试上限与失败行为。</description></item><item><title>《AI Agent 高级编程》2.3 与 minagent 对照：代码量与可测性对比</title><link>https://plumephp.com/agent-advanced-02-3-pydanticai-vs-minagent/</link><pubDate>Thu, 01 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-02-3-pydanticai-vs-minagent/</guid><description>同一任务写两版：卷一契约的 minagent 版与 PydanticAI 版，都真跑并断言。实测本次任务脚本两版行数基本持平（minagent 34 逻辑行 vs PydanticAI 36 逻辑行），真正差别在引擎本体的 122 行由谁维护。给出代码量、断言入口、失败信号、扩展成本的对照表，并说明框架赢在「你不再拥有的代码」而非「你少写的代码」。</description></item><item><title>《AI Agent 工程实战》9.1 事件协议：token/tool/step 统一 schema，TS 与 Python 共享类型</title><link>https://plumephp.com/agent-practice-09-1-event-protocol/</link><pubDate>Thu, 01 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-09-1-event-protocol/</guid><description>把 3.2 的 SSE 事件抽成一份语言无关的 schema：一个 type 判别字段加各自字段。给出 TypeScript 判别联合类型与 Python pydantic 判别联合两份定义，用同一份 JSON 样本在两侧真跑解析；再对比手写双份、JSON Schema 生成、共享契约文件三种「共享类型」做法的代价。</description></item><item><title>《AI Agent 工程实战》9.2 前端渲染：TS 最小聊天 UI 逐步显示</title><link>https://plumephp.com/agent-practice-09-2-frontend-render/</link><pubDate>Thu, 01 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-09-2-frontend-render/</guid><description>把 9.1 的事件流变成可见界面：实现纯函数归约器 reduce(state, event) 与渲染器 render(state)，token 追加气泡、tool 开折叠块、final 收尾；在 Node 里真跑一串事件、逐步打印状态快照与最终渲染。再讲增量与全量重渲染的取舍，最后给一段接 DOM 的最小代码。</description></item><item><title>《AI Agent 工程实战》9.3 断线重连：Last-Event-ID 续传不丢步</title><link>https://plumephp.com/agent-practice-09-3-reconnect-resume/</link><pubDate>Thu, 01 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/agent-practice-09-3-reconnect-resume/</guid><description>SSE 断线后客户端带 Last-Event-ID 重连，服务端从该 id 之后续推，呼应 3.2 的事件 id。讲清为什么必须服务端保留事件缓冲、缓冲多久、缓冲丢了怎么降级为全量重取；用 httpx 真跑「消费 5 条断开 → 重连补齐 11 条」并断言无重复无缺失。</description></item><item><title>《AI Agent 开发入门》9.1 嵌入与向量存储：本地可离线方案</title><link>https://plumephp.com/agent-intro-09-1-local-embeddings/</link><pubDate>Thu, 01 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-09-1-local-embeddings/</guid><description>本节用标准库展示固定维数、归一化、索引和余弦相似度，避免让核心项目依赖 NumPy。HashingEmbedder 不具备训练出的语义理解。VectorStore 检查维数、有限数值和重复 id；search 计算余弦，未归一化输入也能比较。空索引返回空，k 必须为正；排序同分时保持插入次序。</description></item><item><title>《AI Agent 开发入门》9.2 混合检索：关键词 + 向量 + 重排</title><link>https://plumephp.com/agent-intro-09-2-hybrid-retrieval/</link><pubDate>Thu, 01 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-09-2-hybrid-retrieval/</guid><description>HybridIndex 显式持有 records、BM25 与 VectorStore，不依赖上节 REPL 变量。两条路径都仍主要反映词面，只演示融合结构。标题重排 bonus 是手工规则，需要验证是否真的改善排序；词面与哈希融合不意味着语义模型。返回排名不能作为事实或答案质量分数。</description></item><item><title>《AI Agent 开发入门》9.3 记忆即工具</title><link>https://plumephp.com/agent-intro-09-3-memory-as-tool/</link><pubDate>Thu, 01 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/agent-intro-09-3-memory-as-tool/</guid><description>本节把 9.2 的混合检索封装成 recall(query) 工具注册进 ToolRegistry，让 Agent 在循环里自己决定何时回忆。用假模型脚本化「用户提问 → 调用 recall → 拿到记忆 → 给出回答」并真跑打印轨迹，最后对比记忆即工具与自动注入在自主性和确定性上的取舍。</description></item><item><title>《AI Agent 高级编程》1.1 框架分层：引擎/编排/SDK/协议四层定位图</title><link>https://plumephp.com/agent-advanced-01-1-framework-layers/</link><pubDate>Wed, 30 Sep 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/agent-advanced-01-1-framework-layers/</guid><description>本节给出 Agent 框架的四层定位图：引擎层（loop 内核）、编排层（LangGraph 图执行器）、SDK 层（PydanticAI、Claude Agent SDK、OpenAI Agents SDK、smolagents）、协议层（MCP、A2A），用本机真实 import 打印模块归属与版本号作证，并把卷一 minagent 与卷二 ResearchCopilot 钉到同一张图上。</description></item></channel></rss>