今天在 GitHub Trending 上看到一个有意思的项目:Flue,这是一个由Astro团队推出的Agent Harness框架,专注于帮助开发者构建真正自主的AI Agent,而不是简单的对话机器人。
一、项目概述
解决什么问题
早期的AI Agent大多基于原始的LLM API调用构建,这种方式只适用于简单的聊天机器人和脚本化任务。真正的自主Agent(如Claude Code、Codex)需要完全不同的架构——你给它们一个任务,而不是预定义的步骤序列,然后信任它们利用提供的上下文和工具来完成工作。
Flue正是为这种新一代自主Agent设计的框架,它提供了完整的TypeScript工具链,让任何模型都具备真正自主工作所需的上下文和环境。
核心特性
- Agents:构建能够在对话和事件中保持上下文的自主Agent
- Workflows:运行结构化自动化流程,代码引导Agent推理
- Sandboxes:为Agent提供安全执行环境,支持工具调用、文件修改
- Durable Execution:持久化执行,失败和重启后能恢复进度
- Subagents:定义专业角色,让主Agent委托给专家子Agent
- Tools:类型安全的API调用、数据查询和受控变更
- Skills:可复用的专业知识和工作流包
- MCP Servers:连接认证工具和服务
- Observability:OpenTelemetry、Braintrust、Sentry等监控集成
- Channels:从Slack、Teams、Discord、GitHub等接收事件
二、技术原理
架构设计
Flue的核心架构围绕"Harness"概念构建——一个为Agent提供完整运行时环境的框架。从源码可以看到,它采用模块化设计:
// agents/triage.ts
import { createAgent, type AgentRouteHandler } from '@flue/runtime';
import { local } from '@flue/runtime/node';
import triage from '../skills/triage/SKILL.md' with { type: 'skill' };
import verify from '../skills/verify/SKILL.md' with { type: 'skill' };
import * as githubTools from '../tools/github.ts';
export default createAgent(() => ({
model: 'anthropic/claude-sonnet-4-6',
tools: [...githubTools],
skills: [triage, verify],
sandbox: local(),
instructions,
}));
这个设计体现了几个关键思想:
- 声明式配置:通过对象配置Agent的所有能力,包括模型、工具、技能、沙箱和指令
- 模块化组装:工具、技能、沙箱都是独立模块,可按需组合
- 类型安全:完整的TypeScript支持,编译期类型检查
核心包结构
从package.json可以看出项目结构:
{
"name": "flue",
"type": "module",
"license": "Apache-2.0",
"engines": {
"node": ">=22",
"pnpm": ">=11 <12"
}
}
主要包包括:
@flue/runtime:运行时核心,包含harness、sessions、tools、sandbox@flue/cli:命令行工具和构建/开发工具链@flue/sdk:客户端SDK,用于消费部署的Agent和Workflow@flue/opentelemetry:OpenTelemetry追踪适配器@flue/postgres:PostgreSQL持久化适配器
关键技术选型
- ESM模块系统:使用
"type": "module",完全拥抱现代JavaScript生态 - pnpm工作区:monorepo架构,统一依赖管理
- Node 22+:利用最新Node.js特性,如原生TypeScript支持
- Turbo构建:高性能增量构建系统
沙箱执行机制
Flue支持多种沙箱环境:
import { local } from '@flue/runtime/node';
// 或使用远程容器
sandbox: local() // 本地沙箱
sandbox: docker() // Docker容器
sandbox: remote() // 远程沙箱
这确保Agent在隔离环境中执行代码,不会影响宿主系统。
三、安装与快速开始
环境要求
- Node.js >= 22
- pnpm >= 11 < 12
安装步骤
# 克隆项目
git clone https://github.com/withastro/flue.git
cd flue
# 安装依赖
pnpm install
# 开发模式
pnpm dev
# 构建
pnpm build
# 测试
pnpm test
最简运行示例
创建一个基础Agent:
// agents/hello.ts
import { createAgent } from '@flue/runtime';
export default createAgent(() => ({
model: 'anthropic/claude-sonnet-4-6',
instructions: `你是一个友好的助手,帮助用户解决问题。`,
tools: [],
skills: [],
}));
四、使用方法与实战
构建Triage Agent
Flue官方示例展示了一个完整的Bug分类Agent:
const instructions = `
Triage a bug report end-to-end: reproduce the bug,
diagnose the root cause, verify whether the behavior is
intentional, and attempt a fix.
`;
export default createAgent(() => ({
model: 'anthropic/claude-sonnet-4-6',
tools: [...githubTools],
skills: [triage, verify],
sandbox: local(),
instructions,
}));
这个Agent能够:
- 复现Bug
- 诊断根本原因
- 验证行为是否为预期
- 尝试修复
HTTP路由暴露
Flue支持将Agent暴露为HTTP服务:
export const route: AgentRouteHandler = async (_c, next) => next();
这使得Agent可以通过API调用,集成到任何应用中。
部署选项
Flue支持多种部署平台:
- Node.js:传统服务器部署
- Cloudflare Workers:边缘计算
- GitHub Actions:CI/CD集成
- GitLab CI/CD:自动化流程
- Daytona:开发环境
- Render:云平台
实际应用场景
- 自动化代码审查:Agent分析PR,提供建议
- 智能客服:处理复杂客户问题,多轮对话
- 数据处理管道:ETL任务的自主执行
- DevOps自动化:监控告警的自动响应
五、常见问题与解决方案
Q1: 安装依赖失败
问题:pnpm install报错
解决方案:
- 确保Node版本 >= 22:
node -v - 确保pnpm版本在11-12之间:
pnpm -v - 清理缓存:
pnpm store prune
Q2: Agent无法调用工具
问题:Agent返回错误,无法执行工具
解决方案:
- 检查工具定义是否正确导出
- 确保沙箱环境正确配置
- 查看运行时日志,确认工具注册成功
Q3: 持久化失败
问题:Agent重启后丢失上下文
解决方案:
- 配置PostgreSQL适配器:
@flue/postgres - 确保数据库连接正常
- 检查session配置是否启用持久化
Q4: 性能问题
问题:Agent响应缓慢
解决方案:
- 使用边缘部署(Cloudflare Workers)
- 优化工具调用频率
- 启用OpenTelemetry监控,定位瓶颈
Q5: 类型错误
问题:TypeScript编译失败
解决方案:
# 检查类型
pnpm check:types
# 格式化代码
pnpm format
六、总结
Flue代表了AI Agent开发的下一代范式——从简单的API调用转向完整的自主工作框架。其核心优势在于:
- 完整的运行时环境:会话、工具、沙箱、持久化一应俱全
- 模块化设计:按需组装Agent能力,灵活可扩展
- 生产就绪:支持多种部署平台,内置可观测性
- 类型安全:完整的TypeScript支持,开发体验优秀
对于想要构建真正自主Agent的开发者,Flue提供了一个强大且灵活的起点。无论是自动化工作流、智能助手还是复杂的业务流程,Flue都能胜任。
项目地址:https://github.com/withastro/flue 文档:https://flueframework.com