agent-sdk-go

GitHub
571 120 简单 1 次阅读 昨天MIT开发框架Agent
AI 解读 由 AI 自动生成,仅供参考

agent-sdk-go 是一款专为 Go 语言开发者打造的强大框架,旨在帮助用户轻松构建可用于生产环境的高性能 AI 智能体。它解决了在开发复杂 AI 应用时,难以高效整合多模型支持、记忆管理、工具调用及企业级安全机制的痛点。

无论是需要快速原型验证的独立开发者,还是追求高可用性与安全性的企业技术团队,都能通过 agent-sdk-go 获得流畅的开发体验。该工具不仅无缝兼容 OpenAI、Anthropic 和 Google Vertex AI 等主流大模型,还具备独特的模块化设计:支持即插即用的工具生态、基于向量的高级记忆管理,以及符合 Model Context Protocol (MCP) 标准的服务器集成。

此外,agent-sdk-go 内置了完善的可观测性系统、令牌用量追踪和多租户隔离机制,确保应用在规模化部署时的稳定与安全。通过直观的 YAML 配置和零样本引导功能,开发者可以迅速定义复杂的任务流程,甚至直接通过 CLI 工具与 AI 进行交互式对话。如果你希望用 Go 语言构建灵活、可扩展且具备企业级特性的 AI 智能体,agent-sdk-go 将是一个值得信赖的选择。

使用场景

某电商平台的后端团队需要构建一个能自动处理用户退货请求、查询库存并生成物流单的智能客服系统。

没有 agent-sdk-go 时

  • 多模型切换困难:团队需手动编写大量胶水代码来适配 OpenAI 和 Google Gemini,一旦切换模型或进行 A/B 测试,重构成本极高。
  • 记忆管理混乱:缺乏原生的长短期记忆机制,难以在复杂的退货流程中准确追踪用户多轮对话上下文,导致经常重复询问用户信息。
  • 可观测性缺失:无法精细监控每个 Agent 步骤的 Token 消耗和执行耗时,出现错误时只能靠猜测排查,运维调试如同“黑盒”操作。
  • 安全管控薄弱:缺少内置的护栏机制,担心 AI 误操作直接调用数据库删除订单,不得不花费数周自行开发权限校验中间件。

使用 agent-sdk-go 后

  • 无缝多模型集成:利用其多模型智能特性,通过简单配置即可在 GPT-4o 和 Gemini 间自由切换,快速验证不同模型在退货场景下的表现。
  • 高级记忆自动化:借助内置的缓冲区和向量检索记忆管理,Agent 能精准记住用户之前的商品编号和退货原因,实现流畅的多轮交互。
  • 全链路可观测:通过集成的追踪和日志功能,团队能实时查看每一步的工具调用详情与 Token 账单,迅速定位并优化高成本环节。
  • 企业级安全落地:直接使用内置的安全护栏(Guardrails),严格限制 Agent 仅能执行“查询”和“创建”操作,从架构层面杜绝了数据误删风险。

agent-sdk-go 将原本需要数周搭建的复杂 Agent 基础设施浓缩为声明式配置,让团队能专注于业务逻辑而非底层框架的重复造轮子。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

未说明

内存

未说明

依赖
notes该工具是基于 Go 语言开发的 SDK 和 CLI 工具,非 Python 项目。核心运行环境需安装 Go 1.23 或更高版本。可选依赖 Redis 用于分布式内存管理。支持通过预编译二进制文件或源码构建安装 CLI 工具。
python不适用
Go 1.23+
Redis (可选)
agent-sdk-go hero image

快速开始

Ingenimax Ingenimax

Agent Go SDK

一个功能强大的 Go 框架,用于构建生产就绪的 AI 代理,可将内存管理、工具执行、多模型支持和企业级特性无缝集成到灵活且可扩展的架构中。

文档

📖 docs.goagents.dev — 完整的文档、指南和参考。

社区

Discord

加入我们的 Discord 社区,一起协作、分享你的项目,并获得 agent-sdk-go 的社区支持!

特性

核心能力

  • 🧠 多模型智能:无缝集成 OpenAI、Anthropic 和 Google Vertex AI(Gemini 模型)。
  • 🔧 模块化工具生态:通过即插即用的工具扩展代理能力,支持网络搜索、数据检索和自定义操作。
  • 📝 高级内存管理:持久化对话跟踪,提供缓冲区和向量检索选项。
  • 🔌 MCP 集成:支持通过 HTTP 和 stdio 传输协议连接 Model Context Protocol (MCP) 服务器。
  • 📊 Token 使用追踪:内置 Token 计数功能,用于成本监控、使用分析和优化。

企业级支持

  • 🚦 内置安全机制:全面的安全防护措施,确保负责任的 AI 部署。
  • 📈 完整可观测性:集成追踪与日志记录功能,便于监控与调试。
  • 🏢 企业级多租户支持:安全地为多个组织提供服务,实现资源隔离。

