Genkit for Go 소개: Go에서 확장 가능한 AI 기반 앱 개발

7월 17, 2024
Chris Gill Product Manager
Cameron Balahan Group Product Manager

Google I/O에서 Node.js를 위한 Firebase Genkit을 출시한 후, Firebase 팀과 Go 팀은 Go 커뮤니티에 Genkit을 제공하기 위해 협력했습니다. 뛰어나다고 알려진 Go 언어의 단순성, 확장성, 보안을 활용하여 Go 고유의 방식으로 AI 기반 애플리케이션과 클라우드 서비스를 개발하기 위한 오픈소스 프레임워크인 Genkit for Go를 발표하게 되어 기쁩니다.

개발자는 Go의 성능과 동시 실행 이점을 Genkit의 라이브러리 및 도구와 결합하여 두 기술의 잠재력을 최대한 활용하는 생성형 AI 애플리케이션을 만들 수 있습니다. 몇 가지 가능한 사용 사례는 다음과 같습니다.

  • 사용자의 기본 설정에 맞춰 복잡한 요청을 이해하고 여행 예약이나 여행 일정표 작성과 같은 작업을 자율적으로 실행하는 지능형 어시스턴트.

  • 검색 증강 생성(RAG)을 사용하여 회사의 기술 자료와 정책을 기반으로 빠르고 정확한 맞춤형 응답을 제공하는 고객 지원 담당자.

  • 더욱 심층적인 분석 결과와 유용한 정보를 위해 자연어와 같은 비구조적 데이터를 구조적 형식(SQL 쿼리, 테이블)으로 변환하는 강력한 데이터 변환 도구.

Genkit for Go는 현재 알파 버전으로 제공되므로 실험과 탐색 분석에 매우 적합합니다. AI 기반 프로젝트의 프로토타입을 만들고 의견을 공유해 주시기 바랍니다. 여러분의 의견을 Genkit for Go 로드맵에 바로 반영해 Go 개발자가 프로덕션 환경에서 바로 사용할 수 있고 확장 가능한 차세대 AI 애플리케이션을 개발할 수 있도록 지원하겠습니다.


AI 생성, 검색, 워크플로를 위한 직관적인 라이브러리

Genkit는 AI 기반 애플리케이션 개발을 위한 개발자 우선 프레임워크입니다. 순수 Go로 작성된 Go 라이브러리는 Go 언어의 관용구와 규칙을 포괄하므로 Go 개발자가 곧바로 익숙하게 사용하면서 생산성을 발휘할 수 있습니다. Genkit는 사용자 지정 기능과 제어 기능을 희생하지 않고도 정교한 AI 워크플로 개발을 단순화하는 가볍고 구성 가능한 추상화를 제공합니다.

생성형 AI 애플리케이션 개발 시 Genkit로 생산성을 높이는 몇 가지 방법을 소개합니다.

  • 통합 생성 API: 일관된 단일 인터페이스를 사용하여 다양한 모델(Gemini, Gemma 또는 타사 모델)에서 콘텐츠를 생성합니다. 손쉽게 모델을 구성하고 함수 호출 및 구조적 출력과 같은 강력한 기능을 활용할 수 있습니다.

  • 네이티브 벡터 데이터베이스 지원: 벡터 데이터베이스 공급자 전반에 걸쳐 작동하는 간단한 인덱싱 및 검색 API로 검색 증강 생성(RAG)을 애플리케이션에 통합하여 AI 모델이 컨텍스트를 인식하도록 만들어 보세요.

  • AI 워크플로를 위한 'flow': Genkit 'flow'를 사용하여 다단계 AI 워크플로를 구성합니다. Flow는 디버깅과 모니터링을 위한 기본 제공 관측 가능성, Genkit 도구와의 통합, 최소한의 상용구를 사용하여 HTTP 엔드포인트에 쉽게 배포하는 능력을 제공하는 기능입니다.
