Communitygithub.com

sultanfariz/gonostic

一个轻量级的 Go 语言 LLM 智能体框架,支持自带 (BYO) LLM 提供商。

gonostic 是什么?

**gonostic** 是一个轻量级的 LLM 智能体框架,完全使用 Go 语言构建。它提供了一种灵活且可扩展的方式来构建基于 LLM 的应用程序,核心设计理念是模块化和开发者易用性。该框架的核心特性是“自带 LLM 提供商”(BYO),意味着你可以自由选择并集成任何你喜欢的 LLM 服务(如 OpenAI、Anthropic、本地模型等),而不受限于特定厂商。这为需要定制化或对延迟、成本有严格要求的场景提供了极大的灵活性。gonostic 利用 Go 的并发特性和高性能,确保智能体能够高效地处理任务。该框架支持标准的工具调用和任务编排,适合构建自动化工作流、聊天机器人和复杂推理系统。虽然它不像 Python 生态那样有丰富的现成库,但 Go 的编译效率和部署便利性使其成为生产环境的理想选择。gonostic 目前未明确限定的平台,但由于 Go 的特性,它可以轻松部署在任何支持 Go 的平台上。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add sultanfariz/gonostic

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

gonostic 是做什么的?

一个轻量级的 Go 语言 LLM 智能体框架,支持自带 (BYO) LLM 提供商。

概述

gonostic 提供了一个简洁而强大的抽象层,用于构建和编排 LLM 智能体。其核心设计围绕以下几个方面:

  • 模块化: 智能体由可交换的组件构成,如 LLM 模型、工具和内存。
  • BYO LLM: 你可以通过实现标准接口,自由地接入任何 LLM 提供商(OpenAI、Anthropic、Google Gemini、Ollama 等)。
  • Go 原生: 利用 Go 语言的 goroutine 和 channel,实现高效的并发任务处理和流式响应。
  • 类型安全: Go 的静态类型系统有助于在编译时捕获错误,降低运行时风险。

快速开始

要开始使用 gonostic,你需要在项目根目录创建一个 .env 文件并设置你的 API 密钥。以下是一个示例:

OPENAI_API_KEY=你的_openai_api_key

然后构建并运行:

go build -o gonostic
./gonostic

核心概念

  • Agent: 代表一个智能体,它管理一个 LLM 实例、一组可用工具和对话历史。
  • LLM Provider: 负责与具体的 LLM API 交互的适配器。
  • Tool: 智能体可以调用以执行特定任务的函数。例如,搜索网络、查询数据库或执行代码。
  • Task: 定义智能体要完成的目标或指令。
  • Memory: 维护对话上下文,使智能体能够引用之前的交互。

配置

gonostic 主要通过环境变量进行配置。关键变量包括:

  • OPENAI_API_KEY: 你的 OpenAI API 密钥(如果使用 OpenAI)。
  • ANTHROPIC_API_KEY: 你的 Anthropic API 密钥(如果使用 Anthropic 模型)。
  • 其他提供商的密钥。

你还可以通过代码动态配置,例如:

agent, err := gonostic.NewAgent(
    gonostic.WithLLMProvider(myCustomProvider),
    gonostic.WithTools(myTools),
    gonostic.WithMemory(myMemory),
)

示例

以下是一个使用内置 OpenAI 提供程序创建简单智能体的示例:

package main

import (
    "context"
    "fmt"
    "log"
    "github.com/sultanfariz/gonostic"
    "github.com/sultanfariz/gonostic/provider/openai"
)

func main() {
    ctx := context.Background()
    
    llm := openai.NewProvider()
    agent := gonostic.NewAgent(llm)
    
    response, err := agent.Run(ctx, "Who created the Go programming language?")
    if err != nil {
        log.Fatal(err)
    }
    
    fmt.Println(response)
}

自定义 LLM 提供商

要实现自定义 LLM 提供商,你需要满足 LLMProvider 接口:

type LLMProvider interface {
    Name() string
    Generate(ctx context.Context, prompt string, opts ...GenerationOption) (*GenerationResult, error)
}

之后,你可以像使用内置提供商一样使用自定义提供商。

贡献

欢迎贡献!请查看 CONTRIBUTING.md 了解更多信息。

许可证

本项目采用 MIT 许可证。

相关技能