ZOYKUHot Board

zed123214/kitagentTài liệu kỹ thuật

KitAgent:面向算子开发与性能优化的 Coding Agent。以 LangGraph 状态机编排开发、验证与迭代,集成工具执行、人工审批、会话恢复、Skills / MCP 扩展与 Kubernetes 沙箱。

Thông báo ngôn ngữ:Chưa có tài liệu tiếng Việt cho kho lưu trữ này. Đang hiển thị bản gốc tiếng Anh chính thức.
Cài đặt nhanh
pip install kitagent

KitAgent

把开发任务交给 Agent,查看过程、审批工具、导出报告

开源 AI Agent 运行时与可视化工作台

对话驱动任务 · 实时工具追踪 · 人工审批 · 会话记忆 · Kubernetes 沙箱

CI GitHub stars Python 3.12 React 19 Kubernetes Sandbox MIT License

中文 · English

产品演示 · 算子优化实战 · 核心能力 · 系统架构 · 快速开始 · 文档导航

⭐ Star KitAgent · 开始使用 · 阅读实现


KitAgent 面向想使用、学习或扩展 AI Agent 的开发者。你描述任务,Agent 阅读代码、修改文件、执行命令;你在自己的工作台中查看工具输入输出、决定是否批准调用,并导出包含结论和执行记录的报告。

你可以从这三件事开始:

  • 完成开发任务:让 Agent 检查仓库、执行测试、整理报告,在同一会话里补充要求、继续修改。
  • 学习 Agent 如何运行:沿着任务、工具调用、人工审批和事件记录阅读实现,再查看会话记忆、持久化恢复与沙箱的设计。
  • 扩展自己的工作流程:用 Markdown Skills 保存步骤,通过 MCP 接入工具,用 Subagents 拆分独立子任务。

先看操作演示,或直接启动工作台;希望研究实现,可以从系统架构进入。

📸 产品演示

从算子规格,到实现、正确性验证与性能实测。

KitAgent 算子开发演示:实现 Equal、审批测试、对比实测性能并导出报告

Equal 算子开发 · 广播与边界验证 · 基线性能对比 · 开发报告
查看高清截图 · 下载完整视频 · 启动工作台

以 Equal 算子开发为例:

开发 Equal 算子,支持标量广播,验证正确性并对比基线性能,生成开发报告。

步骤 你在工作台中看到的内容
① 确认规格 读取 Equal 规格,明确等长比较、标量广播与边界语义。
② 编写实现 审批写入算子实现,将等长与广播路径分开,移除逐元素取模索引。
③ 验证与实测 审批运行测试,验证 75 个用例;对三组输入预热 3 次、采样 9 次,对比中位耗时。
④ 交付报告 审批保存开发报告,读回核对结果;导出结论、工具证据和审批记录。

工具调用与人工审批

KitAgent 审批界面:查看待执行工具及参数,选择批准或拒绝

工作台提供「只读 / 按需询问 / 自动批准」三种会话权限模式,并支持查看和撤销已记住的工具授权。

内置离线演示 · 脚本化模型响应 + 实际工具执行 · 在本机体验

🧪 用 Agent 做算子优化:从 Equal 到 SparseFlashAttentionGrad

算子把数学运算变成硬件上的数据搬运与计算。以 Equal 为例,比较两个数只需一步,但处理整块 Tensor 时,还要安排广播索引、分块搬运和多核执行。性能优化就从这些安排入手。

这里用两个案例带你走完开发过程:从 Equal 学会广播、分块与复用,再用 SparseFlashAttentionGrad 理解矩阵核与向量核协作、流水排程和负载均衡。你可以在 KitAgent 中逐轮分析、修改、执行测试,并查看每一步的工具输出。

Equal:一次比较背后的数据安排

Equal 对两个 Tensor 逐元素比较,输出 BOOL。输入 [2,1] 和 [1,3] 时,输出是 [2,3]:一边沿列重复,另一边沿行重复。实现时可以通过地址映射读取原输入,让每一块输出找到对应的数据。

第一步,把重复的索引工作提前算好。 Host 合并广播模式相同的相邻维度,预计算每一维的 stride。Kernel 每次定位一段连续数据,随后成批比较,减少内层循环的坐标计算。

第二步,让搬进来的数据多用几次。 按输入类型和 UB(片上缓冲区)容量确定 tile 大小,将输入、输出和计算暂存一起纳入预算。标量缓存、广播面缓存和尾行复用减少重复读取;多核切分让各核处理自己的输出区间。

第三步,把数值语义放进测试。 浮点比较覆盖 NaN、正负零和无穷大;INT64 将高低 32 位分别比较,再合成结果,保留完整整数信息。通过 ACLNN 接口,把参数校验、计算和输出交付串起来。