开发体验

  • 🛠️ 结构化任务框架:规划、审批并执行复杂的多步骤操作。
  • 📄 声明式配置:使用直观的 YAML 定义来构建复杂的代理和任务。
  • 🧙 零成本快速启动:根据简单的系统提示自动生成完整的代理配置。

快速入门

前置条件

  • Go 1.23+
  • Redis(可选,用于分布式内存)

安装

作为 Go 库

将 SDK 添加到你的 Go 项目中:

go get github.com/Ingenimax/agent-sdk-go

作为 CLI 工具(无头 SDK)

选项 1:下载预编译二进制文件(推荐)

GitHub Releases 下载适用于你平台的最新版本,并将其添加到你的 PATH 中。

选项 2:通过 Go 安装

go install github.com/Ingenimax/agent-sdk-go/cmd/agent-cli@latest

选项 3:从源码构建

# 克隆仓库
git clone https://github.com/Ingenimax/agent-sdk-go
cd agent-sdk-go

# 构建 CLI 工具
make build-cli

# 安装到系统 PATH(可选)
make install

CLI 快速启动:

# 初始化配置
agent-cli init

# 选项 1:设置环境变量
export OPENAI_API_KEY=your_api_key_here

# 选项 2:使用 .env 文件(推荐)
cp env.example .env
# 编辑 .env 文件以填写你的 API 密钥

# 运行简单查询
agent-cli run "旧金山的天气如何?"

# 启动交互式聊天
agent-cli chat

配置

SDK 使用环境变量进行配置。关键变量包括:

  • OPENAI_API_KEY:你的 OpenAI API 密钥
  • OPENAI_MODEL:要使用的模型(例如 gpt-4o-mini)
  • LOG_LEVEL:日志级别(debug、info、warn、error)
  • REDIS_ADDRESS:Redis 服务器地址(如果使用 Redis 作为内存存储)

完整配置选项请参阅 .env.example 文件。

获取 Nina(AI 助手)的帮助

Nina 是一位对 agent-sdk-go 代码库了如指掌的 AI 助手。通过 MCP(Model Context Protocol)连接 Nina,即可在你的 IDE 中直接获得帮助。

Cursor IDE

将以下内容添加到 ~/.cursor/mcp.json

{
  "mcpServers": {
    "agent-sdk-go": {
      "url": "https://nina.agentgogo.app/mcp",
      "transport": "sse"
    }
  }
}

重启 Cursor IDE 后,Nina 的工具将出现在你的 AI 助手中。

Claude Desktop

将以下内容添加到 claude_desktop_config.json

平台 配置位置
macOS ~/Library/Application Support/Claude/claude_desktop_config.json
Windows %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "agent-sdk-go": {
      "url": "https://nina.agentgogo.app/mcp",
      "transport": "sse"
    }
  }
}

重启 Claude Desktop 后,Nina 的工具将通过 🔌 图标提供服务。

可用工具

工具 描述
ask_nina 提问关于 agent-sdk-go、Go 编程或开发的问题
search_sdk 搜索 SDK 文档和源代码
get_sdk_status 获取 Nina 的 SDK 知识库状态

使用示例

创建一个简单的智能体

package main

import (
	"context"
	"fmt"

	"github.com/Ingenimax/agent-sdk-go/pkg/agent"
	"github.com/Ingenimax/agent-sdk-go/pkg/config"
	"github.com/Ingenimax/agent-sdk-go/pkg/llm/openai"
	"github.com/Ingenimax/agent-sdk-go/pkg/logging"
	"github.com/Ingenimax/agent-sdk-go/pkg/memory"
	"github.com/Ingenimax/agent-sdk-go/pkg/multitenancy"
	"github.com/Ingenimax/agent-sdk-go/pkg/tools"
	"github.com/Ingenimax/agent-sdk-go/pkg/tools/websearch"
)

func main() {
	// 创建日志记录器
	logger := logging.New()

	// 获取配置
	cfg := config.Get()

	// 使用 OpenAI 创建一个新的智能体
	openaiClient := openai.NewClient(cfg.LLM.OpenAI.APIKey,
		openai.WithLogger(logger))

	agent, err := agent.NewAgent(
		agent.WithLLM(openaiClient),
		agent.WithMemory(memory.NewConversationBuffer()),
		agent.WithTools(createTools(logger).List()...),
		agent.WithSystemPrompt("你是一位有用的 AI 助手。当你不知道答案或需要实时信息时,可以使用可用工具来查找信息。"),
		agent.WithName("ResearchAssistant"),
	)
	if err != nil {
		logger.Error(context.Background(), "创建智能体失败", map[string]interface{}{"error": err.Error()})
		return
	}

	// 创建包含组织 ID 和对话 ID 的上下文
	ctx := context.Background()
	ctx = multitenancy.WithOrgID(ctx, "default-org")
	ctx = context.WithValue(ctx, memory.ConversationIDKey, "conversation-123")

	// 运行智能体
	response, err := agent.Run(ctx, "旧金山的天气如何?")
	if err != nil {
		logger.Error(ctx, "运行智能体失败", map[string]interface{}{"error": err.Error()})
		return
	}

	fmt.Println(response)
}

