Rumah  >  Artikel  >  hujung hadapan web  >  GenAI Git Commits

GenAI Git Commits

WBOY
WBOYasal
2024-08-28 06:08:33970semak imbas

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"

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

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

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

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" },
            ...
        ],
    })

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

Jika pengguna memilih untuk menghantar mesej, kami melakukan perubahan:

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

? Menjalankan Skrip

Anda boleh menjalankan skrip ini menggunakan CLI.

genaiscript run gcm

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

npm install --save-dev @inquirer/prompts

Jika anda menggunakan npx,

npx -p @inquirer/prompts genaiscript -p genaiscript  -- genaiscript run gcm

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

Kemudian anda boleh menjalankan skrip menggunakan:

npm run gcm

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!

Kenyataan:
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