Files
short-video-viral-replicator/agent-studio-mini/README.md
T

58 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Agent Studio Mini
可运行的内部培训 Harness:assistant-ui 负责交互呈现,Fastify 负责 HTTP/SSE,Harness 管理 Session、事件、审批、图片和安全边界,Pi Coding Agent SDK 执行真实 Agent Loop。截图可在首次启动后补入 `docs/screenshot.png`。
```mermaid
flowchart LR
UI[assistant-ui Composer/Thread/Tool UI] -->|HTTP + SSE| API[Fastify API]
API --> R[SessionRegistry]
R --> P[Pi AgentSession]
R --> E[EventStore / ApprovalBroker]
P --> L[DefaultResourceLoader / Tools]
E --> UI
L --> S[Skills / Workspace / ModelRuntime]
```
## 快速开始
要求 Node.js 20+ 与 pnpm。运行 `pnpm install`,复制 `.env.example` 为 `.env` 并按需填写,然后 `pnpm dev`;Web 为 <http://localhost:5173>,API 为 <http://localhost:3001>。也可不写环境密钥,在顶部“模型设置”中提交 Provider、API、Base URL、Model ID、Vision 能力与 API Key。密钥只在当前服务进程的 Session 内存中保存,不回传、不写 Web Storage 或 Pi 全局文件。
课堂 Demo:配置模型,发送“请使用 demo-report Skill,读取 demo-account 最近 7 天演示数据,分析 Campaign,生成含 3 条建议的报告草稿。保存后读取报告并核对指标,明确验收是否通过。”该流程只使用固定演示数据,不查询客户账户。`save_report_draft` 会暂停并等待批准;Approve 写入 Session 固定 `report.md`,Deny/Timeout 不写文件。自动验收可在 apps/server 目录执行 `pnpm exec tsx ../../scripts/verify-demo.mts`;脚本仅自动批准自己新建会话的演示报告写入。
## 页面与功能展示
![Beryl Agent 工作台](./agent-page-overview.png)
- **任务详情页**:历史任务可查看当前会话中的用户指令与 Agent 结果;所有详情页均提供“返回工作台”、右上角关闭、点击外部关闭和 `Esc` 退出。
- **日报 / 周报**:Agent 完成 `save_report_image` 后,报告图片会直接出现在对话和对应报告页;支持页面内预览及打开大图。
- **转化漏斗**:日报和周报按“曝光 → 点击 → 访问 → 加购 → 购买”展示关键指标,商品曝光包含所有视频与商品页曝光的汇总口径。
- **快捷任务**:日报、周报、投放分析和素材策划卡片点击后仅带入指令,不会自动提交固定问题。
- **运行详情**:右侧展示接收任务、分析规划、工具执行、人工确认和结果整理状态,并保留工具调用与错误诊断信息。
- **技能目录**:展示已加载 Skill 及诊断状态,支持关闭按钮和点击外部退出。
> 仓库展示图不包含 API Key、真实账户凭据或浏览器记录。模型凭据只允许放入本机 `.env` 或当前服务进程,不提交到 Git。
## 职责与行为
- Pi `AgentSession` 与 Harness Event Store 是事实来源;`useExternalStoreRuntime` 只是投影层,不请求模型。
- Skills 由 `DefaultResourceLoader.reload()` 发现,Catalog 仅显示元数据;正文保留 progressive disclosure。
- `.agents/skills`、`.pi/skills` 和按操作系统 `path.delimiter` 解析的 `AGENT_SKILLS_DIRS` 会 canonicalize、去重和诊断。
- `skill.requested`/`skill.loaded` 是 Harness 根据 canonical `SKILL.md` read 请求/成功结果推导的事件,不是 Pi 原生事件。(当前教学实现保留索引边界,完整 read preflight 映射见路线图。)
- Tool 白名单为 `read/grep/find/ls/mock_ads_metrics/save_report_draft`;未知 Tool deny,shell/edit/write 不注册。
- 上传只接受 magic bytes 与 MIME 一致的 JPEG/PNG/WebP,Sharp 自动旋转、限制像素并重编码去元数据;结构化图片传入 `session.prompt(text,{images})`。
- SSE 支持 sequence、Last-Event-ID、补发、15 秒 heartbeat、去重所需 ID 与断开清理。
## 版本与 API 核对
2026-08-26 核对 Pi 官方 SDK/Skills/Extensions/Security/Models/Providers 文档及 assistant-ui Custom Runtime/External Store/Tools/Tool UI/Attachments 文档,并检查安装包类型。实际锁定:`@earendil-works/pi-coding-agent` 0.84.3、`@assistant-ui/react` 0.15.16、`@assistant-ui/react-markdown` 0.14.12、Fastify 5.12.1、TypeBox 0.34.x。Pi 当前公开 `createAgentSession`、`DefaultResourceLoader`、`ModelRuntime.registerProvider/setRuntimeApiKey`、`SessionManager.inMemory`、`defineTool`/TypeBox;assistant-ui 当前公开 `useExternalStoreRuntime`、Toolkit 与 Attachment 类型。独立 markdown 包没有 0.15.x,故按注册表实际稳定版 0.14.12。未使用 `unstable_*`、`makeAssistantTool` 或 `useAssistantToolUI`。
## 安全边界与限制
Pi **没有内置 Sandbox**,Project Trust 只是项目资源加载防线,不是执行隔离;Pi 与 Extension 继承 Node 进程权限。本课堂版用显式工具 allowlist、随机 Session cwd、路径守卫、固定报告路径、审批、SSRF/DNS 检查、图片重编码与事件脱敏降低风险,但不等于 OS Sandbox。不可信 Skill、脚本、仓库或无人值守任务必须运行在 Docker、VM、micro-VM 或远程 Sandbox。
状态是单进程内存,重启丢失;没有用户鉴权、CSRF、速率限制、分布式协调或对象存储。生产化应加入 Redis/Postgres、对象存储、KMS、身份与租户鉴权、CSRF/限流、容器隔离、不可变审计日志和分布式 SSE。
## 验证
`pnpm lint`、`pnpm typecheck`、`pnpm test`、`pnpm build`。默认测试使用 fake/内存边界,不需要真实 API Key 或真实模型。更多内容见 [架构](docs/architecture.md)、[事件映射](docs/event-mapping.md)、[安全边界](docs/security-boundaries.md)、[课堂演示](docs/classroom-demo.md)和[生产路线](docs/production-roadmap.md)。