Skip to content

主要特性

1.2.1 节点即原语

在 AmritaSense 中,一切皆是节点。条件判断、循环体、异常处理器、跳转目标——它们都是普通的 Python 函数或协程,由 @Node() 装饰器包装而成,无需特殊继承。

每个节点都被视为原子执行单元:它要么完全执行,要么完全不执行。工作流解释器通过指针向量(PointerVector)和调用栈管理节点间的跳转与嵌套,而非依赖图结构。所有高级控制流在编译期被展开为线性指令序列,运行时只有整数运算和函数调用。

1.2.2 流式优先

AmritaSense 内建了全双工流控基座 SuspendObjectStream,让流式控制流的编写像普通迭代一样自然:

  • 原生挂起/恢复:工作流可在任意节点之间精确挂起,等待外部输入或异步操作完成后恢复执行。这套机制完全基于 Python 的 asyncio.Future,零阻塞开销
  • 双向控制通道:支持外部系统通过 push_object 主动向工作流注入消息或指令,实现中断调用与上下文注入
  • 与 LLM 流式生成天然适配:无论是工具调用循环、嵌套子工作流,还是挂起等待用户输入,都能以最直接的方式表达

1.2.3 原生控制流

AmritaSense 提供了一级公民的控制流指令集,无需依赖外部图引擎或状态机:

  • 条件分支IF / ELIF / ELSE,无需强制配对 ELSE,支持链式组合
  • 循环结构WHILE(前置条件)和 DO...WHILE(后置条件),支持 BreakLoop 跳出
  • 跳转指令GOTO 配合 ALIAS 实现无条件跳转,CALL 配合 ARCHIVED_NODES 实现子程序调用与返回
  • 异常处理TRY...CATCH...THEN...FIN,完整对齐 Python 的异常处理语义,支持异常穿透控制

所有控制流指令在编译期展开为底层节点组合,运行时完全通过指针偏移完成,无需图遍历、字符串路由或状态字典查找。

1.2.4 异步原生

  • 全程支持 async/await,与 Python 现代异步生态无缝融合
  • 工作流执行器基于 asyncio,所有 I/O 密集型操作均可非阻塞执行
  • 挂起/恢复机制完全异步,不会阻塞事件循环
  • 同步函数可通过 wrap_to_async 自动在线程池中执行,避免阻塞事件循环

1.2.5 声明式依赖注入

  • 节点和事件处理器通过函数签名声明所需参数,框架自动从工作流上下文中解析
  • 基于关键词优先 + 类型匹配的解析策略,告别位置参数的脆弱性
  • 支持 Depends 声明自定义依赖工厂,灵活控制对象的创建与作用域
  • 依赖清单(DependencyMeta)是纯数据结构,可缓存、可动态生成

1.2.6 自包含运行时

  • 内建事件系统:工作流节点可触发自定义事件,事件处理器与节点共享同一套依赖注入机制。事件系统是发散式的,与工作流中断机制明确分工
  • 内建日志系统:基于 loguru 的高性能日志器,支持环境变量控制日志级别、自动桥接标准库 logging
  • 零外部强制依赖:核心引擎仅数千行代码,无重型抽象,仅依赖 aiologicanyio
  • 编译时展开高级结构:运行时开销几乎为零,可嵌入任何 Python 项目

1.2.7 解释器树与子图隔离

  • FUN_BLOCK 指令 — 将已编译的 NodeCompose 作为隔离子工作流在子解释器中执行,拥有独立的中间件、I/O 流和生命周期。
  • 解释器树模型fork_interpreter() 创建子解释器形成树结构;parent / top_interpreter / sub_interpreters 属性提供完整可见性。
  • 并行执行 — 通过 asyncio.gatherwait_all 并发运行多个子解释器。
  • 生命周期管理terminate() / terminate_all() 优雅关闭;is_running / pending_stop 状态查询。
  • Unsafe 配置标志_unsafe.__flags__ 提供内部开关(FORCE_NOT_WRAP_TO_ASYNCDISABLE_EXC_IGNORED 等),用于少数极端场景下调整引擎行为。

Apache 2.0 许可证约束