Blades
面向 Go 的可扩展多模态智能体框架,用于组合模型、工具、记忆与工作流。
这个 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 有哪些优点和局限?
- 以统一 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?
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() 获取文本响应。