flux

package module
v1.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 7, 2026 License: MIT Imports: 15 Imported by: 0

README

Flux

Flux is a deterministic execution kernel for DAG-based workflows. It does not reason, it does not own users, and it does not manage conversations. It executes plans generated by Agent Runtime.


一句话

Flux 是一个与 Agent 解耦的 Workflow 执行内核。它接收一个 Plan(DAG),做依赖求解、并行调度、async/await、trace/replay。谁生成 Plan?Agent Runtime(code-agent、DreamAI、Claude Code…)。Flux 不关心。

三种用法

                flux kernel
               /     |      \
        library    MCP     tool
       (Go import) (stdio) (Agent)
模式 说明 适用
Library import "flux"engine.Run() DreamAI(已有 Agent Runtime)
MCP Server flux-mcp-serverplan_workflow tool Claude Code / 任何 MCP Agent
Tool 嵌入 实现 tools.Tool 接口,同进程调用 AgentKit / code-agent

三种模式共享同一份内核代码。详见 docs/v3/architecture-v3.md

五层架构

Layer 1  UI              AgentKit / DreamAI
Layer 2  Agent Runtime   决策层(Loop / Tool / Approval)
Layer 3  Tool Layer      普通工具 + Flux Workflow Tool
Layer 4  Workflow Runtime flux(DAG / Scheduler / Async / Trace)
Layer 5  Persistence     Store 接口(SQLite / PG / Memory adapter)

快速开始

MCP Server
export LLM_API_KEY="your-key"
go run ./cmd/flux-mcp-server

在 Claude Code 或其他 MCP Agent 中配置此 server,即可使用 plan_workflow 工具。

内核(Go library)
import "flux/runtime"

