Refly AI工作流引擎3步构建企业级智能体技能基础设施【免费下载链接】reflyThe first open-source agent skills builder. Define skills by vibe workflow, run on Claude Code, Cursor, Codex more. Build Clawdbot · APIs for Lovable · Bots for Slack Lark/Feishu · Skills are infrastructure, not prompts.项目地址: https://gitcode.com/GitHub_Trending/re/refly在AI技术快速发展的今天企业面临的核心挑战已从模型能力转向智能体技能的标准化与规模化。传统AI工作流工具如n8n、Dify虽然提供了可视化编排能力但存在黑盒执行、难以复用和缺乏治理的痛点。Refly作为首个开源的智能体技能构建平台通过创新的Vibe工作流和确定性技能基础设施帮助企业将业务流程转化为可版本控制、可部署的智能体能力。技术架构解析从意图到执行的确定性转换核心设计哲学技能即基础设施Refly采用技能优先Skills-first架构将传统的工作流概念升级为原子化技能。每个技能都是独立的、可版本控制的执行单元支持跨平台部署。这种设计解决了传统AI工作流的三个关键问题确定性执行通过状态机确保每次执行结果一致可干预运行时支持执行过程中的暂停、审计和重定向统一交付层技能可导出为API、Webhook或MCP工具架构组件深度剖析工作流引擎核心模块Refly的工作流引擎基于NestJS构建采用微服务架构设计。核心模块位于apps/api/src/modules/workflow/目录// 工作流执行状态管理 export const WORKFLOW_EXECUTION_CONSTANTS { POLL_INTERVAL_MS: 1500, // 轮询间隔 EXECUTION_TIMEOUT_MS: 30 * 60 * 1000, // 工作流执行超时 NODE_EXECUTION_TIMEOUT_MS: 30 * 60 * 1000, // 节点执行超时 POLL_LOCK_TTL_MS: 5000 // 分布式锁TTL };工作流服务WorkflowService实现了基于BullMQ的队列处理机制支持并发执行和故障恢复Injectable() export class WorkflowService { constructor( InjectQueue(QUEUE_RUN_WORKFLOW) private readonly runWorkflowQueue?: QueueRunWorkflowJobData, InjectQueue(QUEUE_POLL_WORKFLOW) private readonly pollWorkflowQueue?: QueuePollWorkflowJobData, ) {} // 异步执行工作流 async executeWorkflow(workflowId: string, input: any) { const executionId genWorkflowExecutionID(); await this.runWorkflowQueue.add(run-workflow, { workflowId, input, executionId }); return { executionId, status: running }; } }技能模板系统技能模板位于packages/skill-template/src/采用面向对象设计模式export abstract class BaseSkill { abstract name: string; abstract description: string; abstract configSchema: SkillTemplateConfigDefinition; abstract graphState: StateGraphArgsBaseSkillState[channels]; // 转换为LangChain可执行单元 abstract toRunnable(): Runnable; // 事件驱动架构 emitEvent(data: PartialSkillEvent, config: SkillRunnableConfig) { const { emitter } config?.configurable || {}; if (emitter) { // 发送技能执行事件 emitter.emit(skill-event, eventData); } } }可视化界面与用户体验Refly采用双模态设计可视化画布与自然语言描述Vibe模式并存满足不同用户需求。Refly工作台提供自然语言创建工作流的能力支持预设模板和自定义需求工作台界面采用左侧导航中央操作区布局左侧导航工作区、工作流管理、模板库、市场、运行历史中央操作区自然语言输入框支持Build a podcast generation workflow等复杂需求预设示例提供播客生成、设计素材自动化等典型用例部署配置与性能优化Docker容器化部署Refly提供完整的Docker Compose部署方案支持单机到生产环境# deploy/docker/docker-compose.yml name: refly include: - path: docker-compose.base.yml services: api: extends: file: docker-compose.services.yml service: api image: reflyai/refly-api:latest web: extends: file: docker-compose.services.yml service: web image: reflyai/refly-web:latest ports: - 5700:80性能调优参数数据库连接池配置// apps/api/src/utils/prisma.ts export const prisma new PrismaClient({ log: process.env.NODE_ENV development ? [query, info, warn, error] : [error], datasources: { db: { url: process.env.DATABASE_URL, }, }, // 连接池优化 connection: { pool: { max: 20, // 最大连接数 min: 5, // 最小连接数 acquire: 30000, // 获取连接超时 idle: 10000 // 空闲连接超时 } } });Redis缓存策略// 工作流状态缓存 const WORKFLOW_CACHE_TTL 300; // 5分钟 const NODE_EXECUTION_CACHE_TTL 600; // 10分钟 // 分布式锁配置 const LOCK_TTL_MS 5000; const LOCK_RETRY_DELAY_MS 100;监控与可观测性Refly集成Langfuse进行执行追踪支持OpenTelemetry标准# deploy/docker/trace/docker-compose.yml services: alloy: image: grafana/alloy:latest command: [run, /etc/alloy/alloy-local-config.alloy] ports: - 12345:12345 # Alloy metrics - 4317:4317 # OTLP gRPC - 4318:4318 # OTLP HTTP企业级集成方案多平台导出能力Refly支持将技能导出到多种运行时环境Refly支持将确定性技能导出到Claude Code、Cursor、Lovable、Slack等多种平台API集成示例// 调用工作流API async function executeWorkflow(workflowId: string, input: any) { const response await fetch( ${API_BASE}/api/v1/workflows/${workflowId}/execute, { method: POST, headers: { Authorization: Bearer ${API_KEY}, Content-Type: application/json }, body: JSON.stringify({ input }) } ); const { executionId, status } await response.json(); // 轮询执行状态 while (status running) { await new Promise(resolve setTimeout(resolve, 1500)); const statusResponse await fetch( ${API_BASE}/api/v1/executions/${executionId}, { headers: { Authorization: Bearer ${API_KEY} } } ); const result await statusResponse.json(); status result.status; } return result; }Webhook配置# Lark/Feishu Webhook集成 triggers: - type: webhook config: url: https://your-refly-instance.com/api/v1/webhooks/lark events: - message.receive verification: type: signature secret: ${WEBHOOK_SECRET}技能注册中心技能注册中心位于packages/skill-template/src/skills/支持技能发现、版本管理和依赖解析// 技能元数据定义 export interface SkillMetadata { id: string; name: string; version: string; description: string; author: string; dependencies: SkillDependency[]; configSchema: JSONSchema7; runtimeRequirements: RuntimeRequirement[]; } // 技能依赖管理 export class SkillRegistry { private skills: Mapstring, SkillMetadata new Map(); async register(skill: BaseSkill): Promisevoid { const metadata this.extractMetadata(skill); await this.validateDependencies(metadata); this.skills.set(metadata.id, metadata); } async resolve(id: string, version?: string): PromiseBaseSkill { const metadata this.findSkill(id, version); return this.instantiateSkill(metadata); } }高级功能与最佳实践可干预运行时设计Refly的可干预运行时允许在执行过程中进行人工干预// 工作流执行控制 class IntervenableRuntime { private state: WorkflowState; private breakpoints: Setstring new Set(); async executeWithIntervention( workflow: Workflow, onBreakpoint?: (state: WorkflowState) Promisevoid ): PromiseExecutionResult { while (!this.state.isCompleted) { const nextNode this.getNextNode(); // 检查断点 if (this.breakpoints.has(nextNode.id)) { await onBreakpoint?.(this.state); } // 执行节点 const result await this.executeNode(nextNode); this.state.update(result); // 检查是否需要人工干预 if (result.requiresIntervention) { await this.requestHumanInput(result); } } return this.state.toResult(); } }技能版本控制// 技能版本管理 export class SkillVersionManager { private versions: Mapstring, SkillVersion[] new Map(); async publish( skillId: string, version: string, skill: BaseSkill ): Promisevoid { const skillVersions this.versions.get(skillId) || []; // 语义化版本检查 if (!this.isValidVersion(version)) { throw new Error(Invalid version: ${version}); } // 依赖冲突检测 const conflicts await this.checkDependencyConflicts(skill); if (conflicts.length 0) { throw new Error(Dependency conflicts: ${conflicts.join(, )}); } skillVersions.push({ version, skill, publishedAt: new Date(), metadata: this.extractSkillMetadata(skill) }); this.versions.set(skillId, skillVersions); } }性能优化策略批量处理与流式响应// 流式工作流执行 export class StreamingWorkflowExecutor { async executeStreaming( workflowId: string, input: any, onProgress?: (progress: ExecutionProgress) void ): PromiseAsyncIterableWorkflowChunk { const execution await this.startExecution(workflowId, input); return { async *[Symbol.asyncIterator]() { let isCompleted false; while (!isCompleted) { const status await this.pollStatus(execution.id); // 发送进度更新 onProgress?.({ percentage: status.progress, currentNode: status.currentNode, elapsedTime: status.elapsedTime }); // 发送增量结果 if (status.newOutputs) { for (const output of status.newOutputs) { yield output; } } isCompleted status.status completed || status.status failed; await new Promise(resolve setTimeout(resolve, 1000)); } } }; } }缓存策略优化// 智能缓存层 export class SmartCacheLayer { private cache: Mapstring, CacheEntry new Map(); async getOrComputeT( key: string, compute: () PromiseT, options: CacheOptions {} ): PromiseT { const entry this.cache.get(key); // 检查缓存有效性 if (entry !this.isExpired(entry, options.ttl)) { return entry.value as T; } // 计算新值 const value await compute(); // 更新缓存 this.cache.set(key, { value, timestamp: Date.now(), ttl: options.ttl || DEFAULT_TTL }); return value; } // 基于工作流特征的缓存键生成 generateCacheKey(workflowId: string, input: any): string { const inputHash this.hashInput(input); return workflow:${workflowId}:input:${inputHash}; } }故障排除与常见问题性能问题诊断工作流执行缓慢可能原因数据库连接池配置不当Redis缓存未命中率过高外部API调用超时解决方案# 监控数据库性能 docker-compose exec postgres pg_stat_statements # 检查Redis命中率 redis-cli info stats | grep -E (keyspace_hits|keyspace_misses) # 调整工作流超时设置 export WORKFLOW_EXECUTION_TIMEOUT_MS3600000 export WORKFLOW_NODE_EXECUTION_TIMEOUT_MS600000内存泄漏排查// 启用内存监控 import * as v8 from v8; export class MemoryMonitor { private intervals: NodeJS.Timeout[] []; startMonitoring(intervalMs: number 60000): void { const interval setInterval(() { const heapStats v8.getHeapStatistics(); const memoryUsage process.memoryUsage(); console.log({ timestamp: new Date().toISOString(), heapTotal: heapStats.total_heap_size, heapUsed: heapStats.used_heap_size, rss: memoryUsage.rss, external: memoryUsage.external }); }, intervalMs); this.intervals.push(interval); } }集成问题处理API调用失败常见错误401 UnauthorizedAPI密钥无效或过期429 Too Many Requests请求频率超限502 Bad Gateway后端服务异常调试步骤# 检查API服务状态 curl -X GET http://localhost:3000/health # 验证API密钥 curl -H Authorization: Bearer YOUR_API_KEY \ http://localhost:3000/api/v1/auth/verify # 查看详细日志 docker-compose logs -f apiWebhook配置问题配置验证// Webhook签名验证 export class WebhookValidator { static verifySignature( payload: string, signature: string, secret: string ): boolean { const expectedSignature crypto .createHmac(sha256, secret) .update(payload) .digest(hex); return crypto.timingSafeEqual( Buffer.from(signature), Buffer.from(expectedSignature) ); } }应用场景与最佳实践企业SOP自动化场景客户支持工单处理流程// 客户支持工作流定义 class CustomerSupportWorkflow extends BaseSkill { name customer-support-ticket; description 自动化处理客户支持工单; configSchema { type: object, properties: { priority: { type: string, enum: [low, medium, high] }, category: { type: string }, autoEscalate: { type: boolean, default: false } } }; async toRunnable(): Runnable { return new CustomerSupportRunnable(this.config); } } // 执行流程 1. 接收工单 → 2. 分类与优先级评估 → 3. AI初步回复 → 4. 人工审核可干预→ 5. 发送解决方案 → 6. 满意度调查内容生成流水线场景社交媒体内容批量生成# 内容生成工作流配置 workflow: id: social-media-generator version: 1.0.0 nodes: - id: topic-research type: web-search config: query: {{input.topic}} latest trends max_results: 10 - id: content-outline type: llm config: model: gpt-4 prompt: 基于搜索结果生成内容大纲 inputs: [topic-research.results] - id: generate-content type: llm config: model: claude-3-opus prompt: 根据大纲生成完整内容 inputs: [content-outline.outline] - id: format-optimization type: llm config: model: gpt-4 prompt: 优化内容格式为社交媒体发布格式 inputs: [generate-content.content]数据ETL处理场景多源数据聚合分析// 数据ETL技能实现 class DataETLWorkflow extends BaseSkill { async execute(input: ETLInput): PromiseETLResult { // 阶段1数据提取 const rawData await this.extractFromSources(input.sources); // 阶段2数据转换 const transformedData await this.transformData(rawData, input.rules); // 阶段3数据加载 const result await this.loadToDestination( transformedData, input.destination ); // 阶段4质量检查可干预 if (input.enableQualityCheck) { const qualityReport await this.qualityCheck(result); if (qualityReport.issues.length 0) { await this.requestHumanReview(qualityReport); } } return result; } }未来规划与技术路线图即将推出的功能技能市场增强支持技能发现、评分和社区贡献性能优化引入WebAssembly运行时提升执行效率安全增强基于角色的访问控制RBAC和审计日志技术演进方向边缘计算支持在边缘设备上运行轻量级技能联邦学习集成支持分布式模型训练和更新多模态扩展增强图像、音频处理能力生态建设插件市场第三方开发者可贡献技能插件标准协议推动智能体技能标准化教育培训提供技能开发认证体系总结Refly通过技能即基础设施的设计理念解决了企业AI应用中的关键痛点。其可干预运行时确保业务合规性统一交付层实现跨平台部署版本控制保障技能稳定性。相比传统工作流工具Refly提供了更符合企业需求的生产就绪解决方案。对于技术团队而言Refly的价值在于降低集成成本一次开发多平台部署提升运维效率集中化的技能管理和监控保障业务连续性确定性的执行和故障恢复机制加速创新周期快速迭代和测试新技能随着AI智能体生态的成熟Refly的技能基础设施定位将使其成为企业AI转型的关键技术栈。通过开源模式和活跃的社区贡献Refly正在构建下一代企业级AI应用的标准范式。【免费下载链接】reflyThe first open-source agent skills builder. Define skills by vibe workflow, run on Claude Code, Cursor, Codex more. Build Clawdbot · APIs for Lovable · Bots for Slack Lark/Feishu · Skills are infrastructure, not prompts.项目地址: https://gitcode.com/GitHub_Trending/re/refly创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考