"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Comprometimentos do GenAI Git

Comprometimentos do GenAI Git

Publicado em 12/09/2024
Navegar:744

GenAI Git Commits

Gerar uma mensagem de commit do git rapidamente se tornou um aplicativo GenAI clássico para desenvolvedores.

Para ajudar com isso, criaremos um script GenAIScript.

O script atua como um script de automação node.js normal e usa runPrompt
para emitir chamadas para o LLM e solicitar ao usuário a confirmação do texto gerado.

? Explicando o roteiro

O script começa importando as funções necessárias de @inquirer/prompts:

import { select, input, confirm } from "@inquirer/prompts"

Essas funções serão utilizadas para interagir com o usuário, solicitando que ele confirme ações ou insira dados.

Em seguida, verificamos se há alguma alteração preparada no repositório Git:

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

Se nenhuma alteração for testada, perguntamos ao usuário se ele deseja testar todas as alterações. Se o usuário confirmar, preparamos todas as alterações. Caso contrário, nós resgatamos.

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

Geramos uma mensagem de commit inicial usando as alterações preparadas:

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

A configuração do prompt acima indica que a mensagem deve ser concisa,
relacionado à saída "git diff --cached" e não deve incluir aspas.

O usuário escolhe como proceder com a mensagem gerada:

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

São fornecidas opções para editar ou regenerar a mensagem. Se o usuário optar por editar a mensagem, pedimos que ele insira uma nova mensagem:

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

Se o usuário optar por enviar a mensagem, nós confirmamos as alterações:

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

? Executando o script

Você pode executar este script usando a CLI.

genaiscript run gcm

Como ele usa o pacote @inquirer/prompts, você precisará instalar este pacote primeiro:

npm install --save-dev @inquirer/prompts

Se você estiver usando npx,

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

Este comando executará o script e guiará você através do processo de geração e commit de uma mensagem Git usando IA, tornando seus commits mais informativos e consistentes.

Você pode agrupar este comando em um arquivo gcm.sh ou na seção de script do pacote em package.json:

{
    "devDependencies": {
        "@inquirer/prompts": "...",
        "genaiscript": "..."
    },
    "scripts": {
        "gcm": "genaiscript run gcm"
    }
}

Então você pode executar o script usando:

npm run gcm

Agradecimentos

Este script foi inspirado no gerador de mensagens de commit do Karpathy.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/pelikhan/genai-git-commits-38m5?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3