Aufforderungen

Die Manipulation von Prompts ist die primäre Methode, die Ergebnisse von generativen KI-Modellen. Bei der Verwendung von LLMs können Sie beispielsweise Prompts, die den Ton, das Format, die Länge und andere Eigenschaften die Antworten der Modelle.

Genkit basiert auf der Prämisse, dass Prompts Code sind. Sie schreiben und verwalten Ihre Prompts in Quelldateien, verfolgen Änderungen daran mit demselben Versionskontrollsystem, das Sie für Ihren Code verwenden, und stellen sie zusammen mit dem Code bereit, der Ihre generativen KI-Modelle aufruft.

Die meisten Entwickler werden feststellen, dass die enthaltene Dotprompt-Bibliothek ihre Anforderungen an die Arbeit mit Prompts in Genkit erfüllt. Alternativ können Sie durch direktes Arbeiten mit Prompts unterstützt.

Prompts definieren

Die Genkit-Hilfsfunktionen zur Generierung akzeptieren Zeichenfolgen-Prompts und Sie können können Modelle für unkomplizierte Anwendungsfälle aufgerufen werden.

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

In den meisten Fällen müssen Sie einige von Nutzern bereitgestellte Eingaben in Ihren Prompt aufnehmen. Sie könnten eine Funktion definieren, um sie wie folgt zu rendern:

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"))))

Ein Nachteil beim Definieren von Eingabeaufforderungen in Ihrem Code besteht jedoch darin, dass beim Testen als Teil eines Ablaufs. Für eine schnellere Iteration bietet Genkit die Möglichkeit, Prompts zu definieren und in der Entwickler-UI auszuführen.

Verwenden Sie die Funktion DefinePrompt, um Ihre Prompts bei Genkit zu registrieren.

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
	},
)

Eine Prompt-Aktion definiert eine Funktion, die ein GenerateRequest zurückgibt. der mit jedem Modell verwendet werden kann. Optional können Sie auch ein Eingabeschema für den Prompt definieren, das dem Eingabeschema für einen Ablauf entspricht. Prompts können auch alle gängigen Modellkonfigurationsoptionen definieren, z. B. Temperatur oder Anzahl der Ausgabetokens.

Sie können diesen Prompt mit der bereitgestellten Hilfsfunktion in eine Modellanfrage rendern. Geben Sie die für den Prompt erwarteten Eingabevariablen und das aufzurufende Modell an.

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)

In der Genkit Developer-Benutzeroberfläche können Sie jeden Prompt ausführen, den Sie auf diese Weise definiert haben. So können Sie mit einzelnen Prompts experimentieren, in denen sie verwendet werden könnten.

Punktaufforderung

Genkit enthält die Dotprompt-Bibliothek, die Prompts zusätzliche Funktionen hinzufügt.

  • Prompts werden aus .prompt Quelldatei geladen
  • Auf Lenker-Seiten basierende Vorlagen
  • Unterstützung für Promptvorlagen mit mehreren Prompts und Multimediainhalte
  • Komprimierte Definitionen von Eingabe- und Ausgabeschemata
  • Nahtlose Nutzung mit generate()