GenAIScript

Official

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • Enables execution of code in Docker containers, allowing LLMs to run isolated code environments for data processing or computation tasks.

  • Provides video processing capabilities including transcription and frame extraction to prepare video content for LLM analysis.

  • Allows querying and analyzing repository data using Git tools, enabling statistical analysis of commits and other Git operations.

GenAIScript

La incitación es codificación

Ensamble programáticamente indicaciones para LLM con JavaScript. Organice LLM, herramientas y datos en código.


Hola Mundo

Supongamos que desea crear un guion LLM que genere un poema de "Hola mundo". Puede escribir el siguiente guion:

$`Write a 'hello world' poem.`

La función $ es una etiqueta de plantilla que crea una propuesta. Esta propuesta se envía al LLM (que usted configuró), que genera el poema.

Hagámoslo más interesante añadiendo archivos, datos y una salida estructurada. Supongamos que quieres incluir un archivo en el prompt y luego guardar la salida en un archivo. Puedes escribir el siguiente script:

// read files const file = await workspace.readText("data.txt") // include the file content in the prompt in a context-friendly way def("DATA", file) // the task $`Analyze DATA and extract data in JSON in data.json.`

La función def incluye el contenido del archivo y lo optimiza, si es necesario, para el LLM de destino. El script GenAIScript también analiza la salida del LLM y extrae el archivo data.json automáticamente.


🚀 Guía de inicio rápido

Comience rápidamente instalando la extensión de Visual Studio Code o utilizando la línea de comandos .


✨ Características

JavaScript y TypeScript estilizados

Cree indicaciones mediante programación utilizando JavaScript o TypeScript .

def("FILE", env.files, { endsWith: ".pdf" }) $`Summarize FILE. Today is ${new Date()}.`

🚀 Bucle de desarrollo rápido

Edite, depure , ejecute y pruebe sus scripts en Visual Studio Code o con la línea de comandos .


🔗 Reutilizar y compartir scripts

¡Los scripts son archivos ! Se pueden versionar, compartir y bifurcar.

// define the context def("FILE", env.files, { endsWith: ".pdf" }) // structure the data const schema = defSchema("DATA", { type: "array", items: { type: "string" } }) // assign the task $`Analyze FILE and extract data to JSON using the ${schema} schema.`

📋 Esquemas de datos

Definir, validar y reparar datos mediante esquemas . Compatibilidad con Zod integrada.

const data = defSchema("MY_DATA", { type: "array", items: { ... } }) $`Extract data from files using ${data} schema.`

📄 Ingerir texto desde archivos PDF, DOCX, ...

Manipular archivos PDF , DOCX , ...

def("PDF", env.files, { endsWith: ".pdf" }) const { pages } = await parsers.PDF(env.files[0])

📊 Ingerir tablas desde CSV, XLSX, ...

Manipular datos tabulares desde CSV , XLSX , ...

def("DATA", env.files, { endsWith: ".csv", sliceHead: 100 }) const rows = await parsers.CSV(env.files[0]) defData("ROWS", rows, { sliceHead: 100 })

📝 Generar archivos

Extraiga archivos y compare la salida de LLM. Previsualice los cambios en la interfaz de refactorización.

$`Save the result in poem.txt.`
FILE ./poem.txt The quick brown fox jumps over the lazy dog.

🔍 Búsqueda de archivos

Buscar archivos mediante grep o fuzz.

const { files } = await workspace.grep(/[a-z][a-z0-9]+/, { globs: "*.md" })

Clasificar

Clasifica texto, imágenes o una mezcla de todo.

const joke = await classify( "Why did the chicken cross the road? To fry in the sun.", { yes: "funny", no: "not funny", } )

Herramientas LLM

Registrar funciones de JavaScript como herramientas (con respaldo para modelos que no las admiten). También se admiten las herramientas del Protocolo de Contexto de Modelo (MCP) .

defTool( "weather", "query a weather web api", { location: "string" }, async (args) => await fetch(`https://weather.api.api/?location=${args.location}`) )

Agentes de LLM

Registre las funciones de JavaScript como herramientas y combine herramientas + indicaciones en agentes.

defAgent( "git", "Query a repository using Git to accomplish tasks.", `Your are a helpful LLM agent that can use the git tools to query the current repository. Answer the question in QUERY. - The current repository is the same as github repository.`, { model, system: ["system.github_info"], tools: ["git"] } )

