Prompt Engineering adalah cara utama yang Anda, sebagai developer aplikasi, memengaruhi output model AI generatif. Misalnya, saat menggunakan LLM, Anda dapat membuat prompt yang memengaruhi nada, format, panjang, dan karakteristik lainnya dari respons model.
Genkit dirancang berdasarkan premis bahwa prompt adalah kode. Anda menulis dan mempertahankan prompt dalam file sumber, melacak perubahannya menggunakan sistem kontrol versi yang sama dengan yang Anda gunakan untuk kode, dan men-deploy-nya bersama dengan kode yang memanggil model AI generatif.
Genkit memiliki alat komprehensif untuk mengembangkan perintah kompleks yang disebut Dotprompt. Lihat dokumentasi tersebut untuk daftar lengkap fitur.
Dokumen ini menunjukkan beberapa cara penggunaan perintah di Genkit, mulai dari yang paling sederhana hingga yang lebih kompleks.
Menentukan prompt
Fungsi bantuan generate()
Genkit menerima perintah string, dan Anda dapat
memanggil model dengan cara ini untuk kasus penggunaan yang mudah.
import { generate } from '@genkit-ai/ai';
generate({
model: 'googleai/gemini-1.5-flash-latest',
prompt: 'You are a helpful AI assistant named Walt. Say hello.',
});
Dalam beberapa kasus, Anda perlu menyertakan beberapa input yang diberikan pelanggan dalam perintah Anda. Anda dapat menggunakan literal template untuk merendernya seperti ini:
const name = "Fred";
generate({
model: 'googleai/gemini-1.5-flash-latest',
prompt: `You are a helpful AI assistant named Walt. Say hello to ${name}.`,
});
Namun, Genkit menyediakan cara untuk menentukan perintah Anda dalam format standar yang memfasilitasi pembuatan template dan pengujian cepat yang lebih canggih di UI Developer.
Gunakan fungsi defineDotprompt
untuk menentukan prompt terstruktur ini.
import { defineDotprompt } from '@genkit-ai/dotprompt'
import z from 'zod';
const helloPrompt = defineDotprompt(
{
name: 'helloPrompt',
model: 'googleai/gemini-1.5-flash-latest',
input: {
schema: z.object({ name: z.string() }),
},
},
`You are a helpful AI assistant named Walt. Say hello to {{name}}`
);
Kemudian, panggil perintah menggunakan metode generate()
:
helloPrompt.generate({ input: { name: 'Fred' } });
// Example output: Hello Fred! 👋 It's nice to meet you. How can I help you today? 😊
Seperti yang ditunjukkan di atas, perintah yang ditentukan dengan cara ini dapat menentukan input terstruktur yang diterima melalui konfigurasi input.schema
. Hal ini memungkinkan Anda memiliki cara yang aman untuk memastikan bahwa perintah hanya dapat dipanggil dengan kumpulan input yang valid.
Dotprompt juga dapat menentukan output, yang akan diteruskan untuk dipanggil ke LLM sebagai perintah (baik sebagai pesan dalam konteks atau sebagai parameter API untuk LLM yang mendukung mode output terstruktur). Hal ini menjamin bahwa Anda akan mendapatkan respons yang sesuai, atau pengecualian yang dapat Anda tangani dengan baik.
const outputSchema = z.object({
short: z.string(),
friendly: z.string(),
likeAPirate: z.string(),
});
const threeGreetingsPrompt = defineDotprompt(
{
name: 'threeGreetingsPrompt',
model: 'googleai/gemini-1.5-flash-latest',
input: {
schema: z.object({ name: z.string() }),
},
output: {
format: 'json',
schema: outputSchema,
},
},
`You are a helpful AI assistant named Walt. Say hello to {{name}}, write a response for each of the styles requested`
);
Anda kemudian dapat memanggil generate
pada perintah tersebut dan menggunakan output terstruktur dalam respons:
const response = await (threeGreetingsPrompt.generate<typeof outputSchema>(
{ input: { name: 'Fred' } }
));
response.output()?.likeAPirate
// "Ahoy there, Fred! May the winds be ever in your favor!"
Di UI Developer Genkit, Anda dapat menjalankan prompt apa pun yang telah ditentukan dengan cara ini. Dengan demikian, Anda dapat bereksperimen dengan setiap dialog di luar cakupan tempat dalam kode Anda yang mungkin menggunakannya.
Dotprompt
Lihat halaman Dotprompt untuk mengetahui fitur library Dotprompt lainnya, termasuk
- Memuat prompt dari file sumber
.prompt
- Template berbasis handlebar
- Dukungan untuk template propmt multi-turn dan konten multimedia
- Definisi skema input dan output yang ringkas