基于Vercel AI SDK v6构建AI代理系统:Terax实现方案深度剖析
【免费下载链接】terax-aiLightweight (7MB) Terminal-first AI-native dev workspace项目地址: https://gitcode.com/GitHub_Trending/te/terax-ai
Terax 是一款仅7MB的终端优先(Terminal-first)AI 原生开发工作区,其 AI 代理系统完全构建在Vercel AI SDK v6之上。本文将带你完整拆解 Terax 如何用streamText、工具定义(tool)与步骤上限(stopWhen)三大核心原语,搭出一套可审批、可持久化、支持子代理的 AI 代理系统——无论你是否写过 Rust 或 TypeScript,都能看懂其中的设计思路。
🧭 快速认识 Terax:终端优先的 AI 原生开发工作区
Terax 把「终端」放在第一位:Ghostty 渲染引擎驱动的终端、文件浏览器、代码编辑器、源码管理、Web 预览与 AI 聊天,全部整合在一个轻量桌面窗口中(基于 Tauri 双进程模型)。
它的 AI 子系统采用BYOK(自带 API Key)模式:密钥只存放在系统钥匙串,绝不落盘到设置文件或localStorage。官方架构文档在 TERAX.md 与 ai-subsystem.md,后者明确写道:
Agent 层构建在 Vercel AI SDK v6 的聊天语义之上:
streamText、工具定义,以及stopWhen步骤上限。
这句话就是整篇文章的路线图。下面逐层展开。
⚙️ AI 代理架构:Vercel AI SDK v6 如何驱动 Terax
模型接入层:一套接口兼容 13 家供应商
在 package.json 中可以看到核心依赖"ai": "^6.0.207"以及@ai-sdk/openai、@ai-sdk/anthropic、@ai-sdk/google等官方 Provider 包。
buildLanguageModel 函数按供应商分支,构造出 AI SDK 统一的LanguageModel实例,覆盖:
| 类别 | 供应商 |
|---|---|
| 云端 | OpenAI、Anthropic、Google、xAI、Cerebras、Groq、DeepSeek、Mistral、OpenRouter |
| 本地/离线 | LM Studio、MLX、Ollama(均走 OpenAI 兼容协议) |
| 自定义 | openai-compatible任意 Base URL |
云端供应商用各自的 SDK 构造函数;本地模型则统一复用createOpenAICompatible,并注入一个允许私有网络访问的localProxyFetch。所有模型实例按「供应商 + Key + 模型 ID」做缓存,避免重复构建。模型元数据(上下文窗口、价格、推理行为)集中维护在 config.ts 的模型注册表中。
代理运行循环:一次请求背后的 5 个步骤
主入口是 runAgentStream,它把一次对话变成一条流水线:
- 解析模型—— 通过
buildConfiguredLanguageModel拿到 LanguageModel 实例; - 构建稳定系统提示词—— 基础提示词(按模型选型)+ 项目记忆(
TERAX.md)+ 人格设定 + 用户自定义指令,拼装后保持稳定,利于提示词缓存命中; - 消息治理——
convertToModelMessages转换 UI 消息,pruneMessages清理推理内容,超出上下文窗口时用 compact.ts 压缩旧消息; - 流式推理—— 调用
streamText,挂载 buildTools 组装的完整工具集,并用stopWhen: stepCountIs(MAX_AGENT_STEPS)限制最多24 步(见 config.ts),防止代理失控烧 Token; - 状态上报—— 每一步通过
onStepFinish回调上报「正在读什么文件 / 正在跑什么命令」和 Token 用量增量,驱动 UI 上的步骤标签与费用显示。
前端侧,chatRuntime.ts 用@ai-sdk/react的Chat对象接管整个生命周期,并通过自定义ChatTransport(transport.ts)把模型配置、密钥、工具上下文全部以「惰性 getter」方式接入——工具调用时才去读当前终端的 cwd,而不是每轮都提前快照。
🛡️ 工具系统与审批机制:让 AI 改代码更安心
AI 代理最核心的风险是「它会不会乱来」。Terax 的答案是一套清晰的审批策略,写在 tools.ts 的注释里,并落实到每个工具的needsApproval标志:
| 工具类型 | 工具 | 执行策略 |
|---|---|---|
| 只读 | read_file、list_directory、grep、glob | 自动执行,但先过安全黑名单(拒绝.env、.ssh/等敏感路径) |
| 变更 | write_file、edit、multi_edit、bash_run、bash_background等 | needsApproval: true,AI SDK 暂停并弹出审批卡片 |
两个细节尤其值得借鉴:
- 先读后改不变量:edit.ts 强制要求模型必须在本次会话中先
read_file过目标文件才允许edit,否则拒绝——从机制上杜绝「没看过就改」; - 命令安全校验:shell.ts 在执行任何 shell 命令前先过
checkShellCommand安全检查,且每个会话拥有持久 shell(cd之后的目录会保留),后台进程输出写入 4MB 环形缓冲区。
用户侧的审批交互由 AiToolApproval.tsx 渲染为确认卡片;批准后借助lastAssistantMessageIsCompleteWithApprovalResponses自动继续执行,无需手动重发。
编辑差异预览:逐块确认再落盘
AI 提议的文件编辑会先打开一个ai-diff标签页,用户按 hunk(代码块)逐块接受或拒绝,只有被接受的修改才会真正触发write_file/edit执行。审批 UI 与工具执行完全解耦。
开启Plan 模式时更激进:所有变更工具不立即执行,而是排队进入 planStore.ts,由 PlanDiffReview.tsx 汇总成一份批量 diff 供一次性审阅。
🤖 子代理(Sub-agent):并行探索大型代码库
当主代理需要「大范围搜索、代码审查、安全审计」这类自包含任务时,可以调用run_subagent工具派生一个隔离的子代理——它拥有全新的消息历史和受限的工具白名单,只返回一段文字摘要,不污染主代理上下文。
registry.ts 注册了 4 个内置子代理:
- explore:只读代码库探索,定位文件、追踪引用、总结架构
- code-review:审查变更代码的正确性、架构、性能、安全
- security:安全审计(注入、认证绕过、密钥泄漏等)
- general:跨多文件的多步研究任务
安全上做了双重保险:子代理工具白名单全部是只读工具(read_file、grep、glob、list_directory),且子代理的工具集里剔除了run_subagent本身——递归从机制上被禁止(实现见 runSubagent.ts 与 subagent.ts)。
💾 会话持久化与上下文管理:长对话不丢记忆
对话按**会话(Session)**组织,持久化由tauri-plugin-store完成(sessions.ts):
sessions键存会话元数据列表,activeId键记录当前会话messages:<id>键按会话懒加载消息,避免一次性全量读盘- AgentRunBridge.tsx 在每次消息变化时镜像落盘,并根据首条用户消息自动派生会话标题
长对话的上下文压力则交给前面提到的压缩管线:超出模型上下文窗口时,compactModelMessagesDetailed会丢弃最旧的消息并回调 UI 提示「已压缩 N 条」,保证对话可以持续进行而不爆上下文。
🚀 上手指南:3 步体验 Terax AI 代理
第 1 步 · 克隆仓库
git clone https://gitcode.com/GitHub_Trending/te/terax-ai第 2 步 · 安装依赖(项目要求 Node ≥ 22 与 pnpm)
pnpm install第 3 步 · 配置模型密钥并启动
打开 Settings → AI / Models,填入任一供应商的 API Key(或指向本地的 Ollama / LM Studio),然后pnpm tauri dev启动应用。在底部输入框问一句「帮我解释这个项目里 AI 代理是怎么跑起来的」,你就能实时看到工具调用标签、Token 用量和审批卡片——也就是本文剖析的整套机制。
📝 小结:Terax 给「AI 代理应用」的三条启示
- 贴着 SDK 语义走—— 坚持
streamText+ tools + 步数上限的标准形态,UI、会话、压缩等上层逻辑才能稳定复用(这也是 ai-subsystem.md 列出的不变量之一); - 审批分层—— 只读工具秒过、变更工具必审、编辑逐块确认,安全体验比「一刀切禁止」友好得多;
- 用机制代替提示词—— 先读后改、子代理禁递归、密钥只进钥匙串,这些约束都写死在代码路径里,而不是寄望模型「自觉遵守」。
如果你想进一步研究安全边界,可继续阅读 security-model.md;终端渲染与双进程模型的细节见 two-process-model.md。
【免费下载链接】terax-aiLightweight (7MB) Terminal-first AI-native dev workspace项目地址: https://gitcode.com/GitHub_Trending/te/terax-ai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考