开发环节 学到的方法 交付结果
规格与基线 用广播示例和特殊值定义正确行为。 输入输出契约、CPU golden、测试矩阵。
Tiling 与 Kernel 在 Host 预处理索引,在设备上按块比较和复用数据。 广播轴压缩、多核分块、向量比较、缓存复用。
验收与合入 固定版本,对照结果,汇总逐项测试。 306/306 精度通过,代码通过 cann/ops-math PR #5425 合入。

SparseFlashAttentionGrad:把工作分对,减少整条流水的等待

稀疏 Attention 反向计算需要生成 dQ / dK / dV 三路梯度,同时处理索引、系数和梯度累加。优化时要一起考虑每块数据何时就绪、交给哪个核、结果在哪里汇总。

先优化频数统计。 稀疏索引 [2,0,2,3] 对应 key [0,1,2,3] 的频数是 [1,0,2,1]。重复 key 的贡献按次数进入梯度。将索引排序后,用累计计数边界的差批量生成频数,可以改变逐条读写计数槽的处理方式。

再拆开计算与协调。 AIC(矩阵核)执行矩阵乘,AIV(向量核)处理频数和系数,并汇总就绪信号。用时间线把生产系数、发布信号、等待和梯度计算连起来,就能找到谁在阻塞下一轮。

最后按完整任务分核。 将 512 行切成 128 / 128 / 128 / 64 / 64 后,还要把各核后续的 dK / dV 归约计算进去。短块核承担的查询行少,却可能因为额外归约工作拖长收尾;把部分归约重新分给长块核,就能改善整组任务的完成时间。

五分片 Tiling 动图:512 行分片、定位短块核归约尾部、转移归约任务与双顺序性能对照

五分片动态演示: 512 行分块 → 找到短块核尾部 → 长块核分担归约 → 双顺序对照。

查看静态结果 · 动图生成源码

下面这轮 910B3 五分片样机实验,展示了如何用测量推动下一次修改:

迭代 观察 方法
初次分片 两种测量顺序下,耗时分别增加 4.76% / 1.47%;dK / dV 尾部集中在短块核。 同时统计查询行和梯度归约的负担。
调整任务归属 正序 280.17 → 258.99 μs;反序 275.31 → 259.71 μs。 重新分配归约,耗时分别下降 7.56% / 5.67%。
集成回归 R5 在 910B4 / CANN 8.5.0 下完成 56 份 FP16 精度报告、112 次毒值检查。 对完整梯度、输出写入和输入不变性一起验证。

这一轮的关键是:测出尾部集中在哪里,将查询与归约合起来分配,再用相同条件对照验证。下一次优化继续从新的时间线开始。

从案例中提炼四步优化方法

步骤 要解决的问题 具体做法
① 测量耗时 时间花在计算、搬运还是等待? 跑通基线,用 profiling 和时间线找到决定完成时间的阶段。
② 减少搬运 同一份数据读写了多少次? 融合相邻计算,把数据切成能放进片上存储的小块,让中间结果和重复输入就地复用。
③ 安排并行 哪些核在忙,哪些核在等? 让矩阵核做矩阵乘、向量核处理系数;交叠搬运与计算,按实际工作量分配任务。
④ 对照验证 这项改动带来了什么变化? 对齐输入和环境,检查参考输出,重复测量基线与候选,记录差异并选择下一项优化。

延伸阅读:小林coding 的《杀进决赛!这 28 支队伍把算子优化卷疯了!》从数据搬运、分块复用和任务分配讲解算子优化。

把这套方法交给 KitAgent

在工作台中提供源码、任务说明、参考实现和测试命令,用同一会话推进分析、修改和验证。你可以随时补充要求,在工具时间线查看执行过程,从审批卡决定工具调用,最后导出运行报告。

轮次 交给 Agent 的任务 你检查的产物
读懂任务 解释输入输出,画清数据依赖,整理构建和测试入口。 计算步骤、验证命令、正确性基线。
找到瓶颈 分析 profiling,比较算法、搬运和任务分配方案。 耗时分布、优化假设、候选改动。
跑一轮实验 修改候选,执行精度测试与配对测速。 代码差异、逐项结果、前后耗时。
继续迭代 根据结果保留或调整方案,完成集成回归。 可交付版本、实验结论、运行报告。

复制这段任务,开始你的第一轮优化

请协助优化工作区中的算子。

先阅读任务说明、源码与参考实现,整理输入输出、数据依赖、
构建命令和测试入口,建立正确性与性能基线。

分析时间花在计算、数据搬运、索引处理还是核间等待。
选择一项优化,解释它如何减少开销,保存基线并实现候选。