func main() {
    ctx := context.Background()
 
    // Google AI 플러그인을 초기화합니다.
    if err := googleai.Init(ctx, nil); err != nil {
        log.Fatal(err)
    }
 
    // LLM이 메뉴 추천 항목을 생성하도록 요청하는 간단한 flow를 정의합니다.
    // Flow는 Genkit 도구와 통합되고 다단계 워크플로에 대한
    // 관측 가능성을 제공하는 기능입니다.
    genkit.DefineFlow("menuSuggestionFlow", func(ctx context.Context, input string) (string, error) {
 
        // Google AI에서 gemini-1.5-flash 모델을 초기화합니다.
        m := googleai.Model("gemini-1.5-flash")
        if m == nil {
            return "", errors.New("menuSuggestionFlow: failed to find model")
        }
 
        // 요청을 구성하여 모델 API(Google AI)로 보냅니다.
        resp, err := m.Generate(ctx,
            ai.NewGenerateRequest(
                &ai.GenerationCommonConfig{Temperature: 1},
                ai.NewUserTextMessage(fmt.Sprintf(`Suggest an item for the menu of a %s themed restaurant`, input))),
            nil)
        if err != nil {
            return "", err
        }
 
        // 모델 API의 응답을 처리합니다.
        text, err := resp.Text()
        if err != nil {
            return "", fmt.Errorf("menuSuggestionFlow: %v", err)
        }
        return text, nil
    })
 
    // Genkit flow 서버를 초기화합니다.
    if err := genkit.Init(ctx, nil); err != nil {
        log.Fatal(err)
    }
}

향상된 프롬프트 엔지니어링 및 관리

최고의 AI 생성 결과를 달성하려면 모델, 구성, 프롬프트, 출력 형태를 신중하게 고려해야 합니다. Genkit는 프롬프트 엔지니어링 프로세스를 간소화하는 간단한 파일 형식인 Dotprompt를 제공합니다.

Dotprompt를 사용하면 단일 .prompt 파일 내에서 다채로운 프롬프트 템플릿, 입출력 스키마, 모델 선택 및 모델 구성 옵션을 모두 정의할 수 있습니다. 덕분에 모든 것을 체계적으로 정리할 수 있으므로 Go 코드와 함께 프롬프트의 테스트, 버전 관리, 배포를 수월하게 수행할 수 있습니다.

---
model: vertexai/gemini-1.5-pro
config:
  temperature: 0.9
input:
  schema:
    location: string
    style?: string
    name?: string
  default:
    location: a restaurant
---
 
귀하는 세계에서 가장 친절한 AI 비서이며 현재 {{location}}에서 근무 중입니다.
 
