← Back
heaven999b

heaven999b/hello-agent-system

👋 Hello Agent System — learn enterprise AI agent system design by building every production layer from scratch. 17 bilingual lessons (EN/中文) with tested exercises: tools, architectures, reliability, security, evals, distributed execution, cost, RAG, release ops. 企业级 Agent 系统设计训练营

View on GitHub ↗
agentai-agentsbilingualchinesecoursedistributed-systemsenterpriseevalsfunction-callingllmllmopsmulti-agentobservabilityprompt-injectionpythonragsystem-designtutorial
Stars
31
Forks
1
Watchers
31
Open issues
0
Contributors
1
Language
Python
License
MIT License
Default branch
main
Created Sep 27, 2026Updated Sep 28, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

👋 Hello Agent System

企业级 Agent 系统设计训练营

从"会调 LLM API"到"能设计生产级 Agent 系统":32 节课 · 中英双语 · 每课都有带测试的练习。 不依赖任何 Agent 框架,从零手写企业级 Agent 的每一层:工具、上下文、架构、编排、可靠性、安全、可观测、评估、并发、成本、发布;再到检索、记忆、MCP、数据、评估方法论、优化、编码 Agent 与主动式 Agent。从第 02 课起就是 async(一个进程同时服务成百上千个会话),从第 12 课起就是真实的多进程(崩溃接手、僵尸 worker、优雅停机,全部用真进程和真信号验证);最后把同一套接口换成成熟组件(Postgres、Redis、Temporal、OpenTelemetry、LiteLLM、Cedar),落到生产。

CI Python License Tests PRs Welcome Built with Claude Opus 5.5

本项目由 Claude Opus 5.5 协助架构设计

中文 · English

快速开始 · 学习路线 · 综合实战 · 失败模式图鉴 · 面试题


🤔 为什么要做这个项目?

写一个"能跑"的 Agent 只要 20 行代码。但把它放进公司、让成千上万人用,你马上会遇到这些问题:

模型 429 了怎么办?Agent 陷入死循环一晚上烧了 2000 美元怎么办?用户在文档里藏一句"忽略之前的指令"就能让 Agent 重置管理员密码怎么办?A 公司的数据出现在 B 公司的回答里怎么办?改了一行 prompt,怎么知道有没有把别的场景改坏?进程在 Agent 执行到一半时重启了怎么办?

这些问题决定了一个 Agent 能不能上线,而绝大多数教程只教那 20 行。

常见 Agent 教程 本项目
目标 让 Agent 跑起来 让 Agent 在生产中可靠、安全、可控地跑起来
方式 调用框架 API(黑盒) 从零手写每一层(核心约 3800 行 + 多进程模块约 2000 行,每行都能看懂)
覆盖 循环 + 工具 LLM 必备知识、循环、工具、上下文、常见架构、编排、工程考量全景;重试熔断降级、检查点恢复、提示词注入防御、RBAC、人工审批、审计、追踪、评估;高并发与分布式执行、成本优化、权限感知 RAG、灰度发布与事故响应;检索质量、记忆系统、MCP 与沙箱、主流框架对照、Agent 数据、评估方法论、提示词优化与测试时计算、编码 Agent、主动式 Agent;asyncio 并发、真实多进程执行(租约、fencing、kill -9 接手、网络分区)、Postgres/Redis/Temporal/OpenTelemetry/LiteLLM/Cedar 生产落地、多 worker 参考服务与压测
讲法 一种做法 企业问题卡片:每个问题 2–4 种方案对比,讲清怎么选
验证 看起来能用 每课都有带自动化测试的练习,离线、确定性、零成本;说"并发"就用在途峰值证明,说"多进程 / 崩溃接手"就起真实进程、发真实信号
模型 绑定某家厂商 任何 OpenAI 兼容接口(OpenAI / DeepSeek / Qwen / vLLM / 各类模型网关)
语言 单语 中英双语:每份讲义和文档都有等价的英文版(*.en.md)