func createTools(logger logging.Logger) *tools.Registry {
	// 获取配置
	cfg := config.Get()

	// 创建工具注册表
	toolRegistry := tools.NewRegistry()

	// 如果有 API 密钥,则添加网络搜索工具
	if cfg.Tools.WebSearch.GoogleAPIKey != "" && cfg.Tools.WebSearch.GoogleSearchEngineID != "" {
		searchTool := websearch.New(
			cfg.Tools.WebSearch.GoogleAPIKey,
			cfg.Tools.WebSearch.GoogleSearchEngineID,
		)
		toolRegistry.Register(searchTool)
	}

	return toolRegistry
}

令牌使用跟踪

SDK 提供了内置的令牌使用跟踪功能,用于成本监控和使用情况分析。你可以通过详细生成方法访问令牌信息:

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/Ingenimax/agent-sdk-go/pkg/llm/anthropic"
)

func main() {
	// 创建 LLM 客户端
	client := anthropic.NewClient("your-api-key",
		anthropic.WithModel("claude-3-haiku-20240307"),
	)

	ctx := context.Background()
	prompt := "用一段话解释量子计算。"

	// 传统方法(向后兼容)
	content, err := client.Generate(ctx, prompt)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("响应:%s\n", content)

	// 新的详细方法,包含令牌使用情况
	response, err := client.GenerateDetailed(ctx, prompt)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("响应:%s\n", response.Content)
	fmt.Printf("模型:%s\n", response.Model)

	if response.Usage != nil {
		fmt.Printf("令牌使用情况:\n")
		fmt.Printf("  输入令牌: %d\n", response.Usage.InputTokens)
		fmt.Printf("  输出令牌: %d\n", response.Usage.OutputTokens)
		fmt.Printf("  总令牌: %d\n", response.Usage.TotalTokens)

		// 计算预估成本(根据实际定价调整)
		inputCost := float64(response.Usage.InputTokens) * 0.25 / 1000000
		outputCost := float64(response.Usage.OutputTokens) * 1.25 / 1000000
		fmt.Printf("  预估成本:$%.6f\n", inputCost + outputCost)
	}
}

可用方法:

  • Generate() - 传统方法,返回字符串(未更改)
  • GenerateDetailed() - 新方法,返回包含使用信息的 *LLMResponse
  • GenerateWithTools() - 传统方法,支持工具调用(未更改)
  • GenerateWithToolsDetailed() - 新方法,支持工具调用并提供使用信息

提供商支持:

  • Anthropic:完全支持令牌使用跟踪
  • OpenAI:完全支持,包括推理令牌
  • Azure OpenAI:完全支持(与 OpenAI 类似)
  • Ollama/vLLM:本地模型不提供使用数据(Usage=nil)

完整的演示请参阅 令牌使用示例

高级 YAML 配置

SDK 现在支持基于 YAML 的全面代理配置,具备行为设置、工具配置、MCP 集成、子代理以及环境变量扩展等高级功能。

示例:使用 YAML 配置的完整代理

package main

import (
	"context"
	"log"
	"os"

	"github.com/Ingenimax/agent-sdk-go/pkg/agent"
	"github.com/Ingenimax/agent-sdk-go/pkg/llm/openai"
)

func main() {
	// 创建 LLM 客户端
	llm := openai.NewClient(os.Getenv("OPENAI_API_KEY"))

	// 从 YAML 文件加载代理配置
	configs, err := agent.LoadAgentConfigsFromFile("agents.yaml")
	if err != nil {
		log.Fatal(err)
	}

	// 直接从配置创建代理
	agentInstance, err := agent.NewAgentFromConfig("research_assistant", configs, nil, agent.WithLLM(llm))
	if err != nil {
		log.Fatal(err)
	}

	// 运行代理
	result, err := agentInstance.Run(context.Background(), "可再生能源领域的最新进展是什么?")
	if err != nil {
		log.Fatal(err)
	}

	println(result)
}

agents.yaml(高级配置):