使用相同输入检查输出,按基线→候选、候选→基线的顺序
重复测速。汇总代码改动、精度结果与耗时变化,
据此决定下一轮实验,最后生成可复盘的优化报告。

处理更大的任务时,可用 Subagents 分别研究算法、流水线和测试,由主任务汇总方案、安排设备测量并完成集成。将成熟步骤整理为 Skills,下一次开发继续复用。

启动工作台,把你的算子优化任务交给 Agent。

LangGraph 实战:算子优化状态机

把一次算子优化组织成可追踪的工作流:制定计划、验证候选、评估性能、诊断重试、审核交付。每个节点更新共享状态,下一步由验证结果与审核决定驱动。

flowchart LR
    A[plan 任务规划] --> B[validate 精度检查]
    B -->|通过| C[benchmark 性能评估]
    B -->|失败| D[diagnose 诊断与迭代]
    C -->|退化| D
    D -->|继续迭代| B
    D -->|达到上限| F[fallback 保留基线]
    C -->|达标| E[review 审核中断]
    E -->|approve| G[deliver 接受候选]
    E -->|reject| F
    G --> H[report 输出报告]
    F --> H
Loading
LangGraph 场景 示例实现 你能看到什么
有状态工作流 StateGraph 保存阶段、候选序号、决策历史和选中版本 每轮结果随状态流转,失败记录持续保留
条件路由 精度与性能结果决定后继节点 精度失败跳过计时,性能退化进入诊断
迭代与终止 max_attempts 控制候选轮次 预算耗尽后保留基线并生成报告
审核与恢复 interrupt() 暂停,Command(resume=...) 传回决定 批准后交付,拒绝后保留基线
检查点 InMemorySaver 按 thread_id 保存进程内状态 从审核节点续跑,已完成的评估保持原样
工具集成与观测 KitAgent Graph 引擎调用工作流工具,业务图输出节点更新 同时观察 model / kit_tools 与业务阶段,导出 JSON 报告

运行一次完整流程:

uv run --frozen --extra graph python examples/operator_workflow_demo.py --review approve --output operator-report.json

切换 --review reject 查看审核拒绝分支;设置 --max-attempts 1 查看提前结束与基线保留。--review 指定本次演示在审核检查点恢复时使用的决定。

内置案例使用 SparseFlashAttentionGrad 的归档实验记录:五分片初稿退化后进入下一轮,重分配候选通过评估后进入审核。报告保留各候选的对照耗时、变化率、来源、审核决定及最终版本。

查看状态机代码 · 查看分支与恢复测试 · 了解 KitAgent Graph 引擎

✨ 核心能力

一个 Core,三种交互方式

在 Web 工作台中对话、审批和查看报告,在 CLI 中提交任务与接入脚本,在 Textual TUI 中进行终端交互。三种入口共用运行时协议,任务执行和会话状态由 Core 管理。

Web 网关持续连接 Core,刷新浏览器后可以继续观察正在执行的任务。

看得见的执行过程

通过流式回复和工具时间线查看任务进展:调用了什么工具、输入是什么、结果如何、用了多久。每次运行的事件保存到 events.jsonl,支持历史回放;父任务与子任务通过关联标识串联。

运行报告汇集本轮结论、工具输出和审批记录,方便复盘与分享。

多轮协作与工具审批

通过多轮对话补充要求、调整任务方向;通过审批卡片决定工具是否执行。你可以为当前会话记住某个工具的授权,也可以从权限菜单中撤销。

工具注册、参数校验、权限策略和执行记录采用同一套机制,内置工具与 MCP 工具都能接入。

会话记忆与能力扩展

会话历史、长期笔记和压缩摘要分层保存,让 Agent 在后续轮次中沿用已有信息。使用 Markdown Skills 封装工作流程,通过 MCP 连接外部工具,将独立子任务交给拥有各自上下文的 Subagents。

执行引擎与持久化恢复

默认 Loop 引擎运行模型与工具循环;可选 LangGraph 引擎提供显式节点编排。启用 Graph + SQLite + Local 后,可保存执行检查点与审批中断,在 Core 重启后续接任务,并复用已经记录的工具结果。

按会话组织的 Kubernetes 沙箱

本地开发使用 Local 工具环境;需要独立工作区时,启用 Kubernetes Sandbox,为每个会话按需创建 Pod。同一会话中的多轮任务与子 Agent 共用工作区,支持资源限制、网络策略、空闲回收和关闭清理。

🏗️ 系统架构

KitAgent 系统架构:Web、CLI、TUI 连接 Core,通过共享的引擎、工具、权限和事件机制接入模型、本地环境、Kubernetes 沙箱与扩展能力