⚖️ 先说清楚:每一层做到了什么

整个项目只有一套 async 实现,从第 02 课用到第 31 课;往上每一层只是把"状态存在哪里"换成更强的组件,接口不变:

层 是什么 做到了什么(都有测试证明) 局限(实话)
agentkit/ 核心 async Agent 运行时:主循环、工具、上下文、编排、可靠性、安全、追踪、评估 一个进程里同时推进成百上千个会话;只读工具并行;真取消(断开即停)、超时、舱壁、流式;子进程硬超时 状态默认在内存或本地文件;注入检测和 PII 脱敏是正则
agentkit/distributed/ 多进程执行:租约队列、fence 检查点、跨进程幂等 / 限流 / 并发槽位 / 熔断器、worker 进程、WorkerPool 真实进程上的 kill -9 接手(副作用不重复)、SIGSTOP 僵尸醒来后写不进去、SIGTERM 优雅停机、多进程抢任务不重复(第 12–13 课) 基于 SQLite,只能在一台机器上;同一时刻一个写者
agentkit/contrib/ 成熟组件适配器:Postgres、Redis、Temporal、OpenTelemetry、LiteLLM、Cedar、护栏分类器 同一套队列 / 检查点接口换成 Postgres 就能多机共享;真实 TCP 网络分区下旧 worker 被 fence 拒绝(第 26–29 课) 用嵌入式 Postgres、fakeredis、Temporal 开发服务器测试;Redis 主从切换、集群分片、多区域没有实测
production/ 把上面串起来的参考服务:API、worker、压测、故障注入、docker-compose、Kubernetes 压测与故障注入数字见第 31 课 参考实现,不是托管产品;本机没有 Docker,部署配置没有实际启动过

逐模块"做到了什么 → 还差什么 → 换成什么 → 怎么迁移",见 📋 生产就绪指南。

🗺 你将亲手造出的系统

flowchart TB
    U["用户请求 + 可信身份<br/>tenant / user / roles"] --> API["API 进程<br/>入队 → 202(第 12 课)"]
    API --> Q[("持久化任务队列<br/>租约 / fencing / 死信")]
    Q --> W["worker 进程 × N<br/>崩溃接手 · 优雅停机(第 13 课)"]
    W --> IG
    subgraph Hooks["🛡 钩子层:横切关注点(第 08-11 课)"]
        IG["InputGuard<br/>注入检测"]
        PP["PermissionPolicy<br/>RBAC + 人工审批"]
        TG["ToolOutputGuard<br/>不可信数据隔离"]
        OG["OutputGuard<br/>PII 脱敏"]
        BG["BudgetHook<br/>token/金额/步数"]
        AU["AuditLog<br/>审计"]
    end
    IG --> LOOP
    subgraph Core["⚙️ Agent 核心(第 01-07 课)"]
        LOOP["Agent 主循环<br/>LLM ⇄ 工具"] --> CTX["上下文策略<br/>窗口 / 摘要"]
        LOOP --> REG["工具注册表<br/>Schema 校验 / 超时 / 幂等"]
        LOOP --> WF["编排模式<br/>路由 / 并行 / 多 Agent"]
    end
    LOOP --> RL["ResilientLLM<br/>重试 → 熔断 → 降级"]
    RL --> GW["模型网关 / 任意 OpenAI 兼容接口"]
    LOOP --> CP[("检查点<br/>崩溃恢复 / 暂停审批")]
    LOOP --> TR["Tracer<br/>链路追踪 → HTML 查看器"]
    TR --> EV["Evals<br/>评估集 + CI 门禁"]
    PP -.拦截.-> REG
    TG -.包裹.-> REG
Loading

用 agentkit 组装一个企业级 Agent 只需要这样(每一个参数背后都是一节课):

import asyncio
from agentkit import *

