别卷 LangChain 了!Blades AI 框架让 Go 开发者轻松打造智能体

名字来源于:《战神》游戏以希腊神话为背景,讲述奎托斯(Kratos)由凡人成为战神并展开弑神屠杀的冒险经历,Blades 是奎托斯的标志性武器。

在人工智能浪潮席卷全球的今天,大型语言模型(LLM)正在重塑软件开发的边界。然而,对于广大的 Go 开发者而言,一个普遍的痛点是:主流的 LLM 应用框架(如 LangChain)大多基于 Python,这使得在以 Go 为主要技术栈的团队中开发 Agent 应用变得不那么"原生"和高效。

为了解决这个挑战,今天我带着我的新作品来了,它就是 Blades ! Blades 是一个专为 Go 语言设计的、用于构建 AI Agent 应用的现代化框架。目处于初期阶段,当前已支持自定义模型、工具、记忆体、中间件等功能,适用于多轮对话、链式推理和结构化输出等场景。它保持着 Kratos 一贯的设计美学,结合 Go 语言的特性,提供了灵活且高效的 AI Agent 解决方案。

  • Go Idiomatic:完全依照 Go 的思维方式构建,代码风格、使用体验都让 Go 开发者感到亲切。
  • 使用简单:通过简洁的代码生命,定义 AI Agent,实现需求快速交付,让复杂的逻辑变得清晰、易于管理和维护。
  • 中间件生态:借鉴 Kratos 的中间件设计理念,无论是 Observability、Guardrails,都可以方便的集成到 AI Agent。
  • 高度可扩展:通过统一的接口和可插拔的组件,实现高度的解耦和可扩展性,方便集成不同的 LLM 模型和外部工具。

架构

当前 Blades 主要由以下模块组成:

  • Agent (智能体):执行任务的核心单元,可以调用模型和工具。
  • Prompt (提示词):用于与 LLM 交互的模板化文本,支持动态变量替换和复杂的上下文构建。
  • Chain (链):将多个 Agent 或其他 Chain 串联起来,形成复杂的工作流。
  • ModelProvider (模型):可插拔的 LLM 接口,您可以轻松切换和集成不同的语言模型服务(如 OpenAI 等)。
  • Tool (工具):Agent 可以使用的外部能力,例如调用 API、查询数据库、访问文件系统等。
  • Memory (记忆):为 Agent 提供短期或长期的记忆能力,实现具备上下文的连续对话。
  • Middleware (中间件):类似于 Web 框架中的中间件,可以实现对 Agent 的横切面控制。

核心接口

其中 Runner 是 Blades 框架中最核心的接口,它定义了所有可执行组件的基本行为。

go 复制代码
// Runner represents an entity that can process prompts and generate responses.
type Runner interface {
    // Run 执行一个同步的、非流式的操作,返回一个完整的 Generation 结果。
    Run(context.Context, *Prompt, ...ModelOption) (*Generation, error)
    // RunStream 执行一个异步的、流式的操作,返回一个 Streamer,用于逐步接收 Generation 结果。
    RunStream(context.Context, *Prompt, ...ModelOption) (Streamer[*Generation], error)
}

其设计旨在提供一个统一的执行范式,通过 RunRunStream 方法,实现了框架内各种功能模块的解耦、标准化和高度可组合性AgentChainModelProvider 等组件都实现了此接口,从而统一了它们的执行逻辑,使得不同组件能够像乐高积木一样灵活组合,构建复杂的 AI Agent。

ModelProvider

ModelProviderBlades 框架与底层大语言模型(LLM)进行交互的核心抽象层。其设计目标在于通过统一的接口实现解耦和扩展性,使得框架核心逻辑与特定模型(如 OpenAI, DeepSeek, Gemini 等)的实现细节分离。

其他模块设计,不再一一赘述,可以阅读代码,了解细节。

动手做一个电影推荐 Agent

下面我们通过一个简单的例子,来展示如何使用 Blades 构建一个电影推荐 Agent。这个 Agent 会推荐一个中国明星,并列出他/她主演过的电影。

go 复制代码
package main