research_assistant:
  role: "高级研究助理"
  goal: "提供全面的研究与分析"
  backstory: "拥有多种数据源和专业子代理的专家研究员"

  # 行为设置
  max_iterations: 15
  require_plan_approval: false

  # LLM 配置
  llm_config:
    temperature: 0.7
    enable_reasoning: true
    reasoning_budget: 20000

  # 内置及自定义工具
  tools:
    - type: "builtin"
      name: "websearch"
      enabled: true
      config:
        api_key: "${SEARCH_API_KEY}"
        engine: "brave"

    - type: "builtin"
      name: "calculator"
      enabled: true

  # MCP 服务器集成
  mcp:
    mcpServers:
      filesystem:
        command: "npx"
        args: ["-y", "@modelcontextprotocol/server-filesystem", "."]

      database:
        command: "python"
        args: ["-m", "mcp_server_database"]
        env:
          DATABASE_URL: "${DATABASE_URL}"

  # 内存配置
  memory:
    type: "redis"
    config:
      address: "${REDIS_ADDRESS}"
      db: 0

  # 用于专项任务的子代理
  sub_agents:
    data_analyzer:
      role: "数据分析专家"
      goal: "分析复杂数据集并提供洞察"
      backstory: "擅长统计分析和数据可视化"
      max_iterations: 8
      llm_config:
        temperature: 0.3

    report_writer:
      role: "技术文档撰写员"
      goal: "撰写综合性报告和文档"
      backstory: "善于将复杂数据转化为清晰的报告"
      tools:
        - type: "builtin"
          name: "text_processor"
          enabled: true

  # 运行时设置
  runtime:
    log_level: "info"
    enable_tracing: true
    timeout: "300s"

高级 YAML 配置的关键特性:

  • 环境变量扩展:使用 ${VAR} 语法处理敏感数据
  • 行为设置:配置迭代次数、计划审批要求及运行时行为
  • LLM 配置:微调温度、推理能力及模型特定参数
  • 工具集成:以声明式方式配置内置工具、自定义工具、MCP 工具及代理工具
  • 子代理:构建具有专业化能力的层级化代理结构
  • 内存后端:配置缓冲区、Redis 或向量存储等内存系统
  • MCP 集成:无缝配置 Model Context Protocol 服务器
  • 结构化响应:定义 JSON 模式以确保输出格式一致

使用 YAML 配置创建代理(基础)

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"path/filepath"
	"strings"

	"github.com/Ingenimax/agent-sdk-go/pkg/agent"
	"github.com/Ingenimax/agent-sdk-go/pkg/llm/openai"
)

func main() {
	// 从环境变量获取 OpenAI API 密钥
	apiKey := os.Getenv("OPENAI_API_KEY")
	if apiKey == "" {
		log.Fatal("未提供 OpenAI API 密钥。请设置 OPENAI_API_KEY 环境变量。")
	}

	// 创建 LLM 客户端
	llm := openai.NewClient(apiKey)

	// 加载代理配置
	agentConfigs, err := agent.LoadAgentConfigsFromFile("agents.yaml")
	if err != nil {
		log.Fatalf("加载代理配置失败:%v", err)
	}

	// 加载任务配置
	taskConfigs, err := agent.LoadTaskConfigsFromFile("tasks.yaml")
	if err != nil {
		log.Fatalf("加载任务配置失败:%v", err)
	}

	// 创建用于模板替换的变量映射
	variables := map[string]string{
		"topic": "人工智能",
	}

	// 为特定任务创建代理
	taskName := "research_task"
	agent, err := agent.CreateAgentForTask(taskName, agentConfigs, taskConfigs, variables, agent.WithLLM(llm))
	if err != nil {
		log.Fatalf("为任务创建代理失败:%v", err)
	}

	// 执行任务
	fmt.Printf("正在执行主题为 '%s' 的任务...\n", variables["topic"])
	result, err := agent.ExecuteTaskFromConfig(context.Background(), taskName, taskConfigs, variables)
	if err != nil {
		log.Fatalf("执行任务失败:%v", err)
	}

	// 打印结果
	fmt.Println("\n任务结果:")
	fmt.Println(result)
}

YAML 配置示例:

agents.yaml

researcher:
  role: >
    {topic} 高级数据研究员
  goal: >
    探索 {topic} 领域的前沿发展
  backstory: >
    您是一位经验丰富的研究员,擅长挖掘 {topic} 领域的最新动态。以能够找到最相关的信息并以清晰简洁的方式呈现而闻名。
  
reporting_analyst:
  role: >
    {topic} 报告分析师
  goal: >
    基于 {topic} 数据分析和研究成果,撰写详细报告
  backstory: >
    您是一位细致入微的分析师,对细节有着敏锐的洞察力。您以能够将复杂数据转化为清晰简洁的报告而著称,使他人易于理解并采取行动。

tasks.yaml

research_task:
  description: >
    对 {topic} 进行全面研究
    确保在 2025 年这一背景下,找到所有有趣且相关的信息。
  expected_output: >
    关于 {topic} 的 10 条要点列表
  agent: researcher