agent = Agent(
    llm=ResilientLLM(default_llm(), fallbacks=[default_llm("gpt-5.6-luna")]),   # 第 08 课:重试/熔断/降级
    tools=[search_kb, create_ticket, reset_password],                            # 第 03 课:工具设计
    system_prompt="你是 IT 服务台助手。" + UNTRUSTED_DATA_RULE,                    # 第 09 课:不可信数据规则
    hooks=[
        InputGuard(),                                                            # 第 09 课:输入检测
        PermissionPolicy(role_tools={"employee": {"search_kb", "create_ticket"},
                                     "it_admin": {"*"}}),                        # 第 09 课:RBAC + 高危审批
        ToolOutputGuard(), OutputGuard(),                                        # 第 09 课:隔离 + 脱敏
        BudgetHook(max_cost_usd=0.10, max_tool_calls=20),                        # 第 08 课:预算
        AuditLog("runs/audit.jsonl"),                                            # 第 09 课:审计
    ],
    context_strategy=SlidingWindow(max_tokens=8000),                             # 第 04 课:上下文工程
    checkpointer=FileCheckpointer("runs/"),                                      # 第 08 课:检查点
    idempotency_store=IdempotencyStore(),                                        # 第 08 课:幂等
    tracer=Tracer(jsonl_exporter("runs/traces.jsonl")),                          # 第 10 课:追踪
)

async def main():
    me = {"tenant_id": "acme", "user_id": "alice", "roles": ["employee"]}
    result = await agent.run("帮我重置密码", metadata=me)
    if result.status == "paused":                    # 高危操作 → 暂停等人工审批(可以是几小时后、另一个进程)
        result = await agent.approve(result.run_id, approved=True, by="it_manager")
    print(render_tree(result.trace))                 # 看见 Agent 的每一步
    # 同一个 Agent 实例,一个进程,同时服务 50 个会话(第 02 课)
    results = await asyncio.gather(*(agent.run("VPN 怎么连?", metadata=me) for _ in range(50)))

asyncio.run(main())

真实运行输出示例(python -m agentkit.chat,一轮里模型并行调用了两个工具):

agent.run  6231ms  tokens=973→106  status=completed steps=2 cost=$0.00228
├─ llm.chat  2681ms  tokens=440→52  → tool_calls: current_time, calculator
├─ tool.current_time  3ms  ok
├─ tool.calculator  1ms  ok
└─ llm.chat  3534ms  tokens=533→54  → final_answer

一个进程扛不住、或者进程会崩溃时,让多个 worker 进程从同一个持久化队列里领任务(第 12–13 课):

# app.py —— 每个 worker 进程启动时加载一次
from agentkit.distributed import AgentJobHandler, SQLiteCheckpointer, SQLiteIdempotencyStore

async def make_handler(ctx):                         # ctx.db:这个 worker 进程自己的数据库连接
    ckpt, idem = SQLiteCheckpointer(ctx.db), SQLiteIdempotencyStore(ctx.db)
    await ckpt.setup(); await idem.setup()
    agent = Agent(default_llm(), tools, checkpointer=ckpt, idempotency_store=idem)
    return AgentJobHandler(agent, ckpt)               # 领任务 → run / 审批后 resume;fence 保护检查点
# 起几条就是几个 worker 进程;kill -9 其中一个,它手上的任务在租约过期后由别的进程从检查点接手
python -m agentkit.distributed.worker --queue sqlite:///runs/jobs.db --app app.py:make_handler --concurrency 16
queue = SQLiteJobQueue("runs/jobs.db"); await queue.setup()
await queue.enqueue("run", {"op": "run", "input": "打印机坏了"}, tenant_id="acme", idempotency_key="req-42")

多台机器时只换 --queue postgresql://...,其余不变(第 26 课)。再往上换成成熟组件,接口不变(这段代码在嵌入式 Postgres、fakeredis 和真实模型上跑通过):