{{style}}{{/if}} 스타일로 이름이 {{name}}{{/if}}{{#if style}}인 {{#if name}} 게스트를 맞이하세요.

Google 및 타사 AI 서비스 통합

Genkit for Go의 핵심은 공급자에 구애받지 않는 가벼운 프레임워크입니다. Google은 Google 및 타사 공급자의 특정 모델, 벡터 데이터베이스, 클라우드 서비스와 원활하게 통합할 수 있도록 다양한 플러그인을 제공하며 이러한 플러그인의 규모는 점점 커지고 있습니다.

이번 버전에서는 Genkit for Go가 다음 플러그인을 제공합니다.

  • Google Cloud Vertex AI 플러그인: Google Cloud의 프로덕션 지원 AI 플랫폼인 Vertex AI에서 Gemini 및 삽입 모델에 액세스할 수 있습니다. Google의 이미지 생성 모델, 평가 프로그램, Model Garden의 타사 모델에 대한 지원이 곧 제공될 예정입니다.

  • Ollama 플러그인: Ollama를 통해 로컬에서 Gemma, Llama, Mistral 등의 오픈소스 모델에 액세스하고 실행할 수 있습니다.

  • Pinecone 플러그인: 효율적인 인덱싱 및 검색 작업을 위해 Pinecone의 벡터 데이터베이스와 통합할 수 있습니다.

  • Google Cloud 원격 분석 플러그인: 포괄적인 모니터링을 위해 AI 기반 앱에서 Cloud Logging, Cloud Tracing, Firestore로 로그, 측정항목, 트레이스를 내보낼 수 있습니다.

Genkit의 플러그인 시스템은 모든 모델, 벡터 데이터베이스, 평가 프로그램, 도구 등에 개방적이고 확장 가능하도록 설계되었습니다. 커뮤니티에서 자체 플러그인을 게시하여 Genkit의 생태계에 공헌해 주실 것을 적극 권장합니다.

곧 Google 설명서에 Genkit for Go 플러그인 개발 가이드를 추가할 예정이니 기대해 주세요!


통합 개발자 도구 세트

AI 기반 앱 개발에는 효과적인 프롬프트 작성, 예측 불가능한 출력 디버깅, 검색 프로세스 최적화 등의 고유한 과제가 수반됩니다. 일반적인 IDE 유틸리티를 뛰어넘는 전용 도구 세트를 통해 이러한 복잡성을 효과적으로 다룰 수 있다고 생각합니다.

Genkit의 CLI와 직관적인 브라우저 기반 개발자 UI는 간편하게 생성형 AI를 개발할 수 있는 강력한 툴킷을 제공합니다.

이러한 도구로 다음을 수행할 수 있습니다.

  • 새 Genkit 프로젝트를 빠르게 초기화하거나 Genkit를 기존 프로젝트에 통합할 수 있습니다.

  • Genkit 구성요소 전용 실험 환경에서 AI 워크플로, 프롬프트, 검색 쿼리 등을 대화형으로 실행하고 반복할 수 있습니다.

  • 실행하는 워크플로와 구성요소에 대한 자세한 트레이스와 메타데이터를 확인하여 완전한 관측 가능성과 효율적인 디버깅을 제공할 수 있습니다.

  • 테스트 세트와 비교하여 AI 워크플로를 평가하고 점수가 매겨지는 측정항목과 관련 트레이스로 연결되는 링크를 볼 수 있습니다.

VS Code 또는 Project IDX 내에서 작업하고 싶다면 IDE의 통합 브라우저에서 Genkit 개발자 UI를 열고 코드와 나란히 사용할 수 있습니다.


프로덕션 관측 가능성

배포할 준비가 되면 Genkit는 프로덕션 환경에서 AI 기반 애플리케이션을 모니터링하여 사용자에게 예상대로 제공되는지 확인하는 데 도움을 줍니다. Genkit의 Google Cloud 원격 분석 플러그인을 사용하면 AI 기반 앱에서 Google Cloud의 운영 제품군으로 로그, 측정항목, 트레이스를 쉽게 내보낼 수 있습니다.

image1

Google은 Google Cloud 통합을 즉시 제공하는 한편, 널리 사용되는 OpenTelemetry 표준을 통해 Genkit의 계측을 구현했습니다. 이 표준은 인기 있는 많은 관측 가능성 플랫폼과 통합될 수 있습니다.


시작하기

현재 알파 버전으로 제공되는 Genkit for Go를 사용하여 AI 워크플로를 애플리케이션에 통합하고 성장하는 Go AI 개발자 커뮤니티에 참여할 수 있습니다.

시작하려면 Genkit for Go 시작하기 가이드를 확인해 보세요.

IDX의 사전 구성된 작업공간에서 Genkit 템플릿을 열 수도 있습니다.

여러분과의 협력을 간절히 원합니다!

  • Genkit Discord 서버를 통해 Genkit 팀과 직접 소통하고 공지 사항을 살펴보고 궁금한 점을 물어보고 경험담도 나눠 보세요.

  • 토론 포럼의 Show and Tell 섹션에서 Genkit로 개발한 결과물을 공유하세요.

함께 Go에서 AI의 발전을 위해 번창하는 생태계를 구축해 봅시다. Genkit로 무엇을 개발하실지 정말 기대됩니다!