reporting_task:
  description: >
    审阅您所获得的背景信息,并将每个主题扩展为报告中的完整章节。
    确保报告内容详尽,涵盖所有相关信息。
  expected_output: >
    一份完整的报告,包含主要主题及其详细信息。
    格式为 Markdown,不含 '```'
  agent: reporting_analyst
  output_file: "{topic}_report.md"

使用 YAML 配置的结构化输出

SDK 支持直接在 YAML 配置文件中定义结构化输出(JSON 响应)。这使得您可以在从 YAML 创建代理时自动应用结构化输出,并将响应直接反序列化为 Go 结构体。

包含结构化输出的 agents.yaml:

researcher:
  role: >
    {topic} 高级数据研究员
  goal: >
    探索 {topic} 领域的前沿发展
  backstory: >
    您是一位经验丰富的研究员,擅长挖掘 {topic} 领域的最新进展。以能够找到最相关的信息并以清晰简洁的方式呈现而闻名。
  response_format:
    type: "json_object"
    schema_name: "ResearchResult"
    schema_definition:
      type: "object"
      properties:
        findings:
          type: "array"
          items:
            type: "object"
            properties:
              title:
                type: "string"
                description: "发现的标题"
              description:
                type: "string"
                description: "详细描述"
              source:
                type: "string"
                description: "信息来源"
        summary:
          type: "string"
          description: "发现的执行摘要"
        metadata:
          type: "object"
          properties:
            total_findings:
              type: "integer"
            research_date:
              type: "string"

包含结构化输出的 tasks.yaml:

research_task:
  description: >
    对 {topic} 进行全面研究
    确保找到任何有趣且相关的信息。
  expected_output: >
    包含发现、摘要和元数据的结构化 JSON 响应
  agent: researcher
  output_file: "{topic}_report.json"
  response_format:
    type: "json_object"
    schema_name: "ResearchResult"
    schema_definition:
      # 与上面相同的模式

在 Go 代码中的用法:

// 定义与 YAML 模式匹配的 Go 结构体
type ResearchResult struct {
    Findings []struct {
        Title       string `json:"title"`
        Description string `json:"description"`
        Source      string `json:"source"`
    } `json:"findings"`
    Summary  string `json:"summary"`
    Metadata struct {
        TotalFindings int    `json:"total_findings"`
        ResearchDate  string `json:"research_date"`
    } `json:"metadata"`
}

// 创建代理并执行任务
agent, err := agent.CreateAgentForTask("research_task", agentConfigs, taskConfigs, variables, agent.WithLLM(llm))
result, err := agent.ExecuteTaskFromConfig(context.Background(), "research_task", taskConfigs, variables)

// 反序列化结构化输出
var structured ResearchResult
err = json.Unmarshal([]byte(result), &structured)

更多详情,请参阅 使用 YAML 配置的结构化输出

自动生成代理配置

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/Ingenimax/agent-sdk-go/pkg/agent"
	"github.com/Ingenimax/agent-sdk-go/pkg/config"
	"github.com/Ingenimax/agent-sdk-go/pkg/llm/openai"
)

func main() {
	// 加载配置
	cfg := config.Get()

	// 创建 LLM 客户端
	openaiClient := openai.NewClient(cfg.LLM.OpenAI.APIKey)

	// 根据系统提示自动生成配置创建代理
	agent, err := agent.NewAgentWithAutoConfig(
		context.Background(),
		agent.WithLLM(openaiClient),
		agent.WithSystemPrompt("您是一位旅行顾问,帮助用户规划旅行和度假。您擅长寻找隐藏的宝藏,并根据旅客的偏好制定个性化行程。"),
		agent.WithName("旅行助手"),
	)
	if err != nil {
		panic(err)
	}

	// 获取生成的配置
	agentConfig := agent.GetGeneratedAgentConfig()
	taskConfigs := agent.GetGeneratedTaskConfigs()

	// 打印生成的代理详情
	fmt.Printf("生成的代理角色: %s\n", agentConfig.Role)
	fmt.Printf("生成的代理目标: %s\n", agentConfig.Goal)
	fmt.Printf("生成的代理背景故事: %s\n", agentConfig.Backstory)

	// 打印生成的任务
	fmt.Println("\n生成的任务:")
	for taskName, taskConfig := range taskConfigs {
		fmt.Printf("- %s: %s\n", taskName, taskConfig.Description)
	}

	// 将生成的配置保存为 YAML 文件
	agentConfigMap := map[string]agent.AgentConfig{
		"旅行助手": *agentConfig,
	}

	// 保存代理配置到文件
	agentYaml, _ := os.Create("agent_config.yaml")
	defer agentYaml.Close()
	agent.SaveAgentConfigsToFile(agentConfigMap, agentYaml)

	// 保存任务配置到文件
	taskYaml, _ := os.Create("task_config.yaml")
	defer taskYaml.Close()
	agent.SaveTaskConfigsToFile(taskConfigs, taskYaml)

	// 使用自动生成的代理
	response, err := agent.Run(context.Background(), "我想计划一次为期三天的东京之旅。")
	if err != nil {
		panic(err)
	}
	fmt.Println(response)
}