from agentkit import Agent, KeyedLimiter, ResilientLLM
from agentkit.contrib.gateway import LiteLLMRouterLLM
from agentkit.contrib.postgres import PostgresCheckpointer
from agentkit.contrib.redis_store import RedisIdempotencyStore, RedisTokenBucket, RateLimitHook
from agentkit.contrib.otel import OTelTracer, PrometheusHook, setup_tracing
from agentkit.contrib.policy import CedarPolicy

checkpointer = PostgresCheckpointer(dsn)
await checkpointer.setup()
agent = Agent(
    ResilientLLM(LiteLLMRouterLLM.from_env(), max_concurrency=20),   # 网关:路由、降级;进程内并发上限
    tools,
    hooks=[
        CedarPolicy("policies.cedar", tools=tools),                          # 策略即代码(第 29 课)
        RateLimitHook(RedisTokenBucket(redis, rate_per_sec=5, capacity=10)),   # 跨实例的租户限流(第 26 课)
        PrometheusHook(),                                                    # 指标(第 28 课)
    ],
    checkpointer=checkpointer,                        # 多实例共享、带 CAS 与 fence 的检查点(第 26 课)
    idempotency_store=RedisIdempotencyStore(redis),   # 跨进程幂等(第 26 课)
    tracer=OTelTracer(setup_tracing("itbuddy")),      # OpenTelemetry,GenAI 语义约定(第 28 课)
    limiter=KeyedLimiter(per_key=5, global_limit=200),  # 每个租户最多 5 个同时在跑的运行(第 30 课)
    run_timeout=120,
)
result = await agent.run("VPN 怎么连?", metadata={"tenant_id": "acme", "user_id": "alice", "roles": ["employee"]})

🚀 快速开始

git clone https://github.com/heaven999b/hello-agent-system.git
cd hello-agent-system
make setup          # 创建 .venv 并安装(核心依赖只有 openai + pydantic)

编辑 .env,填入任意 OpenAI 兼容接口:

LLM_BASE_URL=https://api.openai.com/v1     # 或 DeepSeek / 通义 / 本地 vLLM / 模型网关
LLM_API_KEY=sk-xxx
LLM_MODEL=gpt-4o-mini                       # 需要支持 function calling
make check-env                                  # 检查模型连通性与工具调用能力
.venv/bin/python lessons/00_overview/demo.py    # 看一眼你将要造出的东西

💡 没有 API key? 所有 demo 都支持 --offline(用剧本模型 ScriptedLLM 运行),所有练习和测试都是离线的。你可以零成本学完整个课程。

📚 学习路线

课程分四部分:第一部分学会"怎么造",第二部分学会"企业里出了问题怎么选方案",第三部分学会"怎么让 Agent 持续变好",第四部分学会"怎么用成熟组件真正上生产"。前两部分加综合实战约 6 小时(主线);第三部分约 3.5 小时、第四部分约 3 小时,是进阶路线。赶时间可以走 4 小时速通路线(每课只读开头的"核心路径")。

  • 第一部分:概念 → 从零实现 → 练习。以第 07 课"工程考量全景"收尾:20 个工程维度,每个维度都分成通用必查点(任何项目都要做)和情境触发点("当……时,要考虑……"),作为进入第二部分的地图。
  • 第二部分:每节课由若干张企业问题卡片组成:真实场景(带具体数字)→ 为什么直觉方案会翻车 → 2–5 种方案对比(优点 / 缺点 / 适用规模)→ 怎么选 → 代码实现。
  • 第三部分:进阶的构建块(检索、记忆、MCP、框架),以及让 Agent 持续变好的 ML 闭环(数据 → 评估 → 优化),最后是编码 Agent 与主动式 Agent 等应用前沿。
  • 第四部分:把 SQLite 和进程内的状态换成成熟组件,接口不变。每课都讲"单机版为什么不够 → 组件选型对比 → 适配器怎么接 → 运维要点与坑",并用真实进程、真实并发、故障注入证明它扛得住。

