Blades
面向 Go 的可扩展多模态智能体框架,用于组合模型、工具、记忆与工作流。
- Star 数
- ★ 820
- 最近更新
- 6 个月前
- License
- MIT
- 主语言
- Go
- FA 评分
- 37/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台OpenAI API
- 费用
- 软件免费,模型调用费用自付
- 上手难度
- 中 · 需要几步配置
- 开始前需要
- 典型场景
- Go 后端团队要在现有服务中调用 OpenAI 模型,实现多轮问答并读取 Agent 返回的文本。
- 不适合
- 需要开箱即用聊天应用或CLI的团队
- 希望有独立部署或运维方案的用户
- 需要持久化记忆与生产级配置的团队
这个 Agent 能做什么,适合哪些场景?
Blades 是一个 Go 语言多模态 AI Agent 框架,而非独立托管的聊天产品。其统一的 Agent 执行接口以 Run(context.Context, *Invocation) 返回 Generator[*Message, error],Agent、Chain 和 ModelProvider 可据此组合。框架提供可插拔的 ModelProvider、Tool、Memory 与 Middleware,并以 flow 编排多步骤推理和多个 Agent 的数据、控制流。输出既可通过 Generate 一次性获得,也可通过 NewStreaming 逐步消费;示例展示了在应用代码中接入 OpenAI 模型并由 Runner 执行。它适合希望在 Go 服务或应用内自行实现智能体逻辑的团队,README 未说明独立部署服务、CLI 或安装命令。
应用先创建如 openai.NewModel("gpt-5", openai.Config{APIKey: os.Getenv("OPENAI_API_KEY")}) 的 ModelProvider,再用 blades.NewAgent 配置 WithModel 与 WithInstruction。调用方构造 blades.UserMessage,使用 blades.NewRunner(agent).Run(context.Background(), input) 执行,并从返回的消息读取 Text()。在需要扩展时,Agent 可通过 Tool 的 InputSchema 和 Handle 调用封装后的外部能力;Memory 可按会话保存和检索消息,Middleware 可在 Runner 执行链中加入横切逻辑。技能可由 skills.NewFromDir("./skills") 或 skills.NewFromEmbed(embed.FS) 加载后传给 WithSkills(...)。
- Go 后端团队要在现有服务中调用 OpenAI 模型,实现多轮问答并读取 Agent 返回的文本。
- 需要把多个 Agent 或 Chain 串联为多步骤推理流程的 Go 应用开发者。
- 要为模型接入数据库查询、API 调用等外部能力,并希望用 InputSchema 约束调用参数的团队。
- 需要按会话保存与搜索对话消息、让后续轮次保留上下文的应用。
- 希望在不改 Runner 核心逻辑的前提下加入日志、监控、认证或限流等中间件的工程团队。
如何安装或部署这个 Agent?
README 未提供可复制的安装命令、Go 版本要求或模块初始化步骤,因此无法据此确认依赖安装流程。已明确的运行前提是 Go 环境,以及使用 OpenAI 示例时设置 OPENAI_API_KEY;还需要让项目能够导入 github.com/go-kratos/blades 和 github.com/go-kratos/blades/contrib/openai。
如何使用这个 Agent?
在 Go 程序中读取 OPENAI_API_KEY,创建 openai.NewModel("gpt-5", openai.Config{APIKey: os.Getenv("OPENAI_API_KEY")}),然后以 blades.NewAgent("Blades Agent", blades.WithModel(model), blades.WithInstruction("You are a helpful assistant that provides detailed and accurate information.")) 创建 Agent。用 blades.UserMessage("What is the capital of France?") 创建输入,再执行 runner := blades.NewRunner(agent) 和 runner.Run(context.Background(), input)。检查 err 后,对返回结果调用 output.Text() 获取文本响应。
这个 Agent 有哪些优点和局限?
- 以统一 Agent 接口和 Generator 输出模型连接 Agent、Chain 与 ModelProvider,便于组合执行单元。
- ModelProvider 是可插拔抽象,README 明确以 OpenAI、DeepSeek、Gemini 等不同模型服务为可集成对象。
- 同时覆盖 Tool、会话记忆、流式生成和 Middleware,适合把智能体能力嵌入 Go 应用。
- 技能既可从目录加载,也可通过 embed.FS 打包进程序。
- README 未给出安装命令、Go 版本、模块版本或独立部署方案,首次接入需要自行补齐工程配置。
- OpenAI 示例依赖网络访问和 OPENAI_API_KEY,模型调用的成本与可用性取决于所选服务商。
- 持久化记忆和更复杂的记忆策略被鼓励由开发者扩展,README 只明确提供 InMemory 实现。
- 没有展示 CLI、HTTP 服务接口或生产运维配置,团队需自行定义应用入口和运行边界。
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Blades 当前 | 37 · 缺口较多 | 开发框架免费 + 模型费 | ★ 820 | 6 个月前 | Go | OpenAI API |
| Agently AI 应用运行时 | 64 · 存在缺口 | 代码库 / SDK免费 + 模型费 | ★ 1.7k | 26 天前 | Python | OpenAI API · Claude API |
| Dynamiq 智能体编排框架 | 61 · 存在缺口 | 代码库 / SDK免费 + 模型费 | ★ 1.1k | 3 天前 | Python | OpenAI API |
| DSPy-Go | 44 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 203 | 6 天前 | Go | OpenAI API · Claude API |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
README 将工具描述为可调用 API、数据库和文件系统等外部能力,但未说明权限限制、调用确认或回滚方式,故最小权限、用户确认与回滚得分低。示例通过环境变量读取 OpenAI 密钥,提供了有限的数据流说明;未见更完整的敏感数据处理或依赖安全策略。README 说明了主要组件和用途,但来源归属较有限;未提供可核验的发布者身份或维护者更新路径。
README、AGENTS.md 与 Go 工作流都指向 Go 多模块构建和测试,但 README 对 Agent、Chain、Flow 的概念介绍有重叠,且示例代码与文档不足以证明所有描述相互一致。go.mod 固定了直接依赖版本,但未见锁定传递依赖或依赖安全处理说明。示例在运行错误时返回错误并记录日志,框架级失败模式与用户可读错误说明仍较薄。
README 明确面向 Go 开发者,列出多轮对话、结构化输出、可插拔模型、工具、记忆和中间件等场景,覆盖面尚可。它也表明工具可访问外部系统,但未说明边界、权限模型或适用条件;技能示例给出了天气查询的触发步骤。仅声明 Go 1.25 环境,未充分说明部署、运行时或其他环境要求。
README 按架构、核心概念、快速开始、技能和贡献组织,且提供代码示例;但缺少面向使用者的安装步骤和 FAQ,概念章节有重复。许可证文件完整列出 MIT 条款。提供的文件没有版本变更记录;AGENTS.md 是贡献指南,描述开发流程和测试要求,但未明确产品维护责任或用户支持更新路径。
README 的聊天 Agent 和技能示例展示了可直接理解的用法,且框架提供模型、工具、记忆及流程编排抽象,能体现一定实用价值。成本收益评估有限:文档没有说明资源开销、外部服务成本或运行限制。
README 的主要能力主张可对应到接口片段和示例,但很多能力仍以概述性文字陈述。AGENTS.md 和 CI 工作流共同说明存在多模块构建与测试流程,形成有限交叉佐证;静态材料没有运行结果,因此不据此判断执行正确性。部分描述是项目自述,文件未系统区分已实现行为与愿景性主张。
- 源码中未见:执行前用户确认开启或自行加上执行前确认;先在沙箱或测试环境跑通,确认行为后再接入真实数据。
- 源码中未见:依赖安全审查安装前固定版本并做一次依赖扫描(如 npm audit、pip-audit);优先放在容器里运行。
- 源码中未见:回滚或恢复路径运行前先备份,或在 git 分支、快照上操作,确保改动可以撤销。
- 工具可以接入文件系统、数据库和 API;接入应用时应由集成方明确配置可用权限并审查每个工具的副作用。
- 示例将 API 密钥放在环境变量中;材料未说明日志、记忆或模型请求中的敏感数据处理方式。
- 文档说明项目处于早期并快速迭代,但提供的材料没有变更日志或明确的维护联系路径。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
发布说明摘录
🎉 Release v0.5.0 This release introduces context management and loop tool support, enhances metadata handling and cache control, and includes various optimizations and fixes. What's Changed - Features: - Add recipe feat by @longXboy in [#203](https://github.com/go-kratos/blades/pull/203) - Add context control option and stateless mode by @tonybase in [#223](https://github.com/go-kratos/blades/pull/223) - Add loop execution mode support to recipe by @tonybase in [#221](https://github.com/go-kratos/blades/pull/221) …在 GitHub 查看 ↗ -
发布说明摘录
🎉 Release v0.4.0 This release introduces middleware support for agents and skill injection capabilities, along with several important bug fixes and improvements. --- 🚀 What's Changed ✨ Features - feat(flow): allow adding middlewares as an option to DeepAgent and RoutingAgent (#188) — thanks @yuchanns - feat(skills): add skill injection support for agents (#192) — thanks @tonybase - feat(example): add Claude weather example (#194) — thanks @tonybase 🐛 Bug Fixes - fix(contrib): correct assistant role mapping and improve error handling (#191) — thanks @tonybase …在 GitHub 查看 ↗ -
发布说明摘录
What's Changed * trying to marshal unsupported type func() *github.com/google/jsonsc… by @TomYang1024 in https://github.com/go-kratos/blades/pull/179 * r.Evaluate undefined (type evaluate.Evaluator has no field or method by @TomYang1024 in https://github.com/go-kratos/blades/pull/178 * fix token usage zero issue for streaming mode of openai model by @jayn1985 in https://github.com/go-kratos/blades/pull/180 * feat(example): add image-to-text example and update message parts API by @tonybase in https://github.com/go-kratos/blades/pull/181 …在 GitHub 查看 ↗
常见问题
它能直接作为聊天服务部署吗?
是否只能使用 OpenAI?
使用 OpenAI 示例需要什么凭据?
对话上下文如何保存?
谢谢反馈,我们会据此改进页面。