Rumah > hujung hadapan web > tutorial js > Carian Dan (LLM) Transformasi

Carian Dan (LLM) Transformasi

DDD
Lepaskan: 2024-09-19 06:22:32
asal
1016 orang telah melayarinya

Search And (LLM) Transform

Artikel ini menunjukkan evolusi ciri "cari dan ganti" daripada editor teks,
di mana langkah "ganti" telah digantikan dengan transformasi LLM.
Contohnya menggunakan GenAISCript.

Adalah berguna untuk menerapkan transformasi teks secara kelompok yang tidak mudah dilakukan dengan
ungkapan biasa.

Sebagai contoh, apabila kami menambah keupayaan untuk menggunakan arahan rentetan dalam
perintah exec, kami perlu menukar semua panggilan menggunakan tatasusunan argumen kepada sintaks baharu ini:

host.exec("cmd", ["arg0", "arg1", "arg2"])
Salin selepas log masuk

kepada

host.exec(`cmd arg0 arg1 arg2`)`
Salin selepas log masuk

Walaupun mungkin untuk memadankan panggilan fungsi ini dengan ungkapan biasa

host\.exec\s*\([^,]+,\s*\[[^\]]+\]\s*\)
Salin selepas log masuk

bukan mudah untuk merumuskan rentetan gantian... melainkan anda boleh menerangkannya dalam bahasa semula jadi:

Convert the call to a single string command shell in TypeScript
Salin selepas log masuk

Berikut ialah beberapa contoh transformasi yang LLM mengendalikan pembolehubah dengan betul.

  • gabungkan argumen panggilan fungsi ke dalam rentetan tunggal
- const { stdout } = await host.exec("git", ["diff"])
+ const { stdout } = await host.exec(`git diff`)
Salin selepas log masuk
  • gabungkan hujah dan gunakan sintaks ${} untuk menginterpolasi pembolehubah
- const { stdout: commits } = await host.exec("git", [
-     "log",
-     "--author",
-     author,
-     "--until",
-     until,
-     "--format=oneline",
- ])
+ const { stdout: commits } = 
+   await host.exec(`git log --author ${author} --until ${until} --format=oneline`)
Salin selepas log masuk

Cari

Langkah carian dilakukan dengan ruang kerja.grep
yang membolehkan anda mencari corak dalam fail dengan cekap (ini adalah enjin carian yang sama
yang memberi kuasa kepada carian Kod Visual Studio).

const { pattern, glob } = env.vars
const patternRx = new RegExp(pattern, "g")
const { files } = await workspace.grep(patternRx, glob)
Salin selepas log masuk

Mengira Transformasi

Langkah kedua ialah menggunakan ungkapan biasa pada kandungan fail
dan prakira transformasi LLM setiap padanan menggunakan gesaan sebaris.

const { transform } = env.vars
...
const patches = {} // map of match -> transformed
for (const file of files) {
    const { content } = await workspace.readText(file.filename)
    for (const match of content.matchAll(patternRx)) {
        const res = await runPrompt(
            (ctx) => {
                ctx.$`
            ## Task

            Your task is to transform the MATCH with the following TRANSFORM.
            Return the transformed text.
            - do NOT add enclosing quotes.

            ## Context
            `
                ctx.def("MATCHED", match[0])
                ctx.def("TRANSFORM", transform)
            },
            { label: match[0], system: [], cache: "search-and-transform" }
        )
        ...
Salin selepas log masuk

Memandangkan LLM kadangkala memutuskan untuk membungkus jawapan dalam petikan, kami perlu mengalih keluarnya.

    ...
    const transformed = res.fences?.[0].content ?? res.text
    patches[match[0]] = transformed
Salin selepas log masuk

Berubah

Akhir sekali, dengan perubahan pra-pengiraan, kami menggunakan penggantian regex akhir kepada
tampal kandungan fail lama dengan rentetan yang diubah.

    const newContent = content.replace(
        patternRx,
        (match) => patches[match] ?? match
    )
    await workspace.writeText(file.filename, newContent)
}
Salin selepas log masuk

Parameter

Skrip mengambil tiga parameter: glob fail, corak untuk dicari dan transformasi LLM untuk digunakan.
Kami mengisytiharkan parameter ini dalam metadata skrip dan mengekstraknya daripada objek env.vars.

script({ ...,
    parameters: {
        glob: {
            type: "string",
            description: "The glob pattern to filter files",
            default: "*",
        },
        pattern: {
            type: "string",
            description: "The text pattern (regular expression) to search for",
        },
        transform: {
            type: "string",
            description: "The LLM transformation to apply to the match",
        },
    },
})
const { pattern, glob, transform } = env.vars
Salin selepas log masuk

Berlari

Untuk menjalankan skrip ini, anda boleh menggunakan pilihan --vars untuk lulus corak dan transformasi.

genaiscript run st --vars 'pattern=host\.exec\s*\([^,]+,\s*\[[^\]]+\]\s*\)' 'transform=Convert the call to a single string command shell in TypeScript'
Salin selepas log masuk

Atas ialah kandungan terperinci Carian Dan (LLM) Transformasi. 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