grafana/ai-sdk
GitHub: grafana/ai-sdk
该 SDK 为 Go 提供统一的 AI 模型调用 API,支持流式传输、工具调用和多 provider 接入,并与 Vercel AI SDK 的 React 前端协议兼容。
Stars: 159 | Forks: 5

调用语言模型、流式传输响应、执行工具,并从 Go 提供 AI 驱动的 endpoint。可以单独使用该 SDK,或将其与 AI SDK React 前端搭配使用。
[快速开始](#quick-start) · [文档](docs/README.md) · [示例](examples/) · [API 参考](https://pkg.go.dev/github.com/grafana/ai-sdk)
## 为什么选择它
该 SDK 为 Go 应用程序提供了一个统一的 API,支持跨多个受支持的 provider 进行模型调用、流式传输、工具调用、结构化输出和多步 agent。它遵循 [Vercel 的 AI SDK](https://ai-sdk.dev) 的设计,并与其 TypeScript 前端 hooks 保持网络协议兼容。Go endpoint 可以将 Server-Sent Events (SSE) 直接流式传输到 `useChat` 等 hooks。
```
Go backend React frontend
────────── ──────────────
aisdk.StreamText(...) ── SSE ──▶ useChat({ transport })
aisdk.WriteUIMessageStream(w, …) // same protocol
```
请参阅 [请求如何运行](docs/concepts/architecture.md) 以了解生成、工具和流式传输的流程。你可以复用现有的 AI SDK React 前端,或用 Go 替换 TypeScript 后端,而无需添加协议适配器。
## 功能
- **`StreamText` / `GenerateText`** —— 流式传输响应或等待完整结果,支持重试和多步工具执行
- **React 兼容性** —— 支持 `useChat`、`useCompletion` 和 `useObject`
- **可组合工具** —— 从模型中调用原生 Go 函数,并要求对重要操作进行批准
- **结构化输出** —— 生成经过 schema 验证的对象、数组和选项
- **多 provider** —— 从内部服务调用 Anthropic、Amazon Bedrock、OpenAI、兼容 OpenAI 的 API 以及 Grafana 托管的 endpoint
- **生产级控制** —— 配置超时、降级方案、日志记录、Prometheus 指标和 [Agent 可观测性](docs/middleware/agent-observability.md)
## 安装
创建一个 Go 项目并安装核心模块和一个 provider:
```
mkdir ai-sdk-quickstart
cd ai-sdk-quickstart
go mod init example.com/ai-sdk-quickstart
go get github.com/grafana/ai-sdk
go get github.com/grafana/ai-sdk/providers/anthropic
```
有关 Amazon Bedrock、OpenAI、兼容 OpenAI 的 API 以及内部配置的 Grafana 托管 endpoint,请参阅[选择 provider](docs/providers/overview.md)。
## 快速开始
将这个完整的程序保存为 `main.go`。它会进行一次模型调用并打印响应:
```
package main
import (
"context"
"fmt"
"log"
"os"
aisdk "github.com/grafana/ai-sdk"
"github.com/grafana/ai-sdk/provider"
"github.com/grafana/ai-sdk/providers/anthropic"
)
func main() {
apiKey := os.Getenv("ANTHROPIC_API_KEY")
if apiKey == "" {
log.Fatal("ANTHROPIC_API_KEY is required")
}
model := anthropic.New(apiKey, "claude-sonnet-5")
result, err := aisdk.GenerateText(context.Background(), model,
aisdk.WithModelMessages(provider.UserText("Explain goroutines in one sentence.")),
)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Text)
}
```
使用 Anthropic API key 运行它:
```
ANTHROPIC_API_KEY=sk-... go run .
```
有关项目初始化和凭证指南,请遵循[安装说明](docs/getting-started/installation.md)。要将此响应流式传输到 React 客户端,请继续阅读[构建全栈聊天应用](docs/getting-started/full-stack-chat.md)。
## 下一步去向
| 目标 | 从这里开始 |
|---|---|
| 从 Go 发起模型调用 | [从 Go 生成文本](docs/getting-started/backend-only.md) |
| 构建 React 聊天应用 | [全栈聊天应用](docs/getting-started/full-stack-chat.md) |
| 返回有类型的数据 | [结构化输出](docs/guides/structured-output.md) |
| 让模型调用 Go 代码 | [工具](docs/guides/tools.md) |
| 构建可复用的 agent | [Agent 循环](docs/guides/agent-loops.md) |
| 选择模型 provider | [Provider 概览](docs/providers/overview.md) |
| 添加日志或可观测性 | [Middleware 概览](docs/middleware/overview.md) |
| 为生产环境做准备 | [生产环境检查清单](docs/best-practices/production.md) |
完整索引:**[文档](docs/README.md)** · 可运行代码:**[示例](examples/)** · 精确 API:**[pkg.go.dev](https://pkg.go.dev/github.com/grafana/ai-sdk)**
## 贡献
欢迎贡献。[CONTRIBUTING.md](CONTRIBUTING.md) 涵盖了开发环境配置、使本仓库与众不同的两项惯例 —— 与 Vercel AI SDK 保持上游一致性,以及使用 OpenSpec 进行规范驱动开发 —— 以及 pull request 检查清单。所有参与者均需遵守我们的[行为准则](CODE_OF_CONDUCT.md)。
## 许可证
[Apache License 2.0](LICENSE)。该 SDK 遵循 [Vercel 的 AI SDK](https://github.com/vercel/ai) 的设计,后者同样基于 Apache-2.0 许可证;相关署名记录在 [NOTICE](NOTICE) 中。
标签:Agent, DLL 劫持, EVTX分析, Go, Ruby工具, SSE流式输出, Syscall, Web开发, 前端兼容, 大语言模型, 密钥检测, 日志审计, 自定义请求头