Documentation
¶
Index ¶
- type Asset
- type Backend
- type Config
- type Engine
- type Event
- type LLMConfig
- type NodeSnapshot
- type NodeState
- type RunRequest
- type RunResult
- type RunStatus
- type TaskState
- type WorkflowTool
- func (t *WorkflowTool) Description() string
- func (t *WorkflowTool) Execute(ctx context.Context, input map[string]any, emitter tool.ToolEmitter) (*tool.Result, error)
- func (t *WorkflowTool) InputSchema() tool.DataSchema
- func (t *WorkflowTool) Mode() tool.ExecutionMode
- func (t *WorkflowTool) Name() string
- func (t *WorkflowTool) OutputSchema() tool.DataSchema
- func (t *WorkflowTool) Registry() *tool.Registry
- type WorkflowToolConfig
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 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 (*Engine) Notify ¶
Notify 通知 Engine:外部异步任务已完成。 内部流程:Provider+ProviderTaskID → 查找 binding → 原子 ClaimCompleting → Resume。
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
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 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 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。
流程:
- DAGPlanner 根据 goal + tool catalog 生成 runtime.Plan
- Scheduler 执行 Plan(依赖求解、并行调度)
- 返回所有节点的产出
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 的配置。
Source Files
¶
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
|
|