自动生成配置功能利用 LLM 推理,从简单的系统提示中推导出完整的代理档案及其相关任务。生成的配置包括:

  • 代理档案:定义代理人格的角色、目标和背景故事
  • 任务定义:代理可以执行的专业化任务,附有描述和预期输出
  • 可重用 YAML:保存配置以便在其他应用程序中重复使用

这种方法大大减少了创建专业化代理所需的工作量,同时确保了配置的一致性和质量。

使用带有代理的 MCP 服务器

SDK 支持 立即初始化延迟初始化 的 MCP 服务器:

  • 立即初始化:MCP 服务器在代理创建时即被初始化
  • 延迟初始化:MCP 服务器仅在其工具首次被调用时才被初始化(推荐)

延迟初始化的 MCP 集成(推荐)

package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"github.com/Ingenimax/agent-sdk-go/pkg/agent"
	"github.com/Ingenimax/agent-sdk-go/pkg/llm/openai"
	"github.com/Ingenimax/agent-sdk-go/pkg/memory"
)

func main() {
	// 创建 OpenAI LLM 客户端
	apiKey := os.Getenv("OPENAI_API_KEY")
	llm := openai.NewClient(apiKey, openai.WithModel("gpt-4o-mini"))

	// 定义延迟初始化的 MCP 配置
	// 注意:CLI 支持动态工具发现,但 SDK 需要显式定义工具
	lazyMCPConfigs := []agent.LazyMCPConfig{
		{
			Name:    "aws-api-server",
			Type:    "stdio",
			Command: "docker",
			Args:    []string{"run", "--rm", "-i", "public.ecr.aws/awslabs-mcp/awslabs/aws-api-mcp-server:latest"},
			Env:     []string{"AWS_REGION=us-west-2"},
			Tools: []agent.LazyMCPToolConfig{
				{
					Name:        "suggest_aws_commands",
					Description: "根据自然语言建议 AWS CLI 命令",
					Schema:      map[string]interface{}{"type": "object", "properties": map[string]interface{}{"query": map[string]interface{}{"type": "string"}}},
				},
			},
		},
		{
			Name:    "kubectl-ai",
			Type:    "stdio",
			Command: "kubectl-ai",
			Args:    []string{"--mcp-server"},
			Tools: []agent.LazyMCPToolConfig{
				{
					Name:        "kubectl",
					Description: "对 Kubernetes 集群执行 kubectl 命令",
					Schema:      map[string]interface{}{"type": "object", "properties": map[string]interface{}{"command": map[string]interface{}{"type": "string"}}},
				},
			},
		},
	}

	// 创建带有延迟初始化 MCP 配置的代理
	myAgent, err := agent.NewAgent(
		agent.WithLLM(llm),
		agent.WithLazyMCPConfigs(lazyMCPConfigs),
		agent.WithMemory(memory.NewConversationBuffer()),
		agent.WithSystemPrompt("你是一位可以访问 AWS 和 Kubernetes 工具的 AI 助手。"),
	)
	if err != nil {
		log.Fatalf("创建代理失败:%v", err)
	}

	// 使用代理 - MCP 服务器将在首次使用工具时初始化
	response, err := myAgent.Run(context.Background(), "列出我的 EC2 实例并显示集群中的 Pod")
	if err != nil {
		log.Fatalf("运行代理失败:%v", err)
	}

	fmt.Println("代理响应:", response)
}

立即初始化的 MCP 集成

package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"github.com/Ingenimax/agent-sdk-go/pkg/agent"
	"github.com/Ingenimax/agent-sdk-go/pkg/interfaces"
	"github.com/Ingenimax/agent-sdk-go/pkg/llm/openai"
	"github.com/Ingenimax/agent-sdk-go/pkg/mcp"
	"github.com/Ingenimax/agent-sdk-go/pkg/memory"
	"github.com/Ingenimax/agent-sdk-go/pkg/multitenancy"
)

