返回

文章详情

展示HN:我为Swift构建了LangGraph

Hacker News2026年7月6日 14:47

一个用于构建代理和多代理工作流的Swift框架。let result = try await Workflow()。step(researchAgent)。step(writerAgent)。run("总结最新的WWDC会议关于Swift并发的讨论。")两个代理,一个管道,编译为具有崩溃恢复和Swift并发安全的DAG。安装.package(url:"https://github.com/christopherkarani/Swarm.git",from:"0.6.0")快速入门import Swarm // @Tool宏在编译时生成JSON架构@ Tool("查找当前股票价格")结构体PriceTool {@ Parameter("股票代码")var ticker:String func execute()async throws -> String {"182.50"}} //首先创建一个没有标记指令的代理,并在尾随的@ToolBuilder闭包中添加工具let agent = try Agent("使用真实数据回答财务问题。",configuration:.init(name:"分析师"),inferenceProvider:.anthropic(key:"{ENV")){PriceTool()CalculatorTool()} let result = try await agent.run("AAPL当前交易价格是多少?")打印(result.output)//"苹果(AAPL)当前交易价格为$182.50。"这是一个功能正常的代理,具有类型安全的工具调用。Swarm还支持AGENTS.md和SKILL.md,用于声明式的代理规范和可重用的技能—请参阅入门指南以获取完整的工作区布局。为什么选择Swarm Swift并发是表面的一部分。Swift 6.2严格并发在整个包中启用。工具保持类型安全。@Tool宏从Swift结构生成JSON架构。工作流可以在崩溃中生存。持久工作流检查点允许您从显式的检查点ID恢复。云和设备上的模型使用相同的抽象。基础模型、Anthropic、OpenAI、Ollama、Gemini、MiniMax、OpenRouter和MLX都适合相同的形状。它完全用Swift编写。AsyncThrowingStream,演员,结果构建器和宏在这里都是第一类的。示例能力矩阵展示Swarm现在附带一个内置的能力展示,测试稳定的表面积,形成一个确定性矩阵:代理和工具流式对话以及会话持久性,顺序、并行、路由和重复直到工作流交接,内存设备工作区加载防护墙,弹性助手耐用的检查点和恢复可观察性MCP发现和工具桥接提供者选择在本地运行:swift run SwarmCapabilityShowcase list swift run SwarmCapabilityShowcase matrix swift run SwarmCapabilityShowcase run handoff swift run SwarmCapabilityShowcase smoke 确定性矩阵是CI安全的。实时提供者的烟雾覆盖通过环境变量选择性开启。有关场景目录和烟雾模式详细信息,请参阅docs/guide/capability-showcase.md可选演示演示可执行文件是选择性开启的,因此默认库图保持专注于框架产品:SWARM_INCLUDE_DEMO=1 swift build SWARM_INCLUDE_DEMO=1 swift run SwarmDemo SWARM_INCLUDE_DEMO=1 swift run SwarmMCPServerDemo多代理管道let researcher = try Agent("研究该主题并提取关键信息。",inferenceProvider:.anthropic(key:"sk-...")){WebSearchTool()}let writer = try Agent("从研究中编写简明摘要。",inferenceProvider:.anthropic(key:"sk-..."))let result = try await Workflow()。step(researcher)。step(writer)。run("最新的设备ML进展")每个代理解析自己的提供者。每个代理传递inferenceProvider(如上所述),或在应用程序启动时调用await Swarm.configure(provider:.anthropic(apiKey:"...")),以在未指定提供者的每个代理中共享默认设置。并行扩展let result = try await Workflow()。parallel([bullAgent,bearAgent,analystAgent],merge:.structured)。run("评估苹果的第四季度收益。")//三个角度,合并成一个输出。动态路由let result = try await Workflow()。route{input in if input.contains("$"){return mathAgent} if input.contains("weather"){return weatherAgent} return generalAgent}.run("15%的$240是多少?")流式处理从尝试await event in agent.stream("总结变更日志。"){switch event {case.output(.token(let t)):打印(t,terminator:" ") case.tool(.completed(let call,_)):打印(" [tool:\(call.toolName)"]") case.lifecycle(.completed(let r)):打印(" 在\(r.duration)中完成") case.lifecycle(.failed(let error)):打印(" 错误:\(error)") default:break //其他事件包括.output(.thinking(...)),.handoff(...),.observation(...)和.lifecycle(.iterationStarted(...))}}更多示例语义记忆let agent = try Agent("你记得过去的对话。",inferenceProvider:.anthropic(key:"sk-..."),memory:.vector(embeddingProvider:myEmbedder,similarityThreshold:0.75)){//工具}防护墙let agent = try Agent("你是一个乐于助人的助手。",inputGuards:...}

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