Are you the author? Sign in to claim
A hybrid AI assistant framework linking structural workflow engines and reasoning LLM agents through LangGraph-powered s
用统一对话入口同时承载 Dialogue Control 中控编排、Workflow 确定性流程、LLM Agent ReAct 推理 与 Open Agent 能力开放。
多租户配置 · 意图树路由 · Workflow 画布 · SubAgent 管理 · A2UI 富交互 · Skill / MCP / A2A 开放
项目当前处于 MVP 阶段,重点验证模块边界、会话状态、挂起恢复、任务切换、流式协议和配置化能力。
| 天气查询 Agent | 商品退款 Workflow |
|---|---|
![]() | ![]() |
DC_CONTEXT_TURNS 轮 User/Assistant 上下文,避免只看当前一句导致误判;ToolMessage 默认不进入分类上下文。running_task.suspension_info.resume_token,用户补槽时通过 /workflow/resume 继续,WE 内部快照实现不暴露给上游。suspended_tasks 快照;再次命中原任务会恢复并 resume,而不是重新 start。slot 节点挂起并返回 resume_token。SLOT_CORRECT 后,DC 会校验该槽位是否已有旧值;没有旧值时按补槽继续处理,避免首次赋值被误判为纠正。flowchart LR
FE["Frontend<br/>React + Ant Design"]
Auth["Auth Gateway<br/>OAuth / Token"]
Open["Open Gateway<br/>A2A / Skill / MCP"]
CapRuntime["Capability Runtime<br/>逻辑运行时"]
DC["Dialogue Control<br/>FastAPI + LangGraph"]
WE["Workflow Engine<br/>Python 配置化 DAG 执行器"]
LA["LLM Agent<br/>FastAPI + ReAct"]
API["External API"]
DB[("MySQL<br/>配置资产")]
Redis[("Redis<br/>会话 / 快照")]
FE <-->|"AGUI / SSE"| DC
FE --> Open
Open --> Auth
Open --> CapRuntime
CapRuntime --> WE
CapRuntime --> LA
CapRuntime --> API
DC <-->|"HTTP SSE<br/>run / resume / cancel"| WE
DC <-->|"HTTP SSE<br/>/agent/run"| LA
LA <-->|"Workflow Tool"| WE
Open <--> DB
DC <--> DB
LA <--> DB
DC <--> Redis
WE <--> Redis
| 模块 | 目录 | 主要职责 |
|---|---|---|
| Frontend | frontend/ | 聊天测试、链路观察、配置管理 |
| Dialogue Control | dialogue-control/ | 会话状态、意图路由、任务生命周期、下游协议适配 |
| Workflow Engine | workflow-engine/ | 配置化 Workflow DAG 执行、节点输出、挂起、恢复、完成事件 |
| LLM Agent | llm-agent/ | ReAct 推理、API 工具、Workflow 工具 |
| Open Agent Layer | open-agent-layer/ | 对外 Agent 能力开放层,内部包含 Auth Gateway、A2A / Skill Gateway 和逻辑 Capability Runtime |
| Docs | docs/ | PRD、模块架构、上下文与协议设计 |
flowchart TD
Start(["__start__"]) --> Match["configured_intent_matcher"]
Match --> SessionRoute["session_route_resolver"]
End(["本轮结束 / __end__"])
SessionRoute -->|"无活跃任务"| TopRoute["new_task_dispatch"]
SessionRoute -->|"当前任务已挂起且命中新目标"| Switch["task_switch"]
SessionRoute -->|"继续当前任务"| InTask["active_task_classify_command"]
SessionRoute -->|"running 中不可切换"| Blocked["active_task_block"]
TopRoute --> TopCond{"顶层路由"}
TopCond -->|"workflow"| Dispatch["workflow_dispatch"]
TopCond -->|"agent / unknown"| Agent["subagent_executor"]
Switch --> SwitchCond{"切换结果"}
SwitchCond -->|"恢复已挂起目标"| InTask
SwitchCond -->|"新 workflow"| Dispatch
SwitchCond -->|"新 agent"| Agent
InTask --> TaskCond{"任务内意图"}
TaskCond -->|"continue"| ResumePrepare["workflow_slot_resume_prepare"]
ResumePrepare --> ResumeRoute{"槽位是否补齐?"}
ResumeRoute -->|"是"| ResumeDispatch["workflow_resume_dispatch"]
ResumeRoute -->|"否"| End
TaskCond -->|"LA resume"| Agent
TaskCond -->|"slot correction"| Correct["workflow_slot_correction"]
TaskCond -->|"cancel"| Cancel["workflow_cancel"]
TaskCond -->|"active_task_block"| Blocked
Dispatch --> Post["post_task_engagement"]
ResumeDispatch --> Post
Agent --> Post
Post --> End
Correct --> End
Cancel --> End
Blocked --> End
说明:这张图里所有不再继续走下游节点的分支,都统一汇入 本轮结束 / __end__,包括前置缺槽、恢复缺槽、槽位纠正、取消和阻断。
flowchart TD
Run(["/workflow/run"]) --> Load["加载 published workflow"]
Load --> Validate["校验节点、边、引用与配置"]
Validate --> Init["初始化运行时状态"]
Init --> Exec["执行当前节点"]
Exec --> Type{"节点结果"}
Type -->|"TEXT_OUTPUT"| EmitText["输出 TEXT_OUTPUT"]
Type -->|"WORKFLOW_SUSPENDED"| Save["保存快照"]
Type -->|"WORKFLOW_COMPLETED"| EmitDone["输出 WORKFLOW_COMPLETED"]
EmitText --> Next["选择下一节点"]
Next --> Exec
Save --> EmitSuspend["输出 WORKFLOW_SUSPENDED"]
EmitSuspend --> Wait["等待 /workflow/resume"]
Wait --> Resume(["/workflow/resume"])
Resume --> Merge["合并 user_inputs 到槽位"]
Merge --> Exec
Cancel(["/workflow/cancel"]) --> Abort["取消当前 workflow"]
flowchart TD
Req(["/agent/run"]) --> Load["读取 Agent 配置"]
Load --> Build["组装上下文与可用工具"]
Build --> Agent["agent"]
End(["本轮结束 / __end__"])
Agent --> Decide{"最后一条 AIMessage<br/>是否包含 tool_calls?"}
Decide -->|"是"| Tools["tools 执行<br/>API or Workflow"]
Decide -->|"否"| End
Tools --> Finish{"status == suspended ?"}
Finish -->|"是"| End
Finish -->|"否"| Agent
说明:这张图对应 llm-agent/main.py 里的实际状态图。agent 节点负责模型推理;当最后一条 AIMessage 带 tool_calls 时进入 tools 节点;tools 执行完后如果工作流被挂起则直接结束本轮,否则回到 agent 继续下一轮推理。
DC LangGraph 主干,以 configured_intent_matcher -> session_route_resolver -> new_task_dispatch / task_switch / active_task_classify_command 为入口。/workflow/run、/workflow/resume、/workflow/cancel。TEXT_OUTPUT、WORKFLOW_SUSPENDED、WORKFLOW_COMPLETED。start、token、tool_call、api_call、api_response、end。.env 中的公共模型参数与模块级覆盖。>=3.12uvpnpm当前 docker-compose.yml 只保留 Redis 与 MySQL;MVP 主链路已从消息队列方案收敛为 HTTP/SSE,本地联调不依赖 Kafka。
cp .env.example .env
常用配置:
OPENAI_API_KEY、OPENAI_API_BASE:DC 和 LA 共用模型服务连接。MODEL_*:默认模型参数。DC_MODEL_*、LA_MODEL_*:分别覆盖 DC 或 LA。DC_CONTEXT_TURNS:DC 分类使用最近用户回合数,默认 4。LA_USE_DB_MODEL_CONFIG=false:测试时忽略 DB 中 Agent 模型配置,方便频繁切模型。AUTH_GATEWAY_URL:开放能力层调用 Auth Gateway 的地址。DIALOGUE_CONTROL_URL:A2A 对话委托进入 DC 时使用的地址。AGENT_SERVICE_URL、WORKFLOW_ENGINE_URL:Open Gateway 内置 Capability Runtime 调用 LA / WE 的地址。OPEN_GATEWAY_AUTH_REQUIRED=false:本地开发可关闭;生产或外部联调应开启。docker-compose up -d
cd dialogue-control
uv run python seed_db.py
cd workflow-engine
uv run python main.py
cd llm-agent
uv run uvicorn main:app --host 0.0.0.0 --port 8001 --reload
cd dialogue-control
uv run uvicorn main:app --host 0.0.0.0 --port 8000 --reload
cd open-agent-layer/auth-gateway
uv run uvicorn main:app --host 0.0.0.0 --port 8010 --reload
cd open-agent-layer/open-gateway
uv run uvicorn main:app --host 0.0.0.0 --port 8011 --reload
本地初始化后会写入默认外部 Client:
client_id: dev_agent_host
client_secret: dev_agent_secret
OPEN_GATEWAY_AUTH_REQUIRED=false 时可直接在“开放接入”页调用 Skill;开启后需要先通过 Auth Gateway 获取 Bearer Token。
cd frontend
pnpm install
pnpm dev
访问 Vite 输出的本地地址,通常是 http://localhost:5173。
/workflow/resume 恢复;DC 不再读取 start 节点输入配置做启动前提槽。⚠️ Experimentelle Skill-Sammlung für deutsches Recht (Arbeits-, Gesellschafts-, Insolvenz-, Datenschutz-, Prozessrecht u
Manage multiple Claude Code agents from TUI or Web with tmux and git worktrees
Project management using GitHub Issues + Git worktrees for parallel agent execution
Core skills library for Claude Code with 20+ battle-tested skills including TDD, debugging, and brainstorming