每节课的流程都一样:读讲义 → 跑 demo → 写练习 → make lesson N=xx 让测试变绿 → 过自测清单。每课开头都标注了一篇 📖 必读论文或文章。

第一部分:基础构建(约 150 分钟)

# 课程 时长 你会学到 / 亲手实现 核心源码
00 企业级 Agent 全景图 10m 什么时候该用、不该用 Agent;企业级比 Demo 多了哪些层 —
01 LLM 与 Agent 开发必备知识 20m token 与计费、非确定性、function calling 的真实机制、结构化输出、流式工具调用参数的拼接、推理模型、提示词工程 llm.py
02 Agent 循环的本质 30m asyncio 从零讲起(事件循环、await、gather、取消、阻塞陷阱);手写 async Agent 主循环、消息协议、停止条件、Hook 中间件 agent.py
03 工具设计:Agent 与世界的接口 20m 生产级工具:Schema、校验、身份注入、业务错误;三种超时语义(async 真取消 / 线程杀不掉 / 子进程硬超时) tools.py
04 上下文工程与记忆 15m 安全截断、摘要压缩、工具结果清理、长期记忆隔离 context.py · memory.py
05 常见 Agent 架构 20m ReAct / Plan-and-Execute / ReWOO / Reflection / CodeAct、5 种多 Agent 拓扑、Deep Research / 编码 Agent 等产品架构拆解 workflows.py
06 编排模式:Workflow 与多 Agent 15m 路由、并行、编排者-执行者、评估-优化、Agent 即工具 workflows.py
07 工程考量全景 20m 20 个维度 × 通用必查点 / 情境触发点(共 301 条)、9 种场景画像矩阵、设计评审方法 perspectives.py

第二部分:企业问题与解决方案(约 170 分钟)

# 课程 时长 典型问题(每个都有多种方案对比) 你会亲手实现
08 可靠性工程 30m 模型 429 / 宕机、Agent 死循环、进程崩溃、审批要等几小时 死循环检测、重试预算、单试探熔断器;对独立网关进程的真实惊群压测、跨进程共享熔断器
09 安全与治理 20m 间接注入、越权、审批疲劳、PII 泄露、代码执行 策略引擎、脱敏、"致命三要素"检测
10 可观测性 15m 追踪数据爆炸、trace 里的 PII、告警噪声 从 trace 计算 SLO 指标
11 评估驱动开发 20m 没有标注数据、LLM 评委不可靠、评估太贵 pass^k、轨迹评分、发布门禁
12 生产架构总览 15m 同步 / 流式 / 异步接口、多租户隔离级别、自建 vs 框架 多租户限流、模型路由;本机迷你部署(多个 API 进程 + worker 进程,kill -9 接手、跨进程限流)
13 高并发与分布式执行 25m 横向扩展、投递语义、会话并发写(分布式锁 vs 乐观锁 vs 分区串行)、全局限流与背压、Saga 补偿、重试风暴 SQLite 租约队列 + fencing token + CAS;真实进程上的 kill -9 / SIGSTOP 故障注入;agentkit.distributed
14 成本与延迟优化 15m 账单失控、重复请求、长尾延迟、成本归因 跨进程共享缓存、模型级联、会取消输家的对冲请求
15 企业知识与权限感知 RAG 15m ACL 泄露、多租户索引隔离、知识过期、幻觉引用 ACL 前过滤检索、切块、引用校验
16 发布、变更与运维 15m prompt 改出事故、模型静默升级、如何止血与回滚 金丝雀分桶、自动回滚决策、多个 worker 进程共同遵守的 kill switch

第三部分:进阶——构建块深入、ML 闭环与应用前沿(约 210 分钟)

