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 的异常处理语义,支持异常穿透控制

v0.5.1 新增了原生控制流指令 NATIVE_IF / NATIVE_WHILE / NATIVE_DO / BREAK_LOOP,作为传统指令的正交扩展,提供基于 PUSH/JMP/RET_FAR 的更底层控制流,可在需要精确指针控制的场景中使用。

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

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 等),用于少数极端场景下调整引擎行为。

1.2.8 原生 Debugger 实现

AmritaSense v0.5.0 内置了一套完整的 REPL 调试器——无需额外安装插件或工具。它利用解释器原生的 Panic/Recover 机制和中间件注入,直接在 Python REPL 中实现断点、步进和状态检查。

  • 双 API 设计 — 同步 API(stepcont)用于交互式 REPL;异步 API(step_asynccont_async)用于调试脚本和已有事件循环的程序
  • 断点系统 — 按标签(break_at_tag)或地址(break_at_addr)设置断点,支持条件表达式
  • 步进控制step()step_over()step_out()cont(),支持同步/异步双 API
  • 崩溃恢复 — 节点异常后 panic 状态完整保留,inspect() 查看现场,advance_pointer() 跳过崩溃节点后 cont() 恢复执行
  • 安全检查 — 设置 REMOVE_DEBUGGER=true 环境变量可物理销毁调试器模块,防止生产环境 SSTI 泄露

Apache 2.0 许可证约束