import (
    "context"
    "log"

    "github.com/go-kratos/blades"
    "github.com/go-kratos/blades/contrib/openai"
)

func main() {
    agent := blades.NewAgent(
        "Template Agent",
        blades.WithModel("qwen-plus"),
        blades.WithProvider(openai.NewChatProvider()),
    )

    // Define templates and params
    params := map[string]any{
        "actor":  "成龙",
        "movies": "10",
    }

    // Build prompt using the template builder
    // Note: Use exported methods when calling from another package.
    prompt, err := blades.NewPromptTemplate().
        System("你是一个电影电视剧推荐大师,根据用户信息进行推荐 {{.movies}} 作品。", params).
        User("请为我推荐 {{.actor}} 的电影,请按照"标题(年份)、类型/风格 、推荐理由"的格式输出。", params).
        Build()
    if err != nil {
        log.Fatal(err)
    }

    log.Println("Generated Prompt:", prompt.String())

    // Run the agent with the templated prompt
    result, err := agent.Run(context.Background(), prompt)
    if err != nil {
        log.Fatal(err)
    }
    log.Println(result.AsText())
}

执行程序后,你会得到类似如下的输出:

shell 复制代码
2025/09/25 22:12:34 Generated Prompt: [Text: 你是一个电影电视剧推荐大师,根据用户信息进行推荐 10 作品。)][Text: 请为我推荐 成龙 的电影,请按照"标题(年份)、类型/风格 、推荐理由"的格式输出。)]
2025/09/25 22:12:34 Processing message: system [{你是一个电影电视剧推荐大师,根据用户信息进行推荐 10 作品。}]
2025/09/25 22:12:34 Processing message: user [{请为我推荐 成龙 的电影,请按照"标题(年份)、类型/风格 、推荐理由"的格式输出。}]
2025/09/25 22:13:00 当然可以!以下是10部成龙的经典电影推荐,涵盖动作、喜剧、冒险等多种风格,展现他独特的"功夫喜剧"魅力与特技表演:

1. **《警察故事》(1985)**  
   - 类型/风格:警匪 / 动作 / 犯罪  
   - 推荐理由:被誉为成龙最具代表性的作品之一,高难度实拍动作场面震撼影史,商场追击戏成为经典,充分展现其拼命三郎的敬业精神。

2. **《A计划》(1983)**  
   - 类型/风格:动作 / 喜剧 / 冒险  
   - 推荐理由:融合维多利亚时代背景与惊险钟楼跳伞戏,动作设计极具创意,幽默与紧张并存,是早期动作喜剧的巅峰之作。
....

说在最后

邀请所有 Go 开发者和 AI 爱好者访问我们的 GitHub 仓库,亲自体验 Blades 带来的开发乐趣。

给项目一个 ⭐️ Star,探索 examples 目录下的更多用法,或者直接上手构建您的第一个 Go LLM 应用吧!

项目当前处于初期阶段,持续迭代中,期待反馈、建议和贡献

相关推荐
Kratos开源社区3 小时前
跟 Blades 学 Agent 设计 - 01 用“提示词链”让你的 AI 助手变身超级特工
llm·go·agent
阿部多瑞 ABU6 小时前
Unicode全字符集加解密工具 - 命令行交互版:功能完整的终端解决方案
经验分享·交互·ai编程·1024程序员节
大熊猫侯佩6 小时前
黑衣人档案:用 Apple Foundation Models + SwiftUI 打造 AI 聊天机器人全攻略
ios·swiftui·ai编程
赵得C6 小时前
智能体的范式革命:华为全栈技术链驱动下一代AI Agent
人工智能·华为·ai·ai编程
探模之翼6 小时前
ReAct 与 Function Call:两种主流 Agent 技术解析与实践
大模型·agent
zhangbaolin6 小时前
langchain agent的中间件
中间件·langchain·大模型·agent
百锦再9 小时前
第10章 错误处理
java·git·ai·rust·go·错误·pathon
用户4099322502129 小时前
为什么Vue 3的计算属性能解决模板臃肿、性能优化和双向同步三大痛点?
前端·ai编程·trae
数据智能老司机9 小时前
构建多智能体系统——使用工具
llm·agent·mcp