章节 01
导读 / 主楼:Synapse:基于Elixir的声明式多智能体编排框架
Synapse是一个无头、声明式的多智能体编排框架,提供领域无关的信号总线、带Postgres持久化的工作流引擎和可配置的智能体运行时,内置代码审查领域作为参考实现。
正文
Synapse是一个无头、声明式的多智能体编排框架,提供领域无关的信号总线、带Postgres持久化的工作流引擎和可配置的智能体运行时,内置代码审查领域作为参考实现。
章节 01
Synapse是一个无头、声明式的多智能体编排框架,提供领域无关的信号总线、带Postgres持久化的工作流引擎和可配置的智能体运行时,内置代码审查领域作为参考实现。
章节 02
随着大语言模型能力的快速发展,基于智能体的应用架构正从单一智能体向多智能体协作系统演进。然而,构建可靠的多智能体系统面临着诸多工程挑战:
传统的解决方案往往需要开发者编写大量的协调代码(如GenServer),这不仅增加了开发复杂度,也使得系统难以维护和扩展。
章节 03
Synapse是由nshkr.com团队开发的开源多智能体编排框架,基于Elixir语言和OTP(Open Telecom Platform)构建。它采用声明式的设计理念,让开发者通过配置而非代码来定义智能体行为和工作流。
章节 04
Synapse的设计体现了几个关键原则:
章节 05
Synapse充分利用了Elixir生态系统的优势:
章节 06
信号总线是Synapse的核心通信机制,采用发布-订阅模式实现智能体间的松耦合通信。
# 发布信号
{:ok, _signal} = Synapse.SignalRouter.publish(
Synapse.SignalRouter,
:review_request,
%{
review_id: "PR-12345",
diff: git_diff,
files_changed: 12,
labels: ["security"],
intent: "feature"
},
source: "/ci/github"
)
# 订阅信号
{:ok, _sub_id} = Synapse.SignalRouter.subscribe(Synapse.SignalRouter, :review_summary)
信号总线支持运行时动态注册新主题,使得系统可以灵活扩展新的信号类型而无需重启。
章节 07
编排器是Synapse的智能体管理核心。与传统方式不同,Synapse的编排器完全通过声明式配置定义:
# priv/orchestrator_agents.exs 示例
%{
id: :coordinator,
type: :orchestrator,
actions: [Synapse.Domains.CodeReview.Actions.ClassifyChange],
orchestration: %{
classify_fn: &MyStrategies.classify/1,
spawn_specialists: [:security_specialist, :performance_specialist],
aggregation_fn: &MyStrategies.aggregate/2,
negotiate_fn: &MyStrategies.resolve_conflicts/2
},
signals: %{
subscribes: [:review_request, :review_result],
emits: [:review_summary],
roles: %{
request: :review_request,
result: :review_result,
summary: :review_summary
}
},
state_schema: [review_count: [type: :non_neg_integer, default: 0]]
}
这种声明式方法的优点在于:
章节 08
工作流引擎负责执行声明式的工作流规范,支持复杂的依赖管理、重试策略和错误处理。
alias Synapse.Workflow.{Spec, Engine}
alias Synapse.Workflow.Spec.Step
spec =
Spec.new(
name: :example_workflow,
description: "Analyze and generate critique with retries",
metadata: %{version: 1},
steps: [
Step.new(
id: :fetch_context,
action: MyApp.Actions.FetchContext,
params: fn env -> %{id: env.input.review_id} end
),
Step.new(
id: :analyze,
action: Synapse.Actions.CriticReview,
requires: [:fetch_context],
retry: [max_attempts: 3, backoff: 200],
on_error: :continue,
params: fn env -> %{diff: env.input.diff, metadata: env.results.fetch_context} end
),
Step.new(
id: :generate_critique,
action: Synapse.Actions.GenerateCritique,
requires: [:analyze],
params: fn env ->
review = env.results.analyze
%{
prompt: "Summarize issues",
messages: [%{role: "user", content: Enum.join(review.issues || [], ", ")}],
profile: :openai
}
end
)
],
outputs: [
Spec.output(:review, from: :analyze),
Spec.output(:critique, from: :generate_critique, path: [:content])
]
)
工作流引擎的关键特性包括:
requires声明步骤间的依赖关系,引擎自动拓扑排序on_error: :halt或:continue策略