Rumah > hujung hadapan web > tutorial js > GenAI Git Commits

GenAI Git Commits

WBOY
Lepaskan: 2024-08-28 06:08:33
asal
1001 orang telah melayarinya

GenAI Git Commits

Menjana mesej komit git dengan pantas menjadi aplikasi GenAI klasik untuk pembangun.

Untuk membantu perkara ini, kami akan mencipta skrip GenAIScript.

Skrip bertindak sebagai skrip automasi node.js biasa dan menggunakan runPrompt
untuk mengeluarkan panggilan kepada LLM dan meminta pengguna mengesahkan teks yang dijana.

? Menjelaskan Skrip

Skrip bermula dengan mengimport fungsi yang diperlukan daripada @inquirer/prompts:

import { select, input, confirm } from "@inquirer/prompts"
Salin selepas log masuk

Fungsi ini akan digunakan untuk berinteraksi dengan pengguna, meminta mereka mengesahkan tindakan atau memasukkan data.

Seterusnya, kami menyemak sama ada terdapat sebarang perubahan berperingkat dalam repositori Git:

let { stdout } = await host.exec("git", ["diff", "--cached"])
Salin selepas log masuk

Jika tiada perubahan berperingkat, kami bertanya kepada pengguna jika mereka mahu melakukan semua perubahan. Jika pengguna mengesahkan, kami peringkat semua perubahan. Jika tidak, kami menyelamatkan diri.

    const stage = await confirm({
        message: "No staged changes. Stage all changes?",
        default: true,
    })
    if (stage) {
        await host.exec("git", ["add", "."])
        stdout = (await host.exec("git", ["diff", "--cached"])).stdout
    }
    if (!stdout) cancel("no staged changes")
Salin selepas log masuk

Kami menjana mesej komit awal menggunakan perubahan berperingkat:

message = (
    await runPrompt(
        (_) => {
            _.def("GIT_DIFF", stdout, { maxTokens: 20000 })
            _.$`GIT_DIFF is a diff of all staged changes, coming from the command:
\`\`\`
git diff --cached
\`\`\`
Please generate a concise, one-line commit message for these changes.
- do NOT add quotes`
        },
        { cache: false, temperature: 0.8 }
    )
).text
Salin selepas log masuk

Konfigurasi segera di atas menunjukkan bahawa mesej harus ringkas,
berkaitan dengan keluaran "git diff --cached" dan tidak harus menyertakan petikan.

Pengguna memilih cara untuk meneruskan dengan mesej yang dijana:

    choice = await select({
        message,
        choices: [
            { name: "commit", value: "commit", description: "accept message and commit" },
            ...
        ],
    })
Salin selepas log masuk

Pilihan diberikan untuk mengedit atau menjana semula mesej. Jika pengguna memilih untuk mengedit mesej, kami meminta mereka memasukkan mesej baharu:

    if (choice === "edit") {
        message = await input({
            message: "Edit commit message",
            required: true,
        })
        choice = "commit"
    }
Salin selepas log masuk

Jika pengguna memilih untuk menghantar mesej, kami melakukan perubahan:

    if (choice === "commit" && message) {
        console.log((await host.exec("git", ["commit", "-m", message])).stdout)
    }
Salin selepas log masuk

? Menjalankan Skrip

Anda boleh menjalankan skrip ini menggunakan CLI.

genaiscript run gcm
Salin selepas log masuk

Memandangkan ia menggunakan pakej @inquirer/prompts, anda perlu memasang pakej ini terlebih dahulu:

npm install --save-dev @inquirer/prompts
Salin selepas log masuk

Jika anda menggunakan npx,

npx -p @inquirer/prompts genaiscript -p genaiscript  -- genaiscript run gcm
Salin selepas log masuk

Arahan ini akan menjalankan skrip dan membimbing anda melalui proses menjana dan melakukan mesej Git menggunakan AI, menjadikan komitmen anda lebih bermaklumat dan konsisten.

Anda boleh membungkus arahan ini dalam fail gcm.sh atau dalam bahagian skrip pakej anda dalam package.json:

{
    "devDependencies": {
        "@inquirer/prompts": "...",
        "genaiscript": "..."
    },
    "scripts": {
        "gcm": "genaiscript run gcm"
    }
}
Salin selepas log masuk

Kemudian anda boleh menjalankan skrip menggunakan:

npm run gcm
Salin selepas log masuk

Ucapan terima kasih

Skrip ini diilhamkan daripada penjana mesej komit Karpathy.

Atas ialah kandungan terperinci GenAI Git Commits. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan