项目简介

Goa-AI 是一款强大的Go语言框架,它将Goa框架的设计优先理念引入到AI代理系统开发中。通过简洁的DSL(领域特定语言),您可以声明AI代理、工具集和策略,并由代码生成器自动处理其余的繁琐工作,从而构建出类型安全、可观测且具备持久化执行能力的AI代理。更重要的是,Goa-AI提供了通用的MCP适配器,不仅能作为MCP客户端消费外部MCP服务,还能将您的Goa服务自动转换为MCP服务器,为大型语言模型(LLM)客户端提供标准化的上下文信息和功能。

主要功能点

  • 设计优先的AI代理构建: 通过声明式DSL定义智能代理、其可用的工具集和运行策略。
  • 零胶水代码集成工具: 将代理直接绑定到现有的Goa服务方法,无需额外适配器即可让LLM调用业务逻辑。
  • 持久化执行: 集成Temporal工作流引擎,实现代理任务的自动重试、时间预算和确定性重放,确保代理在崩溃后也能恢复运行。
  • 可组合的代理: 支持将一个代理作为另一个代理的工具,构建分层、专业的AI代理系统。
  • 自动生成MCP服务器: 能够将您定义的Goa服务自动转换成符合Model Context Protocol (MCP) 规范的服务器,提供工具调用、资源访问和Prompt模板渲染等核心功能。
  • 全面的可观测性: 内置日志、指标、分布式追踪和会话记录,让代理的决策过程透明可查。
  • 多种模型客户端支持: 提供AWS Bedrock、OpenAI等主流LLM模型的客户端适配。
  • 灵活的存储和流媒体: 支持MongoDB作为内存/会话存储,以及Pulse(基于Redis Stream)作为实时事件流传输。

安装步骤

  1. 安装Go语言环境: 确保您的系统已安装Go 1.24或更高版本。
  2. 安装Goa代码生成器: 在终端运行以下命令:
    go install goa.design/goa/v3/cmd/goa@latest
  3. 安装Goa-AI库: 在您的Go项目模块中运行以下命令:
    go get goa.design/goa-ai
  4. 定义您的Goa-AI代理和服务: 在您的项目 'design/' 目录下创建 'design.go' 文件,使用Goa和Goa-AI提供的DSL定义您的服务、代理和工具。例如,要暴露一个简单的计算器服务作为MCP服务器:
    package design
    
    import (
        . "goa.design/goa/v3/dsl"
        . "goa.design/goa-ai/dsl"
    )
    
    var _ = Service("calculator", func() {
        // 声明此Goa服务将作为MCP服务器,并指定其名称和协议版本
        MCPServer("calc", "1.0.0") 
        Method("add", func() {
            Payload(func() { 
                Attribute("a", Int, "第一个整数")
                Attribute("b", Int, "第二个整数")
            })
            Result(Int)
            // 将add方法暴露为MCP工具,指定工具名称和描述
            MCPTool("add", "将两个数字相加") 
        })
    })
  5. 生成代码: 在您的项目根目录中运行Goa代码生成命令:
    goa gen example.com/your-module/design
    (请将'example.com/your-module/design'替换为您的Go模块路径) 此命令将生成必要的Go代码,包括MCP服务器的实现。

MCP服务器配置

生成的MCP服务器将作为标准Goa服务的一部分运行。MCP客户端需要通过JSON-RPC协议与此服务通信。配置MCP客户端时,您需要提供服务器的启动命令和相关参数。

以下是一个MCP客户端的MCP服务器配置示例(JSON格式):

{
  "name": "Goa-AI Calc MCP Server",
  "command": ["go", "run", "main.go"], 
  "args": [
    "serve",                   
    "--http-port", "8080",     
    "--log-level", "info"      
  ],
  "description": "由Goa-AI生成的MCP计算器服务,提供基础算术工具。",
  "endpoints": {
    "http": {
      "url": "http://localhost:8080/mcp/calc" 
    }
  }
}

配置参数注释:

  • 'name': MCP服务器的友好名称。
  • 'command': 启动MCP服务器进程的命令。例如,如果您的Goa服务被编译为名为'server'的可执行文件,可以配置为'["./server"]';如果通过'go run'启动,可以配置为'["go", "run", "main.go"]'。
  • 'args': 启动MCP服务器时需要传递的额外命令行参数。这通常包括服务启动命令(如'serve')以及HTTP端口、日志级别等运行时配置。
  • 'description': MCP服务器的详细描述,帮助MCP客户端理解其功能。
  • 'endpoints.http.url': MCP服务器通过HTTP传输协议提供的JSON-RPC服务URL。MCP客户端将连接到此URL以发送请求。请根据您的Goa服务实际监听的HTTP端口和路由路径进行配置。

基本使用方法

一旦您的Goa服务被配置并生成为MCP服务器,您可以像启动任何Goa服务一样启动它。MCP客户端(例如,一个LLM代理或LLM应用)将使用配置中的'command'和'args'来启动并连接到您的MCP服务器,并通过其暴露的MCP方法(如'tools/list'、'tools/call'、'resources/read'等)进行交互。

例如,MCP客户端可能会首先发送一个'initialize'请求来协商协议版本和获取服务器能力,然后发送'tools/list'来发现可用的工具(如本例中的'add'工具),最后发送'tools/call'来调用'add'工具执行计算:

  1. MCP客户端初始化: 客户端发送 '{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "1.0.0", "clientInfo": {"name": "LLMClient", "version": "1.0"}}}'
  2. MCP服务器响应: 服务器返回包含自身能力和信息的响应。
  3. MCP客户端列出工具: 客户端发送 '{"jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {}}'
  4. MCP服务器响应工具列表: 服务器返回 'add' 工具的描述和输入schema。
  5. MCP客户端调用工具: 客户端发送 '{"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "add", "arguments": {"a": 5, "b": 3}}}'
  6. MCP服务器执行并响应: 服务器执行 'add' 方法,并返回 '{"jsonrpc": "2.0", "result": {"content": [{"text": "8"}], "isError": false}, "id": 3}'

信息

分类

开发者工具