func main() {
	logger := log.New(os.Stderr, "AGENT: ", log.LstdFlags)

	// 创建 OpenAI LLM 客户端
	apiKey := os.Getenv("OPENAI_API_KEY")
	if apiKey == "" {
		logger.Fatal("请设置 OPENAI_API_KEY 环境变量。")
	}
	llm := openai.NewClient(apiKey, openai.WithModel("gpt-4o-mini"))

	// 创建 MCP 服务器
	var mcpServers []interfaces.MCPServer

	// 连接到基于 HTTP 的 MCP 服务器
	httpServer, err := mcp.NewHTTPServer(context.Background(), mcp.HTTPServerConfig{
		BaseURL: "http://localhost:8083/mcp",
	})
	if err != nil {
		logger.Printf("警告:初始化 HTTP MCP 服务器失败:%v", err)
	} else {
		mcpServers = append(mcpServers, httpServer)
		logger.Println("成功初始化 HTTP MCP 服务器。")
	}

	// 连接到基于 stdio 的 MCP 服务器
	stdioServer, err := mcp.NewStdioServer(context.Background(), mcp.StdioServerConfig{
		Command: "go",
		Args:    []string{"run", "./server-stdio/main.go"},
	})
	if err != nil {
		logger.Printf("警告:初始化 STDIO MCP 服务器失败:%v", err)
	} else {
		mcpServers = append(mcpServers, stdioServer)
		logger.Println("成功初始化 STDIO MCP 服务器。")
	}

	// 创建支持 MCP 服务器的代理
	myAgent, err := agent.NewAgent(
		agent.WithLLM(llm),
		agent.WithMCPServers(mcpServers),
		agent.WithMemory(memory.NewConversationBuffer()),
		agent.WithSystemPrompt("你是一位可以使用 MCP 服务器工具的 AI 助手。"),
		agent.WithName("MCPAgent"),
	)
	if err != nil {
		logger.Fatalf("创建代理失败:%v", err)
	}

	// 创建包含组织和对话 ID 的上下文
	ctx := context.Background()
	ctx = multitenancy.WithOrgID(ctx, "default-org")
	ctx = context.WithValue(ctx, memory.ConversationIDKey, "mcp-demo")

	// 运行将使用 MCP 工具的代理
	response, err := myAgent.Run(ctx, "现在几点了?")
	if err != nil {
		logger.Fatalf("代理运行失败:%v", err)
	}

	fmt.Println("代理响应:", response)
}

架构

该 SDK 采用模块化架构,包含以下关键组件:

  • 代理:协调 LLM、记忆和工具
  • LLM:与语言模型提供商(OpenAI、Anthropic、Google Vertex AI)的接口
  • 记忆:存储对话历史和上下文
  • 工具:扩展代理的能力
  • 向量存储:用于语义搜索和检索
  • 护栏:确保安全且负责任的 AI 使用
  • 执行计划:管理复杂任务的规划、审批和执行
  • 配置:基于 YAML 的代理和任务定义

支持的 LLM 提供商

  • OpenAI:GPT-4、GPT-3.5 及其他 OpenAI 模型
  • Anthropic:Claude 3.5 Sonnet、Claude 3 Haiku 及其他 Claude 模型
  • DeepSeek:DeepSeek-V3.2 对话和推理模型
    • 原生工具/函数调用支持
    • 具有缓存优化的成本效益定价
    • 128K 令牌上下文窗口
    • 推理模式下可生成高达 64K 输出令牌
    • 功能与 OpenAI/Anthropic 完全对等
  • Google Vertex AI:Gemini 1.5 Pro、Gemini 1.5 Flash、Gemini 2.0 Flash 及 Gemini Pro Vision
    • 先进的推理模式(无、最小、全面)
    • 具备视觉模型的多模态能力
    • 函数调用和工具集成
    • 灵活的身份验证方式(ADC 或服务账户文件)
  • Ollama:本地 LLM 服务器,支持多种开源模型
    • 无需外部 API 调用即可在本地运行模型
    • 支持 Llama2、Mistral、CodeLlama 等模型
    • 模型管理功能(列出、拉取、切换模型)
    • 本地处理以降低延迟并保护隐私
  • vLLM:高性能本地 LLM 推理,采用 PagedAttention 技术
    • 针对 CUDA 加速的 GPU 推理进行了优化
    • 高效的内存管理,适用于大型模型
    • 支持 Llama2、Mistral、CodeLlama 等模型
    • 模型管理功能(列出、拉取、切换模型)
    • 本地处理以降低延迟并保护隐私

CLI 工具(无头 SDK)

Agent SDK 包含一个功能强大的命令行界面,可用于无头使用:

CLI 功能

  • 🤖 多模型提供商支持:OpenAI、Anthropic、DeepSeek、Google Vertex AI、Ollama、vLLM
  • 💬 交互式聊天模式:实时对话,具备持久化记忆
  • 📝 任务执行:从 YAML 配置中运行预定义任务
  • 🎨 自动配置:根据简单提示生成智能体配置
  • 🔧 灵活配置:基于 JSON 的配置,并支持环境变量
  • 🛠️ 丰富的工具集成:网络搜索、GitHub、MCP 服务器等
  • 🔌 MCP 服务器管理:添加、列出、移除和测试 MCP 服务器
  • 📄 .env 文件支持:自动加载 .env 文件中的环境变量

