Firebase Genkit는 LLM으로 콘텐츠를 생성할 수 있는 간편한 인터페이스를 제공합니다.
모델
Firebase Genkit의 모델은 다양한 Google 및 타사 LLM에 대해 살펴보겠습니다
모델은 관측 가능성을 위해 완전히 계측되고 도구와 함께 제공됩니다. 통합하지 않아도 됩니다. 모델 실행기입니다.
Genkit에서 모델을 사용할 때는 먼저 커스텀 모델을 선택할 수 있습니다 모델 구성은 플러그인 시스템에서 수행합니다. 포함 이 예시에서는 Gemini를 제공하는 Vertex AI 플러그인을 구성합니다. 모델을 학습시키는 작업도 반복해야 합니다
Go
import "github.com/firebase/genkit/go/ai"
import "github.com/firebase/genkit/go/plugins/vertexai"
// Default to the value of GCLOUD_PROJECT for the project,
// and "us-central1" for the location.
// To specify these values directly, pass a vertexai.Config value to Init.
if err := vertexai.Init(ctx, nil); err != nil {
return err
}
플러그인에서 제공하는 모델을 사용하려면 특정 모델에 대한 참조가 필요합니다. 버전:
Go
gemini15pro := vertexai.Model("gemini-1.5-pro")
지원되는 모델
Genkit는 플러그인 시스템을 통해 모델 지원을 제공합니다. 다음 플러그인 공식적으로 지원됩니다.
플러그인 | 모델 |
---|---|
Google 생성형 AI | Gemini Pro, Gemini Pro Vision |
Google Vertex AI | Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2 |
올라마 | Gemma, Llama 2, Mistral 등 다양한 로컬 모델 |
설정 및 사용 정보는 각 플러그인의 문서를 참조하세요.
콘텐츠 생성 방법
Genkit는 모델로 콘텐츠를 생성하는 간단한 도우미 함수를 제공합니다.
모델을 호출하기만 하면 됩니다.
Go
request := ai.GenerateRequest{Messages: []*ai.Message{
{Content: []*ai.Part{ai.NewTextPart("Tell me a joke.")}},
}}
response, err := gemini15pro.Generate(ctx, &request, nil)
if err != nil {
return err
}
responseText, err := response.Text()
if err != nil {
return err
}
fmt.Println(responseText)
모델 호출과 함께 옵션을 전달할 수 있습니다. 지원되는 옵션 모델 및 API에 따라 다릅니다
Go
request := ai.GenerateRequest{
Messages: []*ai.Message{
{Content: []*ai.Part{ai.NewTextPart("Tell me a joke about dogs.")}},
},
Config: ai.GenerationCommonConfig{
Temperature: 1.67,
StopSequences: []string{"abc"},
MaxOutputTokens: 3,
},
}
스트리밍 응답
Genkit는 모델 응답의 청크 스트리밍을 지원합니다.
Go
분할된 스트리밍을 사용하려면 Generate()
에 콜백 함수를 전달합니다.
request := ai.GenerateRequest{Messages: []*ai.Message{
{Content: []*ai.Part{ai.NewTextPart("Tell a long story about robots and ninjas.")}},
}}
response, err := gemini15pro.Generate(
ctx,
&request,
func(ctx context.Context, grc *ai.GenerateResponseChunk) error {
text, err := grc.Text()
if err != nil {
return err
}
fmt.Printf("Chunk: %s\n", text)
return nil
})
if err != nil {
return err
}
// You can also still get the full response.
responseText, err := response.Text()
if err != nil {
return err
}
fmt.Println(responseText)
멀티모달 입력
모델이 멀티모달 입력을 지원하는 경우 이미지 프롬프트를 전달할 수 있습니다.
Go
imageBytes, err := os.ReadFile("img.jpg")
if err != nil {
return err
}
encodedImage := base64.StdEncoding.EncodeToString(imageBytes)
request := ai.GenerateRequest{Messages: []*ai.Message{
{Content: []*ai.Part{
ai.NewTextPart("Describe the following image."),
ai.NewMediaPart("", "data:image/jpeg;base64,"+encodedImage),
}},
}}
gemini15pro.Generate(ctx, &request, nil)
이미지 프롬프트의 정확한 형식 (https
URL, gs
URL, data
URI)은 다음과 같습니다.
의존하지 않습니다.
함수 호출 (도구)
Genkit 모델은 있습니다.
Go
myJoke := &ai.ToolDefinition{
Name: "myJoke",
Description: "useful when you need a joke to tell",
InputSchema: make(map[string]any),
OutputSchema: map[string]any{
"joke": "string",
},
}
ai.DefineTool(
myJoke,
nil,
func(ctx context.Context, input map[string]any) (map[string]any, error) {
return map[string]any{"joke": "haha Just kidding no joke! got you"}, nil
},
)
request := ai.GenerateRequest{
Messages: []*ai.Message{
{Content: []*ai.Part{ai.NewTextPart("Tell me a joke.")},
Role: ai.RoleUser},
},
Tools: []*ai.ToolDefinition{myJoke},
}
response, err := gemini15pro.Generate(ctx, &request, nil)
그러면 사용자 프롬프트를 처리하기 위해 도구가 자동으로 호출됩니다.
메시지 기록 기록 중
Genkit 모델은 모델로 전송된 메시지의 기록 유지 관리를 지원합니다. 이러한 정보를 바탕으로 다음과 같은 양방향 환경을 구축하는 데 사용할 수 있습니다. 챗봇
Go
세션의 첫 번째 프롬프트에서 '기록'은 사용자 프롬프트입니다.
history := []*ai.Message{{
Content: []*ai.Part{ai.NewTextPart(prompt)},
Role: ai.RoleUser,
}}
request := ai.GenerateRequest{Messages: history}
response, err := gemini15pro.Generate(context.Background(), &request, nil)
응답을 받으면 기록에 추가합니다.
history = append(history, response.Candidates[0].Message)
이 기록을 직렬화하여 데이터베이스 또는 세션 스토리지에 유지할 수 있습니다.
이후 사용자 메시지가 표시되면 호출하기 전에 기록에 추가합니다.
Generate()
:
history = append(history, &ai.Message{
Content: []*ai.Part{ai.NewTextPart(prompt)},
Role: ai.RoleUser,
})
request = ai.GenerateRequest{Messages: history}
response, err = gemini15pro.Generate(ctx, &request, nil)
사용 중인 모델이 시스템 역할을 지원하는 경우 기록을 사용하여 시스템 메시지를 설정합니다.
Go
history = []*ai.Message{{
Content: []*ai.Part{ai.NewTextPart("Talk like a pirate.")},
Role: ai.RoleSystem,
}}