Grafana AI SDK for Go: useChat과 바로 붙는 스트리밍·툴 호출 백엔드
Go LLM SDK for streaming, tool-calling AI backends (plus frontend React lib)
TL;DR Highlight
Go 백엔드가 Vercel AI SDK 프로토콜로 React useChat에 SSE를 직접 스트리밍
Who Should Read
Go로 AI 챗 백엔드를 만들면서 React 프론트엔드(useChat)와 별도 어댑터 없이 연결하고 싶은 백엔드 개발자
Core Mechanics
- Go에서 Vercel AI SDK 프론트와 바로 붙는다
- Vercel AI SDK의 TypeScript 프론트엔드 훅과 wire-compatible(통신 규격이 같음)하게 설계됐다.
- Go 엔드포인트가 SSE(Server-Sent Events)를 useChat 같은 훅으로 직접 스트리밍한다.
- 프로토콜 어댑터 없이 백엔드를 교체한다
- 기존 AI SDK React 프론트를 그대로 쓸 수 있다.
- TypeScript 백엔드를 Go로 바꿀 때도 어댑터가 필요 없다고 한다.
- 한 API로 호출·스트리밍·툴·에이전트를 다룬다
- StreamText와 GenerateText로 스트리밍 응답이나 완성된 결과를 받고 재시도와 멀티스텝 툴 실행을 지원한다.
- 스키마 검증된 구조화 출력(객체·배열·선택지)도 만든다.
- 일반 Go 함수를 툴로 부르고 승인도 걸 수 있다
- 모델이 일반 Go 함수를 호출하게 할 수 있다.
- 영향이 큰 작업에는 승인을 요구할 수 있다.
- 프로바이더와 운영 기능을 갖췄다
- Anthropic, Amazon Bedrock, OpenAI, OpenAI 호환 API를 지원한다.
- 타임아웃, 폴백, 로깅, Prometheus 메트릭, Agent Observability를 설정할 수 있다.
Community Reactions
- 이 SDK의 용도를 묻는 질문이 나왔다
- OpenAI API를 직접 호출하면 되는데 굳이 쓸 이유가 뭐냐는 질문이 달렸다.
- 답변으로는 Vercel AI UI SDK와 wire-protocol이 호환되는 Go 백엔드라는 설명이 나왔다.
- SSE 끊김 복구가 빠졌다는 지적
- 끊긴 SSE 연결 뒤 스트림을 이어받는 resumable streaming이나 멀티 디바이스 지원이 없어 아쉽다는 의견이 있었다.
- 이런 SDK는 붙이기는 쉽지만 복원력 있는 시스템을 만들 때 어려워진다는 의견이다.
- 비슷한 SDK와의 비교 요청
- genkit이나 Google ADK와 비교하면 어떤지 궁금하다는 댓글이 달렸다.
- 댓글 작성자가 5개월째 gollem이라는 Go 프로젝트를 만들고 있다고 소개했다.
- AI로 만든 코드인지 의심하는 시각
- 사람이 설계한 것인지 AI 슬롭인지 궁금하다는 의견이 있었다.
- 프로덕션에 패키지를 넣는 데 훨씬 보수적으로 바뀌었다며 나중에 검토해 보겠다고 했다.
How to Apply
- 빠른 시작 예제를 로컬에서 돌려보기
- Go 모듈을 만들고 go get으로 코어와 anthropic 프로바이더를 설치한다.
- ANTHROPIC_API_KEY를 설정하고 GenerateText 예제를 go run으로 실행한다.
- useChat 프론트가 있으면 Go 엔드포인트로 연결 테스트하기
- 기존 AI SDK React 프론트의 transport가 가리키는 URL을 Go 서버로 바꾼다.
- 서버에서는 StreamText 결과를 WriteUIMessageStream으로 SSE에 써서 응답한다.
- 끊김 복구가 필요하면 도입 전에 직접 검증하기
- 스트리밍 중 네트워크를 끊어 재연결 동작을 확인한다.
- 복구가 필요하면 별도 계층 설계를 먼저 정한다.
- 툴에 승인 단계를 걸어 위험 작업 분리하기
- 결제나 삭제처럼 영향이 큰 Go 함수만 승인 필요로 지정한다.
- 조회성 함수는 승인 없이 툴로 노출한다.
Try It
# 터미널에서 실행하는 빠른 시작 (원문 README의 설치·예제 그대로)
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
# 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=sk-... go run .
# 이어서 해 볼 것: 문서의 Build a full-stack chat을 따라 StreamText를 React useChat에 연결Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