luego úsalo como herramienta

script({ tools: "agent_git" }) $`Do a statistical analysis of the last commits`

Vea el código fuente del agente git .


🔍 RAG Incorporado

Búsqueda de vectores .

const { files } = await retrieval.vectorSearch("cats", "**/*.md")

🐙 Modelos de GitHub y GitHub Copilot

Ejecute modelos a través de GitHub Models o GitHub Copilot .

script({ ..., model: "github:gpt-4o" })

💻 Modelos locales

Ejecute sus scripts con modelos de código abierto , como Phi-3 , usando Ollama , LocalAI .

script({ ..., model: "ollama:phi3" })

🐍 Intérprete de código

Deje que LLM ejecute el código en un entorno de ejecución aislado.

script({ tools: ["python_code_interpreter"] })

🐳 Contenedores

Ejecutar código en contenedores Docker.

const c = await host.container({ image: "python:alpine" }) const res = await c.exec("python --version")

Procesamiento de vídeo

Transcribe y captura capturas de pantalla de tus videos para que puedas alimentarlos de manera eficiente en tus solicitudes de LLM.

// transcribe const transcript = await transcript("path/to/audio.mp3") // screenshots at segments const frames = await ffmpeg.extractFrames("path_url_to_video", { transcript }) def("TRANSCRIPT", transcript) def("FRAMES", frames)

Composición de LLM

Ejecute LLMs para crear sus indicaciones LLM.

for (const file of env.files) { const { text } = await runPrompt((_) => { _.def("FILE", file) _.$`Summarize the FILE.` }) def("SUMMARY", text) } $`Summarize all the summaries.`

🅿️ Soporte rápido

¡Ejecuta también tus archivos Prompty !

--- name: poem --- Write me a poem

Escaneo secreto conectable

Escanea tus chats en busca de secretos usando el escaneo de secretos .

{ "secretPatterns": { ..., "OpenAI API Key": "sk-[A-Za-z0-9]{32,48}" } }

⚙ Automatizar con CLI o API

Automatizar utilizando la CLI o API .

npx genaiscript run tlaplus-linter "*.tla"
import { run } from "genaiscript/api" const res = await run("tlaplus-linter", "*.tla")

¡Seguridad ante todo!

GenAIScript proporciona indicaciones integradas del sistema de IA responsable y Azure Content Safety admite la validación de la seguridad del contenido .

script({ ..., system: ["system.safety_harmful_content", ...], contentSafety: "azure" // use azure content safety }) const safety = await host.contentSafety() const res = await safety.detectPromptInjection(env.vars.input)

💬 Reseñas de solicitudes de extracción

Intégralo en tus comprobaciones de solicitudes de extracción mediante comentarios, revisiones o actualizaciones de descripciones. Compatible con GitHub Actions y canalizaciones de Azure DevOps.

npx genaiscript ... --pull-request-reviews

⭐ Pruebas y evaluaciones

Cree indicaciones confiables utilizando pruebas y evaluaciones impulsadas por promptfoo .

script({ ..., tests: { files: "penguins.csv", rubric: "is a data analysis report", facts: "The data refers about penguin population in Antarctica.", }})

Documentos compatibles con LLM

Todo el contenido de la documentación se genera en Markdown en https://microsoft.github.io/genaiscript/llms-full.txt . Introdúzcalo directamente en su sistema RAG preferido.

Si trabajas con LLM, añade el sufijo .md a las URL de la documentación para obtener contenido Markdown sin procesar. Por ejemplo, https://microsoft.github.io/genaiscript/guides/prompt-as-code.md (ten en cuenta la extensión .md).

Contribuyendo

¡Aceptamos contribuciones! Consulta la página de CONTRIBUYENTES para obtener más información y la configuración para desarrolladores.


Marcas comerciales

Este proyecto puede contener marcas comerciales o logotipos de proyectos, productos o servicios. El uso autorizado de las marcas comerciales o logotipos de Microsoft está sujeto a las Directrices de Marcas Registradas y de Marca de Microsoft y debe cumplirlas. El uso de marcas comerciales o logotipos de Microsoft en versiones modificadas de este proyecto no debe causar confusión ni implicar patrocinio por parte de Microsoft. El uso de marcas comerciales o logotipos de terceros está sujeto a las políticas de dichos terceros.

ID: 4pijmyi7gc