高清 PNG · 可编辑 draw.io 源文件 · 架构设计详解

任务路径: 提交目标 → Core 创建任务 → 执行引擎调用模型 → 工具审批与执行 → 事件推送 → 会话结果。

层次 技术与职责
交互层 React 19、TypeScript、assistant-ui、Textual;提供 Web、CLI 与 TUI。
连接层 FastAPI、WebSocket;网关通过 JSON-RPC 2.0 / NDJSON TCP 连接 Core。
运行时 Python 3.12、asyncio、Pydantic v2;管理会话、任务、权限与事件。
执行引擎 Loop / LangGraph;复用模型、工具和会话接口。
模型接入 Anthropic Provider;通过服务端配置设置模型与 API Key。
工具环境 Local / Kubernetes;承载命令执行与文件操作。
持久化与扩展 JSONL、Markdown、SQLite;支持事件回放、记忆、恢复、Skills 与 MCP。

📊 工程实测

2026-09-09,在 单节点 kind / Kubernetes v1.36.4 / Cilium 1.20.1 环境完成沙箱验收,使用离线 Provider 与预加载镜像。

验证项 结果
真实集群验收 M1 13/13,M2 442/442,覆盖 12 类实验。
并发会话隔离 20 个 Session,200 次跨会话读写探测,泄漏 0。
创建与回收 100/100 完成,最终资源残留 0。
沙箱冷启动 到 Ready 的 p95 为 3.52 s,30 个样本、串行采样。
就绪后执行开销 p95 19.26 ms,100 个样本,按 Core 总耗时减 Worker 命令耗时计算。

查看沙箱配置与验收复现入口 →

🚀 快速开始

以下命令在 Linux / WSL2 的 Bash 中运行。准备 Python 3.12、uv;Web 工作台还需要 Node.js 22.12+ 构建前端。

1. 安装并配置模型

git clone https://github.com/zed123214/kitagent.git
cd kitagent
uv sync --frozen --extra web
cp .env.example .env

编辑 .env,填写模型服务配置:

ANTHROPIC_API_KEY=your-api-key
AGENTRT_LLM_DEFAULT_MODEL=claude-sonnet-4-6

2. 构建工作台

cd frontend
npm ci
npm run build
cd ..

3. 启动 Core 与 Web 网关

在项目根目录打开两个终端。

终端一 · Core

uv run --frozen --extra web agentrt-core

终端二 · Web 网关

uv run --frozen --extra web agentrt-web

打开网关输出的启动链接(http://localhost:8765/#bootstrap=…),新建会话,即可提交第一条任务。默认使用 Loop + Local,工具在 Core 的工作目录中执行。

也可以从终端开始

Core 启动后,在另一个终端使用 CLI 或 TUI:

# 检查连接
uv run --frozen --extra web agentrt ping

# 提交任务
uv run --frozen --extra web agentrt run --goal "阅读项目结构,整理主要模块及其职责"

# 打开终端交互界面
uv run --frozen --extra web agentrt-tui

无需 API Key:体验执行引擎与跨进程恢复

运行模型 → 工具 → 模型的离线示例:

uv run --frozen --extra graph python examples/graph_offline_demo.py

体验 Core 重启后续接任务、复用已完成的工具结果:

uv run --frozen --extra graph-sqlite python examples/durable_recovery_demo.py

浏览器离线演示见工作台说明。

选择运行模式

模式 适用场景 使用指南
Loop + Local 浏览器工作台、本地开发与日常任务 工作台 · 运行手册
Graph + Memory 显式节点编排与进程内会话续接 Graph 引擎
Graph + SQLite + Local Core 重启恢复与持久化人工审批 恢复配置
Loop / Graph Memory + Kubernetes 按会话分配的容器工作区 沙箱部署

📚 文档导航

我想…… 从这里开始
使用浏览器工作台 Web 工作台
配置并运行项目 运行手册
理解任务执行链路 系统架构 · Agent Loop
使用 Graph 与故障恢复 Graph 引擎 · 持久化恢复
部署 Kubernetes 沙箱 部署指南与验收复现
配置权限和会话记忆 工具权限 · 会话记忆
学习算子优化工作流 Equal 与 SparseFlashAttentionGrad 案例
扩展工作流程与工具 Skills / Subagents / MCP
开发客户端或参与贡献 通信协议 · 贡献指南

🤝 参与贡献

欢迎通过 Issues 分享使用场景、反馈问题,或提交 Pull Request。开发环境与检查命令见 CONTRIBUTING.md。

📄 License

MIT

Bản sao tài liệu lưu trữ từ kho lưu trữ GitHub chính thức · Xem trên GitHub
Ngày đồng bộ: 2026-11-14