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 许可证。