# 课程 时长 你会学到 / 亲手实现
17 检索质量:向量、混合检索与重排 20m 教学版 embedding、BM25、RRF 融合、LLM 重排、Recall@k / MRR / nDCG,在带标注的评估集上逐项对比
18 记忆系统进阶:从笔记本到 MemGPT / Mem0 20m ADD / UPDATE / DELETE 记忆写入、三因子检索打分、MemGPT 式分层记忆、记忆巩固
19 MCP 协议与代码执行沙箱 25m 手写 MCP 服务器与客户端(兼容新旧两代规范,与官方 SDK 互通)、进程级沙箱
20 从 agentkit 到框架 25m 同一任务的 DSPy / LangGraph / OpenAI Agents SDK 实现对照、迷你 StateGraph
21 Agent 的数据 25m trace 挖掘、去重聚类、分层抽样、合成数据与过滤、Cohen's kappa、防泄漏划分
22 评估方法论进阶 25m Benchmark 设计规范、成对评委去位置偏差、置信区间与配对检验
23 优化:提示词优化、测试时计算与微调选型 25m OPRO 式指令优化、BootstrapFewShot、GEPA 式反思变异、best-of-N、帕累托前沿
24 编码 Agent 与长时运行 harness 25m 亲手造一个能修 bug 的编码 Agent:ACI 工具、测试保护、diff 审查、跨会话接力
25 主动式 Agent 与前沿方向 20m 用户模型、何时打扰的决策器、前沿方向与开放问题、全课回顾

第四部分:生产落地——结合成熟组件(约 185 分钟)

# 课程 时长 你会学到 / 亲手验证 核心源码
26 状态、队列与分布式协调:Postgres 与 Redis 30m 同一套队列 / 检查点接口从 SQLite 换成 Postgres(SKIP LOCKED、CAS 与 fence 接管)、Redis 幂等 / Lua 令牌桶 / 带 fencing 的锁;真实 worker 进程上的 kill -9 与真实 TCP 网络分区 postgres.py · redis_store.py
27 持久化工作流:用 Temporal 运行 Agent 30m Activity 重试、Signal/Update 审批、continue-as-new、确定性与版本化;kill -9 worker 后由新 worker 接手 temporal.py
28 生产可观测性:OpenTelemetry、Prometheus 与 LLM 观测平台 25m GenAI 语义约定、跨真实 worker 进程的 trace 传播、尾部采样与脱敏、燃烧率告警、Grafana 看板;并发运行下 trace 不串线 otel.py
29 模型网关、策略即代码与护栏服务 30m LiteLLM 路由与降级、Cedar 策略(失败即拒绝)、级联护栏分类器(精确率 0.42→0.92) gateway.py · policy.py · guards.py
30 生产环境的高并发异步运行时 40m 200 个会话:一个接一个 80.7s → gather 0.43s;进程 1→4 个 348→846 任务/秒,再往上是数据库写锁和模型配额;真实 uvicorn 子进程上断开即取消;运行时并发 bug 的复现与修复 agent.py · limits.py · timeouts.py
31 部署与扩缩容:从单机到集群 30m API 与 worker 分离、按队列深度扩缩、优雅停机时间线、压测与故障注入 production/

🎓 综合实战(30 分钟)

ITBuddy:企业 IT 服务台 Agent:把所有能力组装成一个完整系统,并真正跑成服务:API 进程 + 多个 worker 进程共用一个持久化队列(deploy.py 一键拉起),审批可以在一个进程里暂停、在另一个进程里恢复,kill -9 之后工单也只建一张。另有命令行应用、一份真实风格的设计文档(含威胁模型和 ADR)、24 条评估用例(其中 10 条安全用例)、组件消融实验,以及做你自己项目时可以直接套用的报告模板(要求基线对比、消融与错误分析)。

查看学习进度:

.venv/bin/python scripts/progress.py

🎓 与斯坦福 CS329Z 对照学习

斯坦福大学 2026 年秋季开设的 CS 329Z: Engineering AI Agents 讲的是"如何工程化构建 Agent 系统"。下表把它公开课表中的每周主题对应到本项目的课程,方便两边对照着学:

