Aller au contenu
A flat, 8-bit style digital illustration in 128x128 format, featuring a central desktop screen made of basic geometric shapes. On the screen: simple rectangles represent code blocks; a speech bubble, resembling a chatbot, stands out in the center; a gear icon indicates settings; stacked file icons represent documents. Overlaying these is a concurrency diagram made of up to 8 interlinked dots or squares, visually capping the series. A line motif subtly branches or loops to depict networked or concurrent processes. The palette uses only five corporate colors, and all components remain minimal, with no people, text, background designs, or shading effects.

Invite intégrées

AI generated translation.

La fonction prompt ou runPrompt permet de construire une invocation interne de LLM. Elle retourne le résultat de l’invite.

Play

prompt est une simplification syntaxique pour runPrompt qui utilise un littéral de chaîne de caractères comme texte d’invite.

const { text } = await prompt`Write a short poem.`

Vous pouvez passer une fonction à runPrompt prenant un seul argument _, qui est le générateur d’invite. Il utilise les mêmes aides comme $, def, mais s’applique à l’invite interne.

const { text } = await runPrompt((_) => {
// use def, $ and other helpers
_.def("FILE", file)
_.$`Summarize the FILE. Be concise.`
})

Vous pouvez également simplifier la fonction et passer directement le texte de l’invite.

const { text } = await runPrompt(
`Select all the image files in ${env.files.map((f) => f.filename)}`
)

Ne mélangez pas les aides globales dans les invites internes

Section intitulée « Ne mélangez pas les aides globales dans les invites internes »

Une erreur fréquente est d’utiliser les aides globales def, $ et autres dans l’invite interne. Ces aides ne sont pas disponibles dans l’invite interne, et vous devez utiliser _.$, _.def et les autres aides spécifiques.

  • pas bien
const { text } = await runPrompt((_) => {
def("FILE", env.files) // oops, _. is missing and def added content in the main prompt
$`Summarize files.` // oops, _ is missing and $ added content in the main prompt
})
  • bien
const { text } = await runPrompt((_) => {
_.def("FILE", env.files) // yes, def added content in the inner prompt
_.$`Summarize the FILE.`
})

Les fonctions prompt et runPrompt prennent en charge diverses options similaires à la fonction script.

const { text } = await prompt`Write a short poem.`.options({ temperature: 1.5 })
const { text } = await runPrompt((_) => { ...}, { temperature: 1.5 })

Vous pouvez utiliser des invites internes dans les outils.

defTool(
"poet",
"Writes 4 line poem about a given theme",
{
theme: {
type: "string",
description: "Theme of the poem",
}
},
(({theme})) => prompt`Write a ${4} line ${"poem"} about ${theme}`
)

Les fonctions prompt et runPrompt sont des fonctions asynchrones qui peuvent être utilisées dans une boucle pour exécuter plusieurs invites simultanément.

await Promise.all(env.files, (file) => prompt`Summarize the ${file}`)

En interne, GenAIScript applique une limite de concurrence par modèle de 8 par défaut. Vous pouvez modifier cette limite en utilisant l’option modelConcurrency.

script({
...,
modelConcurrency: {
"openai:gpt-4o": 20
}
})

Si vous avez besoin de plus de contrôle sur les files d’attente concurrentes, vous pouvez essayer p-all, p-limit ou des bibliothèques similaires.

Si vos scripts appellent uniquement des invites intégrées et ne génèrent jamais l’invite principale, vous pouvez les configurer pour utiliser le fournisseur LLM none. Cela empêchera GenAIScript d’essayer de résoudre les informations de connexion et générera une erreur si vous essayez de créer des invites dans l’exécution principale.

script({
model: "none",
})

Exemple : Résumé des résumés de fichiers utilisant Phi-3

Section intitulée « Exemple : Résumé des résumés de fichiers utilisant Phi-3 »

L’extrait ci-dessous utilise Phi-3 via Ollama pour résumer individuellement les fichiers avant de les ajouter à l’invite principale.

script({
model: "small",
files: "src/rag/*",
tests: {
files: ["src/rag/*"],
keywords: ["markdown", "lorem", "microsoft"],
},
})
if (!env.files.length) throw new Error("No files found")
// summarize each files individually
for (const file of env.files) {
const { text } = await runPrompt(
(_) => {
_.def("FILE", file)
_.$`Extract keywords for the contents of FILE.`
},
{ model: "small", cache: "summary_summary" }
)
def("FILE", { ...file, content: text })
}
// use summary
$`Extract keywords for the contents of FILE.`