Prompt

La manipolazione dei prompt è il modo principale in cui, in qualità di sviluppatore di app, puoi influenzare l'output dei modelli di IA generativa. Ad esempio, quando utilizzi gli LLM, puoi creare prompt che influiscono sul tono, sul formato, sulla lunghezza e su altre caratteristiche delle risposte dei modelli.

Genkit è progettato sulla premessa che i prompt sono codice. Scrivi e scrivi mantenere i prompt nei file di origine, tenere traccia delle modifiche utilizzando la stessa versione di controllo che utilizzi per il codice e ne eseguirai il deployment insieme al codice che chiama i tuoi modelli di IA generativa.

La maggior parte degli sviluppatori troverà che la libreria Dotprompt inclusasoddisfa le proprie esigenze di utilizzo dei prompt in Genkit. Tuttavia, un'alternativa sono supportati anche lavorando direttamente con i prompt.

Definizione dei prompt

Le funzioni di assistenza alla generazione di Genkit accettano prompt di stringa e puoi chiamare i modelli in questo modo per casi d'uso semplici.

genkit.Generate(context.Background(), g,
	ai.WithModel(model),
	ai.WithTextPrompt("You are a helpful AI assistant named Walt."))

Nella maggior parte dei casi, dovrai includere nel prompt alcuni input forniti dall'utente. Puoi definire una funzione per visualizzarli come segue:

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 := genkit.GenerateText(context.Background(), g,
	ai.WithModel(model),
	ai.WithMessages(ai.NewUserMessage(helloPrompt("Fred"))))

Tuttavia, un aspetto negativo della definizione di prompt nel codice è che i test richiedono di eseguirli come parte di un flusso. Per facilitare l'iterazione più rapida, Genkit offre una struttura per definire i tuoi prompt ed eseguirli nell'UI per sviluppatori.

Utilizza la funzione DefinePrompt per registrare i tuoi prompt in Genkit.

type HelloPromptInput struct {
	UserName string
}
helloPrompt := genkit.DefinePrompt(
	g,
	"prompts",
	"helloPrompt",
	nil, // Additional model config
	jsonschema.Reflect(&HelloPromptInput{}),
	func(ctx context.Context, input any) (*ai.ModelRequest, 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.ModelRequest{Messages: []*ai.Message{
			{Content: []*ai.Part{ai.NewTextPart(prompt)}},
		}}, nil
	},
)

Un'azione prompt definisce una funzione che restituisce GenerateRequest, che possono essere utilizzate con qualsiasi modello. Se vuoi, puoi anche definire uno schema di input per il prompt, analogo a quello di un flusso. I prompt possono anche definire qualsiasi opzione di configurazione del modello comune, come la temperatura o il numero di token di output.

Puoi visualizzare questo prompt in una richiesta di modello con la funzione di assistenza fornita. Fornisci le variabili di input previste dal prompt e il modello da chiamare.

request, err := helloPrompt.Render(context.Background(), HelloPromptInput{UserName: "Fred"})
if err != nil {
	return err
}
response, err := genkit.GenerateWithRequest(context.Background(), g, model, request, nil, nil, nil)

Nell'interfaccia utente di Genkit Developer, puoi eseguire qualsiasi prompt che hai definito in questo modo. Ciò ti consente di sperimentare singoli prompt al di fuori dell'ambito dei flussi in cui possono essere utilizzati.

Richiesta punto

Genkit include la libreria Dotprompt, che aggiunge funzionalità aggiuntive ai prompt.

  • Caricamento dei prompt dai file di origine .prompt
  • Modelli basati su manubri
  • Supporto di modelli di prompt in più passaggi e contenuti multimediali
  • Definizioni concise degli schemi di input e output
  • Utilizzo ottimale con generate()