CS329Z 周次与主题 本项目对应
W1 Foundations & Landscape · Agentic Systems Spectrum 00 全景图
W2 LLMs for Builders 01 LLM 与 Agent 开发必备知识(含约束生成与解码策略)
W2 Building Blocks: Retrieval-Augmented Generation 04 · 15 权限感知 RAG · 17 检索质量
W3 Tool Use & Function Calling 03 工具设计 · 19 MCP 与沙箱
W3 Frameworks & Agent Design 02 Agent 循环 · 20 从 agentkit 到框架
W4 Agent Design Patterns & Scaffolds 05 常见 Agent 架构 · 06 编排模式
W4–W5 Memory & Multi-Agent Systems 18 记忆系统进阶 · 06 编排模式(含多 Agent 失败分类)
W5 Optimization 23 优化
W6–W7 Data for Agentic Systems · Data Selection & Quality 21 Agent 的数据
W7 Evaluation Fundamentals & Benchmark Design 11 评估驱动开发 · 22 评估方法论进阶
W8 LLM-as-Judge & Evaluation Infrastructure 11 · 21 · 22
W8 Agent Safety & Guardrails 09 安全与治理(含隐私与红队)
W9 Coding Agents & Software Agents 24 编码 Agent
W11 Proactive Agents · Open Problems 25 主动式 Agent 与前沿方向
项目:基线、消融、错误分析、可复现 综合实战 · 报告模板

反过来,本项目更侧重把 Agent 放进企业生产环境的工程问题,这部分可以看作对 CS329Z 的补充:08 可靠性、10 可观测性、12 生产架构、13 高并发与分布式、14 成本、16 发布运维,整个第四部分(26–31:Postgres/Redis、Temporal、OpenTelemetry、网关与策略、异步运行时、部署扩缩容),以及贯穿全课的多租户、权限与审计。

斯坦福其他 Agent 相关课程:CS 329A: Self-Improving AI Agents(自我改进的 Agent,偏研究)、CS 222: AI Agents and Simulations。

说明:本项目与斯坦福大学及上述课程团队没有任何关联。对照表依据 CS329Z 公开课程主页的课表(2026 年秋季)整理,如有调整以官网为准。

🧰 深度资料(学完之后的"工具书")

文档 内容
🩺 Agent 失败模式图鉴 79 种生产中真实会遇到的失败模式:症状 → 根因 → 检测 → 修复
✅ 设计评审清单 199 条上线前检查项,按 P0/P1/P2 分级
🎤 系统设计面试题 76 道题 + 3 道完整系统设计作答示范
🔁 框架对照表 agentkit 概念 ↔ LangGraph / OpenAI Agents SDK / Claude Agent SDK / ADK …
📄 一页纸速查 原则、默认参数、决策树,适合打印
📖 术语表 246 条术语,中英对照 + 大白话解释
📋 生产就绪指南 每个教学模块离生产还差什么、换成什么、怎么迁移,以及上线前的 P0 清单
📚 延伸阅读 135 条精选并核实过的论文、博客、规范,按角色给出阅读路线

🧱 项目结构

