Advertencia
JS Agent fue una biblioteca temprana para probar ideas y ya no se desarrolla activamente. Consulte Modelfusion: una biblioteca de IA más general para TypeScript que incorpore mis aprendizajes de JS Agent.
JS Agent es un marco composible y extensible para crear agentes de IA con JavaScript y TypeScript.
Si bien crear un prototipo de agente es fácil, aumentar su confiabilidad y robustez es compleja y requiere una experimentación considerable. JS Agent proporciona bloques de construcción y herramientas robustos para ayudarlo a desarrollar agentes sólidos de roca más rápido.
Tutorial
Un agente que tiene acceso a un motor de búsqueda de Wikipedia y puede leer artículos de Wikipedia. Puede usarlo para responder preguntas sobre el contenido de Wikipedia.
Características utilizadas: gpt-3.5-turbo
, Herramientas personalizadas (búsqueda de wikipedia, lea el artículo de Wikipedia), genere el siguiente bucle de paso, controlador de ejecución de pasos máximos
Un agente de desarrolladores automatizado que funciona en un contenedor Docker. Puede leer archivos, escribir archivos y ejecutar comandos. Puede ajustarlo para su proyecto y usarlo para documentar el código, escribir pruebas, actualizar pruebas y características, etc.
Características utilizadas: gpt-4
, ejecución de herramientas en Docker Container, agente con pasos de configuración fijos, múltiples propiedades de ejecución del agente, generar el siguiente bucle de paso, herramientas (archivo de lectura, archivo de escritura, ejecutar, comando, solicitar el usuario), cálculo de costos después de la ejecución del agente
Implementación del agente JS de Babyagi.
Características utilizadas: servidor de agente HTTP, modelo de finalización de texto ( text-davinci-003
), salida de consola personalizada, actualización de tareas de planificación de tareas de planificación
Toma un PDF y un tema y crea un hilo de Twitter con todo el contenido del PDF que sea relevante para el tema.
Características utilizadas: Composición de funciones (sin agente), carga PDF, recurso de extracto dividido
Divide un texto en trozos y genera incrustaciones.
Características utilizadas: llamadas de función directa (sin agente), texto dividido (gpt3-tokenizer), generar incrustaciones
text-davinci-003
etc.)gpt-4
, gpt-3.5-turbo
)text-embedding-ada-002
)Step
y AgentRun
).npm install js-agent
Vea los ejemplos y la documentación para aprender a crear un agente.
import * as $ from "js-agent" ;
const openai = $ . provider . openai ;
export async function runWikipediaAgent ( {
wikipediaSearchKey ,
wikipediaSearchCx ,
openAiApiKey ,
task ,
} : {
openAiApiKey : string ;
wikipediaSearchKey : string ;
wikipediaSearchCx : string ;
task : string ;
} ) {
const searchWikipediaAction = $ . tool . programmableGoogleSearchEngineAction ( {
id : "search-wikipedia" ,
description :
"Search wikipedia using a search term. Returns a list of pages." ,
execute : $ . tool . executeProgrammableGoogleSearchEngineAction ( {
key : wikipediaSearchKey ,
cx : wikipediaSearchCx ,
} ) ,
} ) ;
const readWikipediaArticleAction = $ . tool . extractInformationFromWebpage ( {
id : "read-wikipedia-article" ,
description :
"Read a wikipedia article and summarize it considering the query." ,
inputExample : {
url : "https://en.wikipedia.org/wiki/Artificial_intelligence" ,
topic : "{query that you are answering}" ,
} ,
execute : $ . tool . executeExtractInformationFromWebpage ( {
extract : $ . text . extractRecursively . asExtractFunction ( {
split : $ . text . splitRecursivelyAtToken . asSplitFunction ( {
tokenizer : openai . tokenizer . forModel ( {
model : "gpt-3.5-turbo" ,
} ) ,
maxChunkSize : 2048 , // needs to fit into a gpt-3.5-turbo prompt and leave room for the answer
} ) ,
extract : $ . text . generateText . asFunction ( {
prompt : $ . prompt . extractChatPrompt ( ) ,
model : openai . chatModel ( {
apiKey : openAiApiKey ,
model : "gpt-3.5-turbo" ,
} ) ,
} ) ,
} ) ,
} ) ,
} ) ;
return $ . runAgent < { task : string } > ( {
properties : { task } ,
agent : $ . step . generateNextStepLoop ( {
actions : [ searchWikipediaAction , readWikipediaArticleAction ] ,
actionFormat : $ . action . format . flexibleJson ( ) ,
prompt : $ . prompt . concatChatPrompts (
async ( { runState : { task } } ) => [
{
role : "system" ,
content : `## ROLE
You are an knowledge worker that answers questions using Wikipedia content. You speak perfect JSON.
## CONSTRAINTS
All facts for your answer must be from Wikipedia articles that you have read.
## TASK
${ task } ` ,
} ,
] ,
$ . prompt . availableActionsChatPrompt ( ) ,
$ . prompt . recentStepsChatPrompt ( { maxSteps : 6 } )
) ,
model : openai . chatModel ( {
apiKey : openAiApiKey ,
model : "gpt-3.5-turbo" ,
} ) ,
} ) ,
controller : $ . agent . controller . maxSteps ( 20 ) ,
observer : $ . agent . observer . showRunInConsole ( { name : "Wikipedia Agent" } ) ,
} ) ;
}