CLI 命令

# 初始化配置
agent-cli init

# 使用单个提示运行智能体
agent-cli run "用通俗易懂的语言解释量子计算"

# 直接执行(无需设置)
agent-cli --prompt "2+2 等于多少?"

# 使用 MCP 服务器直接执行
agent-cli --prompt "列出我的 EC2 实例" \
  --mcp-config ./aws_api_server.json \
  --allowedTools "mcp__aws__suggest_aws_commands,mcp__aws__call_aws" \
  --dangerously-skip-permissions

# 执行预定义任务
agent-cli task --agent-config=agents.yaml --task-config=tasks.yaml --task=research_task --topic="AI"

# 启动交互式聊天
agent-cli chat

# 根据系统提示生成配置
agent-cli generate --prompt="你是一名旅游顾问" --output=./configs

# 列出可用资源
agent-cli list providers
agent-cli list models
agent-cli list tools

# 管理配置
agent-cli config show
agent-cli config set provider anthropic

# 管理 MCP 服务器
agent-cli mcp add --type=http --url=http://localhost:8083/mcp --name=my-server
agent-cli mcp list
agent-cli mcp remove --name=my-server

# 从 JSON 配置导入/导出 MCP 服务器
agent-cli mcp import --file=mcp-servers.json
agent-cli mcp export --file=mcp-servers.json

# 使用 MCP 服务器并过滤工具的直接执行
agent-cli --prompt "列出我的 EC2 实例" \
  --mcp-config ./aws_api_server.json \
  --allowedTools "suggest_aws_commands,call_aws" \
  --dangerously-skip-permissions

# 使用 kubectl-ai 进行 Kubernetes 管理
agent-cli --prompt "列出 default 命名空间下的所有 Pod" \
  --mcp-config ./kubectl_ai.json \
  --allowedTools "kubectl" \
  --dangerously-skip-permissions

高级 MCP 功能

CLI 现在支持 动态工具发现灵活的工具过滤

  • 无硬编码工具:MCP 服务器自行定义其工具和架构
  • 动态发现:工具在 MCP 服务器首次初始化时被发现
  • 灵活过滤:使用 --allowedTools 指定可使用的具体工具
  • JSON 配置:从外部 JSON 文件加载 MCP 服务器配置
  • 环境变量:每个 MCP 服务器可以指定自定义环境变量

热门 MCP 服务器:

  • AWS API 服务器:AWS CLI 操作及建议
  • kubectl-ai:通过自然语言管理 Kubernetes 集群
  • 文件系统服务器:文件系统操作与管理
  • 数据库服务器:SQL 查询执行及数据库操作

CLI 文档

完整的 CLI 文档请参阅:CLI README

示例

请查看 cmd/examples 目录以获取完整示例:

  • 简单智能体:带有系统提示的基本智能体
  • YAML 配置:使用 YAML 定义智能体和任务
  • 自动配置:根据系统提示生成智能体配置
  • 智能体配置向导:交互式 CLI,用于创建和使用智能体
  • MCP 集成:将 Model Context Protocol 服务器与智能体结合使用
  • 多 LLM 支持:使用 OpenAI、Azure OpenAI、Anthropic 和 Vertex AI 的示例
  • Vertex AI 集成:包含 Gemini 模型、推理模式和工具的全面示例

LLM 提供商示例

  • examples/llm/openai/:OpenAI 集成示例
  • examples/llm/azureopenai/:基于部署配置的 Azure OpenAI 集成示例
  • examples/llm/anthropic/:Anthropic Claude 集成示例
  • examples/llm/ollama/:本地 Ollama LLM 集成示例
  • examples/llm/vllm/:高性能本地 vLLM 集成示例

Agent GoGo - 快速部署基于本 SDK 的智能体

  • 自行托管或通过我们的 Cloud Gateway 启动您的智能体。访问 https://agentgogo.app 了解更多信息。

许可证

本项目采用 MIT 许可证授权——详情请参阅 LICENSE 文件。

文档

📖 完整文档可在 docs.goagents.dev 查阅

如需更详细的信息,您还可以参考以下文档:

版本历史

v0.2.422026/03/13
v0.2.412026/03/13
v0.2.402026/03/11
v0.2.392026/03/10
v0.2.382026/02/04
v0.2.372026/01/23
v0.2.362026/01/21
v0.2.352026/01/20
v0.2.342026/01/12
v0.2.332026/01/12
v0.2.322026/01/06
v0.2.312025/12/30
v0.2.302025/12/29
v0.2.292025/12/29
v0.2.282025/12/23
v0.2.272025/12/19
v0.2.262025/12/17
v0.2.252025/12/16
v0.2.242025/12/11
v0.2.232025/12/11

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架