developing-genkit-go은(는) 무엇을 하나요?
Genkit을 사용하여 Go로 AI 기반 애플리케이션을 개발합니다. 사용자가 Genkit을 이용한 Go 기반 AI 기능, 에이전트, 플로우 또는 도구 생성을 요청하거나, 생성, 프롬프트, 스트리밍, 도구 호출, 모델 제공자를 포함하는 Genkit Go 코드 작업 시 사용합니다.
개요
Genkit는 Google이 개발한 오픈소스 프레임워크로, Go 언어로 AI 기반 애플리케이션을 구축할 때 사용합니다. 이 스킬은 Genkit Go SDK 작업 시 안내를 제공합니다.
주요 개념
- Flows (플로우): Genkit 애플리케이션의 핵심 단위로, 프롬프트, 도구 호출, 데이터 처리를 결합한 함수입니다. 플로우는 관찰 가능성(observability)과 오류 처리를 내장하고 있습니다.
- Models (모델): Genkit은 Google Generative AI (
googleAI), Vertex AI (vertexAI), Ollama (ollama) 등 여러 모델 제공자를 지원합니다. - Tools (도구): AI 모델이 외부 API, 데이터베이스 또는 함수를 호출할 수 있게 해주는 함수입니다.
- Prompts (프롬프트): Genkit은 프롬프트 템플릿을 지원하며, Dotprompt 형식을 사용하여 프롬프트를 정의하고 관리할 수 있습니다.
- Streaming (스트리밍): 부분적인 출력 청크를 실시간으로 스트리밍하여 사용자에게 점진적인 응답을 제공합니다.
설치 및 설정
전제 조건
- Go 1.22 이상
- Genkit CLI (선택 사항이지만 권장):
go install github.com/firebase/genkit-tools/cmd/genkit-cli@latest
프로젝트 초기화
go mod init my-genkit-app
Genkit Go 패키지 설치
go get github.com/firebase/genkit/go/ai
go get github.com/firebase/genkit/go/plugins/googleai
go get github.com/firebase/genkit/go/plugins/vertexai
go get github.com/firebase/genkit/go/plugins/ollama
go get github.com/firebase/genkit/go/flow
기본 사용 예
간단한 생성 호출
package main
import (
"context"
"fmt"
"log"
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit"
"github.com/firebase/genkit/go/plugins/googleai"
)
func main() {
ctx := context.Background()
// 환경 변수 GOOGLE_API_KEY 설정 필요
g, err := genkit.Init(ctx, genkit.WithPlugins(&googleai.GoogleAI{}))
if err != nil {
log.Fatal(err)
}
model := googleai.Model(g, "gemini-2.0-flash")
resp, err := ai.Generate(ctx, model, ai.WithTextPrompt("인공지능에 대한 농담을 해줘"))
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.Text())
}
도구가 있는 플로우
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
"net/url"
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit"
"github.com/firebase/genkit/go/plugins/googleai"
)
// 날씨 도구 정의
type WeatherInput struct {
Location string `json:"location"`
}
var weatherTool = ai.DefineTool(
"getWeather",
"지정된 위치의 현재 날씨를 가져옵니다",
func(ctx context.Context, input WeatherInput) (string, error) {
// 실제 구현에서는 날씨 API 호출
return fmt.Sprintf("%s의 날씨: 맑음, 22°C", input.Location), nil
},
)
func main() {
ctx := context.Background()
g, err := genkit.Init(ctx,
genkit.WithPlugins(&googleai.GoogleAI{}),
genkit.WithTools(weatherTool),
)
if err != nil {
log.Fatal(err)
}
model := googleai.Model(g, "gemini-2.0-flash")
resp, err := ai.Generate(ctx, model,
ai.WithTextPrompt("서울의 날씨는 어떤가요?"),
)
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.Text())
}
스트리밍을 포함한 플로우
package main
import (
"context"
"fmt"
"log"
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit"
"github.com/firebase/genkit/go/plugins/googleai"
)
func main() {
ctx := context.Background()
g, err := genkit.Init(ctx, genkit.WithPlugins(&googleai.GoogleAI{}))
if err != nil {
log.Fatal(err)
}
model := googleai.Model(g, "gemini-2.0-flash")
// 스트리밍 호출
stream, resp, err := ai.GenerateStream(ctx, model,
ai.WithTextPrompt("1부터 10까지 숫자 세기"),
)
if err != nil {
log.Fatal(err)
}
// 부분 청크 처리
for chunk := range stream {
fmt.Print(chunk.Text())
}
// 최종 응답 처리
fmt.Println()
fmt.Println("최종 응답:", resp.Text())
}
모델 제공자 설정
Google Generative AI (Gemini)
환경 변수 설정:
export GOOGLE_API_KEY="your-api-key"
Vertex AI (Google Cloud)
export GCLOUD_PROJECT="your-project-id"
export GOOGLE_APPLICATION_CREDENTIALS="path/to/service-account-key.json"
Ollama (로컬 모델)
# Ollama 설치 후 실행
export OLLAMA_HOST="http://localhost:11434"
ollama pull llama3.2
Genkit CLI 사용하기
Genkit CLI는 개발자 UI와 디버깅 기능을 제공합니다:
genkit start -- go run main.go
그러면 http://localhost:4000에서 Genkit 개발자 UI에 접속할 수 있습니다.
모범 사례
- 플로우 분리: 각각의 AI 기능을 별도의 플로우로 캡슐화합니다.
- 오류 처리: 플로우 내에서 오류 처리와 폴백(fallback)을 구현합니다.
- 프롬프트 템플릿:
.prompt파일 또는DefinePrompt()를 사용하여 프롬프트를 별도 파일로 관리합니다. - 도구 검증: 입력 스키마를 정의하여 도구에 전달되는 데이터를 검증합니다.
- 스트리밍: 긴 응답의 경우 사용자 경험 향상을 위해 스트리밍을 사용합니다.
- 환경 변수: API 키와 설정을 코드베이스에 하드코딩하지 않고 환경 변수를 사용합니다.