hello-agent-system/
├── agentkit/            # 框架:核心约 3800 行(一套 async 实现),每个模块对应一节课,注释解释每个"为什么"
│   ├── agent.py         #   主循环 + 钩子 + 检查点 + 追踪
│   ├── tools.py         #   工具:Schema 生成、校验、超时、幂等、身份注入
│   ├── context.py       #   上下文窗口策略
│   ├── memory.py        #   长期记忆(租户隔离)
│   ├── workflows.py     #   5 种编排模式 + 多 Agent
│   ├── reliability.py   #   重试 / 熔断 / 降级
│   ├── guardrails.py    #   注入检测 / 数据隔离 / 脱敏
│   ├── permissions.py   #   RBAC + 人工审批
│   ├── tracing.py       #   链路追踪(OpenTelemetry GenAI 风格)
│   ├── viewer.py        #   追踪 HTML 查看器
│   ├── evals.py         #   评估框架
│   ├── limits.py        #   舱壁、令牌桶;timeouts.py:取消安全的超时(第 30 课)
│   ├── distributed/     #   多进程:租约队列、fence 检查点、跨进程限流 / 熔断、worker 进程、WorkerPool 故障注入(第 12–13 课)
│   └── contrib/         #   成熟组件适配器:postgres / redis_store / temporal / otel / gateway / policy / guards(第 26–29 课)
├── lessons/NN_topic/    # 32 节课:README.md + README.en.md 讲义 / demo.py / exercise.py / solution.py / test_exercise.py
├── capstone/            # 综合实战:ITBuddy(API 进程 + worker 进程 + CLI + 设计文档 + 评估集)
├── production/          # 生产参考服务:API + 多 worker + 压测 + 故障注入 + docker-compose / Kubernetes(第 31 课)
├── docs/                # 深度资料(中英双语)
├── scripts/             # 学习进度看板、链接检查
└── tests/               # 框架测试(全部离线)

💡 设计原则

  1. 零魔法:不用任何 Agent 框架。消息就是 OpenAI 格式的 dict,你能看到发给模型的每一个字节。
  2. 生产级模式,教学级代码:检查点、幂等键、熔断器、RBAC、审计……都是真实企业系统里的模式,但每个实现都短到能一口气读完。
  3. 可测试是第一公民:ScriptedLLM 让 Agent 测试像普通单元测试一样确定、离线、免费。
  4. 厂商无关:业务代码只依赖一个 await llm.chat() 接口,模型可随时替换。
  5. 学完能迁移:框架对照表告诉你每个概念在 LangGraph、OpenAI Agents SDK 等框架里叫什么。
  6. 真实而不是模拟:只有一套实现,从第 02 课起就是 async;讲并发就用在途峰值证明,讲多进程就起真进程、发真信号(kill -9、SIGSTOP、SIGTERM、真实 TCP 断网)。做不到的(多主机、真 Redis 故障切换)写成局限。

❓ FAQ

为什么不直接学 LangChain / LangGraph?

框架会变,原理不会。先亲手实现一遍"检查点""人工审批中断""工具校验",你再看任何框架都只是"哦,这个东西在这里叫 xxx"。反过来,只会调框架的人遇到框架没覆盖的生产问题时会束手无策。学完本课程后,框架对照表能帮你一小时内上手任一主流框架。

需要什么基础?

能读懂 Python 函数和类、调过一次 LLM API 即可。代码用到 async/await —— 这是服务端 Agent 的基本功,第 02 课从零讲起;除此之外刻意避免了高级技巧(没有元编程)。讲义与文档中英双语;代码注释与 demo 输出目前是中文(欢迎贡献英文化)。

支持哪些模型?

任何支持 function calling 的 OpenAI 兼容接口。作者本地使用 cliproxyapi 网关 + gpt-5.5 开发和验证。

agentkit 能直接用于生产吗?

要看是哪一层。agentkit 核心是真正的 async 运行时(真并发、真取消、舱壁、流式),但状态默认在内存或本地文件;agentkit.distributed 让它在一台机器上以多个 worker 进程运行、崩溃可接手;多台机器要换成 agentkit.contrib(Postgres、Redis、Temporal、OpenTelemetry、LiteLLM、Cedar 适配器),production/ 是把它们串起来的参考服务。每一层都有真实并发、真实进程和故障注入测试,但仍是参考实现,不是托管产品:比如 Docker / Kubernetes 配置在本机没有实际启动过、Redis 故障切换没有实测。哪些已经做到、哪些还要你自己补,逐项写在 生产就绪指南 里。

🤝 参与贡献

发现错误、想补充一节课、想改进翻译?非常欢迎!请看 CONTRIBUTING.md、课程编写规范 与 翻译规范。

如果这个项目帮到了你,请给一个 ⭐ —— 这会让更多人看到它。

📜 License

MIT

Star History Chart