flux/runtime 只依赖 stdlib:Plan IR、Scheduler(依赖求解/并行/async/retry)、ExecStatePlanSource 接缝。零 flux/* 依赖。

Store 接口(v3)
import "flux/store"

flux/store 定义 WorkflowStoreAwaitStoreTraceStore 接口。消费者提供 adapter(SQLite / PG / Memory),注入 Engine。

文档

v3 架构 五层架构、持久化端口、集成契约、设计原则、决策记录
v3 开发计划 实施路线图
code-agent 对接 给 code-agent 团队的架构对齐建议
v2 文档 历史参考(核心设计保留)

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Asset

type Asset interface {
	// contains filtered or unexported methods
}

Asset 是可以被 Engine 执行的能力单元。 不关心底层是 workflow、tool 还是 skill——对 Engine 都是"一个可以 Run 的东西"。

func Skill

func Skill(spec *skill.SkillSpec) Asset

Skill 包装一个 SKILL.md 为 Asset。 Skill 在 Engine 内部展开为 Workflow 或 Tool,对调用方透明。

func Tool

func Tool(t tool.Tool) Asset

Tool 包装一个 tool.Tool 为 Asset。 作为叶子节点被 workflow 或 planner 调用。

func Workflow

func Workflow(def *definition.WorkflowDefinition) Asset

Workflow 包装一个 WorkflowDefinition 为 Asset。 Engine 内部走 Compile → Plan → StaticSource → Scheduler。

type Backend

type Backend interface {
	// PersistNode 持久化单个节点的状态和输出。
	PersistNode(ctx context.Context, taskID string, node string, state NodeState, output map[string]any) error

	// CreateAwait 为异步节点创建一个外部等待凭证。
	// 返回 bindingID:Flux 用它关联后续的 Notify。
	CreateAwait(ctx context.Context, taskID string, node string, providerTaskID string, input map[string]any) (bindingID string, err error)

	// CompleteAwait 原子地将 binding 标记为完成(waiting→completing)。
	// 返回 (claimed, error)。claimed=false 表示已被其他线程完成(幂等安全)。
	CompleteAwait(ctx context.Context, bindingID string) (claimed bool, err error)

	// Lock 获取分布式锁。用于 Resume 并发控制。
	// 返回 unlock 函数。获取失败时阻塞等待。
	Lock(ctx context.Context, key string) (unlock func(), err error)

	// LoadState 加载任务的所有节点状态(crash 恢复用)。
	LoadState(ctx context.Context, taskID string) (*TaskState, error)
}

Backend 是宿主必须实现的持久化契约。 DreamAI 用自己现有的 DB 实现这个接口(NodeRuntime 表 + AwaitBinding 表)。

type Config

type Config struct {
	Backend Backend // 宿主提供的持久化 + 异步基础设施(向后兼容)

	// ── v3 Store 接口(可选)──
	// 当 Store 接口非 nil 时,Engine 优先使用 Store 接口(而非 Backend)进行持久化。
	// 当 Store 接口为 nil 时,Engine 回退到 Backend(向后兼容)。
	WorkflowStore store.WorkflowStore // nil → 回退到 Backend
	AwaitStore    store.AwaitStore    // nil → 回退到 Backend
	TraceStore    store.TraceStore    // nil → 不记录 trace
}

Config 是 Engine 的配置。Backend 为必填(向后兼容),Store 接口为可选(v3 新增)。

type Engine

type Engine struct {
	// contains filtered or unexported fields
}

Engine 是 Flux 执行内核的外部面。宿主创建一个 Engine,注册能力,然后只调 Run 和 Notify。

func New

func New(cfg Config) (*Engine, error)

New 创建一个 Engine。 Backend 为必填(向后兼容)。当 Store 接口(v3)非 nil 时,Engine 优先使用 Store 接口进行持久化。

func (*Engine) Notify

func (e *Engine) Notify(ctx context.Context, event Event) (*RunResult, error)

Notify 通知 Engine:外部异步任务已完成。 内部流程:Provider+ProviderTaskID → 查找 binding → 原子 ClaimCompleting → Resume。

func (*Engine) Register

func (e *Engine) Register(a Asset) error

Register 注册一个 Asset。同名重复注册会 panic。

func (*Engine) Run

func (e *Engine) Run(ctx context.Context, req RunRequest) (*RunResult, error)

Run 执行一个已注册的 Asset。并发安全。

type Event

type Event struct {
	Provider       string         // 外部服务标识(如 "tts"、"aliyun")
	ProviderTaskID string         // 外部 Provider 的任务 ID
	Output         map[string]any // 外部任务完成的产出
	Error          string         // 外部任务失败的信息(为空表示成功)
}

Event 是外部世界发生的事件(webhook、poll、消息队列)。

type LLMConfig added in v1.0.2

type LLMConfig struct {
	APIKey  string `yaml:"api_key"`
	BaseURL string `yaml:"base_url"`
	Model   string `yaml:"model"`
}

LLMConfig 是 standalone 二进制(如 flux-mcp-server)用来构建 DAGPlanner 所需 LLM provider 的配置。

设计边界(重要):flux 作为**库**嵌入时(code-agent / dream-ai),LLM provider 由 host 注入(WorkflowToolConfig.Provider),**不读这里**——避免库与 host 各持一套配置 造成不一致。只有当 flux 作为**独立 MCP server** 被 Claude Code 等客户端调用时,没有 host 注入凭证,才由二进制自己 LoadLLMConfig 读文件 + 环境变量来自给。

仅支持 OpenAI 兼容端点(DeepSeek / Qwen / Moonshot / 自托管 / Claude-via-gateway)。

func LoadLLMConfig added in v1.0.2

func LoadLLMConfig(path string) (LLMConfig, error)

LoadLLMConfig 从 config.yaml 的 `llm:` 块加载 LLM 配置,并用环境变量覆盖(便于 CI/容器 不改文件就能注入密钥)。优先级:环境变量 > 文件 > 默认值。

path 为空或文件不存在时不报错——退回纯环境变量 + 默认(base_url=DeepSeek、model=deepseek-chat)。 这样部署可以只设 LLM_API_KEY 环境变量,连文件都不需要。

func (LLMConfig) NewProvider added in v1.0.2

func (c LLMConfig) NewProvider(timeout time.Duration) *model.OpenAICompatibleProvider

NewProvider 用配置构建一个 OpenAI 兼容 provider(满足 model.Completer)。

type NodeSnapshot

type NodeSnapshot struct {
	State  NodeState      `json:"state"`
	Output map[string]any `json:"output,omitempty"`
}

NodeSnapshot 是单个节点的持久化快照。

type NodeState

type NodeState int

NodeState 是节点的生命周期状态。

const (
	NodePending  NodeState = iota // 尚未就绪
	NodeRunning                   // 正在执行
	NodeAwaiting                  // 等待外部事件
	NodeSuccess                   // 执行成功
	NodeFailed                    // 执行失败
	NodeSkipped                   // 被跳过
)

type RunRequest

type RunRequest struct {
	Asset  string         // 已注册的 Asset 名
	Input  map[string]any // 任务输入
	TaskID string         // 可选:宿主已有的 task ID(如 DreamAI 的 Task.ID)。为空则自动生成
}

RunRequest 是一次执行请求。

type RunResult

type RunResult struct {
	Status RunStatus      // Completed / Suspended / Failed
	Output map[string]any // 完成时的最终产出
	TaskID string         // 内部 task ID(供 Notify 定位)
	Err    error          // 失败时的错误
}

RunResult 是一次执行的结果。

type RunStatus

type RunStatus int

RunStatus 是执行结果状态。

const (
	StatusCompleted RunStatus = iota
	StatusSuspended           // 有异步节点等待外部事件
	StatusFailed
)

type TaskState

type TaskState struct {
	Input map[string]any          `json:"input"`
	Nodes map[string]NodeSnapshot `json:"nodes"`
}

TaskState 是任务的完整可恢复状态。

type WorkflowTool

type WorkflowTool struct {
	// contains filtered or unexported fields
}

WorkflowTool 将 Flux Workflow Engine 封装为一个 Tool,供任何 Agent Runtime 调用。

Agent Runtime 将此 Tool 注册到自己的 Tool Registry 后,LLM 即可通过 plan_workflow 调用 Flux 的 DAG 规划 + 执行能力。

使用方式:

wt := flux.NewWorkflowTool(flux.WorkflowToolConfig{
    Provider:   llmProvider,           // *model.OpenAICompatibleProvider
    ModelName:  "deepseek-chat",
    ToolReg:    myToolRegistry,        // flux 的 tool.Registry(Provider 工具)
    WFStore:    myWorkflowStore,        // 可选:v3 Store 接口
    AwaitStore: myAwaitStore,           // 可选:v3 Store 接口
})

func NewWorkflowTool

func NewWorkflowTool(cfg WorkflowToolConfig) *WorkflowTool

NewWorkflowTool 创建一个 Workflow Tool。

func (*WorkflowTool) Description

func (t *WorkflowTool) Description() string

func (*WorkflowTool) Execute

func (t *WorkflowTool) Execute(ctx context.Context, input map[string]any, emitter tool.ToolEmitter) (*tool.Result, error)

Execute 执行 Workflow Tool。

流程:

  1. DAGPlanner 根据 goal + tool catalog 生成 runtime.Plan
  2. Scheduler 执行 Plan(依赖求解、并行调度)
  3. 返回所有节点的产出

func (*WorkflowTool) InputSchema

func (t *WorkflowTool) InputSchema() tool.DataSchema

func (*WorkflowTool) Mode

func (t *WorkflowTool) Mode() tool.ExecutionMode

func (*WorkflowTool) Name

func (t *WorkflowTool) Name() string

func (*WorkflowTool) OutputSchema

func (t *WorkflowTool) OutputSchema() tool.DataSchema

func (*WorkflowTool) Registry

func (t *WorkflowTool) Registry() *tool.Registry

Registry 返回 WorkflowTool 内部的工具注册表,供 DAGPlanner 使用。

type WorkflowToolConfig

type WorkflowToolConfig struct {
	// Provider 是 DAGPlanner 使用的 LLM provider。必填。
	// 类型为 model.Completer 接口——*OpenAICompatibleProvider 满足它,
	// 任意 OpenAI 兼容端点/网关(DeepSeek/Qwen/Claude-via-gateway)皆可注入。
	Provider model.Completer

	// ModelName 是传给 LLM 的模型名。默认 "deepseek-chat"。
	ModelName string

	// ToolReg 是 Workflow 执行时可用的工具注册表。必填。
	// 这些工具是 Workflow DAG 中的节点——图片/视频/TTS Provider 等,不是 Agent 的对话工具。
	ToolReg *tool.Registry

	// ── v3 Store 接口(可选)──
	WFStore    store.WorkflowStore // nil → 内存模式(仅 sync workflow)
	AwaitStore store.AwaitStore    // nil → async 节点会失败
	TraceStore store.TraceStore    // nil → 不记录 trace

	// MaxRepairs 是 DAGPlanner 的 validate→repair 最大轮数。默认 3。
	MaxRepairs int
}

WorkflowToolConfig 是 WorkflowTool 的配置。

Directories

Path Synopsis
adapter
cmd
flux-mcp command
Command flux-mcp 把 Flux 的内置工具暴露成一个 MCP server(stdio)。
Command flux-mcp 把 Flux 的内置工具暴露成一个 MCP server(stdio)。
flux-mcp-server command
flux-mcp-server 将 Flux Workflow Engine 暴露为 MCP (Model Context Protocol) 服务。
flux-mcp-server 将 Flux Workflow Engine 暴露为 MCP (Model Context Protocol) 服务。
Package mcp 是 Flux 的 MCP(Model Context Protocol)接入层。
Package mcp 是 Flux 的 MCP(Model Context Protocol)接入层。
Package model 提供 OpenAI-Compatible 模型调用(DeepSeek / 月之暗面 / 通义 / 自托管 等)。
Package model 提供 OpenAI-Compatible 模型调用(DeepSeek / 月之暗面 / 通义 / 自托管 等)。
Package planner 是 v2 的编排前端:把"目标 + 工具清单"变成 runtime 可执行的计划。
Package planner 是 v2 的编排前端:把"目标 + 工具清单"变成 runtime 可执行的计划。
Package runtime 是 Flux 的执行底座:只认"机制"(依赖/并行/异步/状态/复用/分叉), 不认识 workflow DSL。
Package runtime 是 Flux 的执行底座:只认"机制"(依赖/并行/异步/状态/复用/分叉), 不认识 workflow DSL。
mockprovider
Package mockprovider 提供可控的异步任务模拟 HTTP 服务,供 B-M1 验证用。
Package mockprovider 提供可控的异步任务模拟 HTTP 服务,供 B-M1 验证用。
Package store 定义 Workflow Runtime 的持久化端口。
Package store 定义 Workflow Runtime 的持久化端口。
tool

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL