Manipulacja promptami to główna metoda wpływu deweloperów aplikacji z modeli generatywnej AI. Na przykład przy użyciu modeli LLM można tworzyć które wpływają na ton, format, długość i inne cechy odpowiedzi modeli.
Usługa Genkit opiera się na założeniu, że prompty są kodem. Ty piszesz i Utrzymanie promptów w plikach źródłowych, śledzenie w nich zmian za pomocą tej samej wersji w systemie operacyjnym, z którego korzystasz w przypadku kodu, i który jest wdrażany wraz z kodem które wywołuje modele generatywnej AI.
Większość deweloperów znajdzie w dołączonej bibliotece Dotprompt spełnia potrzeby w zakresie pracy z promptami w Genkit. Natomiast alternatywna są również obsługiwane, jeśli chodzi o bezpośrednią pracę z promptami.
Definiowanie promptów
Funkcje pomocnicze generowania w Genkit akceptują prompty w postaci ciągów znaków. Możesz w ten sposób używać w prostych przypadkach użycia.
ai.Generate(context.Background(), model, ai.WithTextPrompt("You are a helpful AI assistant named Walt."))
W większości przypadków musisz w prompcie uwzględnić dane wejściowe użytkownika. Możesz zdefiniować funkcję renderowania w ten sposób:
func helloPrompt(name string) *ai.Part {
prompt := fmt.Sprintf("You are a helpful AI assistant named Walt. Say hello to %s.", name)
return ai.NewTextPart(prompt)
}
response, err := ai.GenerateText(context.Background(), model,
ai.WithMessages(ai.NewUserMessage(helloPrompt("Fred"))))
Mają jednak wady definiowania promptów w kodzie: testy wymagają wykonywania. jako część przepływu pracy. Aby przyspieszyć iterację, Genkit udostępnia placówkę , aby zdefiniować prompty i uruchomić je w interfejsie dewelopera.
Za pomocą funkcji DefinePrompt
możesz rejestrować prompty w Genkit.
type HelloPromptInput struct {
UserName string
}
helloPrompt := ai.DefinePrompt(
"prompts",
"helloPrompt",
nil, // Additional model config
jsonschema.Reflect(&HelloPromptInput{}),
func(ctx context.Context, input any) (*ai.GenerateRequest, error) {
params, ok := input.(HelloPromptInput)
if !ok {
return nil, errors.New("input doesn't satisfy schema")
}
prompt := fmt.Sprintf(
"You are a helpful AI assistant named Walt. Say hello to %s.",
params.UserName)
return &ai.GenerateRequest{Messages: []*ai.Message{
{Content: []*ai.Part{ai.NewTextPart(prompt)}},
}}, nil
},
)
Działanie związane z promptem definiuje funkcję, która zwraca GenerateRequest
,
której można używać z dowolnym modelem. Opcjonalnie możesz też zdefiniować schemat danych wejściowych
dla promptu, który jest związany ze schematem wejściowym przepływu.
Prompty mogą też definiować dowolne typowe opcje konfiguracji modelu, takie jak
temperatury lub liczby tokenów wyjściowych.
Możesz renderować ten prompt w żądaniu modelu za pomocą udostępnionej funkcji pomocniczej. Podaj zmienne wejściowe oczekiwane w prompcie oraz model do wywołania.
request, err := helloPrompt.Render(context.Background(), HelloPromptInput{UserName: "Fred"})
if err != nil {
return err
}
response, err := model.Generate(context.Background(), request, nil)
W interfejsie użytkownika aplikacji Genkit możesz uruchamiać dowolne prompty zdefiniowane w ten sposób. Dzięki temu możesz eksperymentować z poszczególnymi promptami spoza zakresu sposoby ich wykorzystania.
Kropka
Genkit zawiera bibliotekę Dotprompt, która dodaje do promptów.
- Wczytuję prompty z
.prompt
plików źródłowych - Szablony oparte na paskach kierownicy
- Obsługa szablonów promptów wieloetapowych i treści multimedialnych
- Zwięzłe definicje schematu danych wejściowych i wyjściowych
- Swobodne korzystanie z platformy
generate()