embedchain es un marco para crear fácilmente bots con tecnología LLM sobre cualquier conjunto de datos. embedchainjs es la versión Javascript de embedchain. Si desea una versión de Python, consulte embedchain-python
Programe una sesión de comentarios con Taranjeet, el fundador, para discutir cualquier problema, brindar comentarios o explorar mejoras.
Resume todo el proceso de carga del conjunto de datos, fragmentarlo, crear incrustaciones y luego almacenarlo en una base de datos vectorial.
Puede agregar un conjunto de datos único o múltiple usando las funciones .add
y .addLocal
y luego usar la función .query
para encontrar una respuesta de los conjuntos de datos agregados.
Si desea crear un bot de Naval Ravikant que tenga 2 de sus publicaciones de blog, así como un par de preguntas y respuestas que usted proporcione, todo lo que necesita hacer es agregar los enlaces a las publicaciones de blog y el par QnA y la cadena integrada crearán un robot para ti.
const dotenv = require ( "dotenv" ) ;
dotenv . config ( ) ;
const { App } = require ( "embedchain" ) ;
//Run the app commands inside an async function only
async function testApp ( ) {
const navalChatBot = await App ( ) ;
// Embed Online Resources
await navalChatBot . add ( "web_page" , "https://nav.al/feedback" ) ;
await navalChatBot . add ( "web_page" , "https://nav.al/agi" ) ;
await navalChatBot . add (
"pdf_file" ,
"https://navalmanack.s3.amazonaws.com/Eric-Jorgenson_The-Almanack-of-Naval-Ravikant_Final.pdf"
) ;
// Embed Local Resources
await navalChatBot . addLocal ( "qna_pair" , [
"Who is Naval Ravikant?" ,
"Naval Ravikant is an Indian-American entrepreneur and investor." ,
] ) ;
const result = await navalChatBot . query (
"What unique capacity does Naval argue humans possess when it comes to understanding explanations or concepts?"
) ;
console . log ( result ) ;
// answer: Naval argues that humans possess the unique capacity to understand explanations or concepts to the maximum extent possible in this physical reality.
}
testApp ( ) ;
npm
npm install embedchain && npm install -S openai@^3.3.0
Actualmente, sólo es compatible con openai 3.X, no con la última versión 4.X. Asegúrese de utilizar la versión correcta; de lo contrario, verá el error ChromaDB
TypeError: OpenAIApi.Configuration is not a constructor
Asegúrese de que el paquete dotenv esté instalado y su OPENAI_API_KEY
en un archivo llamado .env
en la carpeta raíz. Puedes instalar dotenv por
npm install dotenv
Descargue e instale Docker en su dispositivo visitando este enlace. Lo necesitará para ejecutar la base de datos vectorial Chroma en su máquina.
Ejecute los siguientes comandos para configurar el contenedor Chroma en Docker
git clone https://github.com/chroma-core/chroma.git
cd chroma
docker-compose up -d --build
Usamos el modelo de incrustación de OpenAI para crear incrustaciones para fragmentos y la API ChatGPT como LLM para obtener respuestas dadas los documentos relevantes. Asegúrese de tener una cuenta OpenAI y una clave API. Si no tiene una clave API, puede crear una visitando este enlace.
Una vez que tenga la clave API, configúrela en una variable de entorno llamada OPENAI_API_KEY
// Set this inside your .env file
OPENAI_API_KEY = "sk-xxxx" ;
const dotenv = require ( "dotenv" ) ;
dotenv . config ( ) ;
App
desde embedchain y use la función .add
para agregar cualquier conjunto de datos..query
para obtener la respuesta a cualquier consulta. const dotenv = require ( "dotenv" ) ;
dotenv . config ( ) ;
const { App } = require ( "embedchain" ) ;
async function testApp ( ) {
const navalChatBot = await App ( ) ;
// Embed Online Resources
await navalChatBot . add ( "web_page" , "https://nav.al/feedback" ) ;
await navalChatBot . add ( "web_page" , "https://nav.al/agi" ) ;
await navalChatBot . add (
"pdf_file" ,
"https://navalmanack.s3.amazonaws.com/Eric-Jorgenson_The-Almanack-of-Naval-Ravikant_Final.pdf"
) ;
// Embed Local Resources
await navalChatBot . addLocal ( "qna_pair" , [
"Who is Naval Ravikant?" ,
"Naval Ravikant is an Indian-American entrepreneur and investor." ,
] ) ;
const result = await navalChatBot . query (
"What unique capacity does Naval argue humans possess when it comes to understanding explanations or concepts?"
) ;
console . log ( result ) ;
// answer: Naval argues that humans possess the unique capacity to understand explanations or concepts to the maximum extent possible in this physical reality.
}
testApp ( ) ;
const { App : EmbedChainApp } = require ( "embedchain" ) ;
// or
const { App : ECApp } = require ( "embedchain" ) ;
Admitimos los siguientes formatos:
Para agregar cualquier archivo pdf, use el tipo de datos como pdf_file
. P.ej:
await app . add ( "pdf_file" , "a_valid_url_where_pdf_file_can_be_accessed" ) ;
Para agregar cualquier página web, use el tipo de datos como web_page
. P.ej:
await app . add ( "web_page" , "a_valid_web_page_url" ) ;
Para proporcionar su propio par QnA, use data_type como qna_pair
e ingrese una tupla. P.ej:
await app . addLocal ( "qna_pair" , [ "Question" , "Answer" ] ) ;
Antes de consumir tokens valiosos, debe asegurarse de que la incrustación que ha realizado funcione y de que reciba el documento correcto de la base de datos.
Para ello puedes utilizar el método dryRun
.
Siguiendo el ejemplo anterior, agregue esto a su script:
let result = await naval_chat_bot . dryRun ( "What unique capacity does Naval argue humans possess when it comes to understanding explanations or concepts?" ) ; console . log ( result ) ;
'' '
Use the following pieces of context to answer the query at the end. If you don' t know the answer , just say that you don 't know, don' t try to make up an answer .
terms of the unseen . And I think that’s critical . That is what humans do uniquely that no other creature , no other computer , no other intelligence—biological or artificial—that we have ever encountered does . And not only do we do it uniquely , but if we were to meet an alien species that also had the power to generate these good explanations , there is no explanation that they could generate that we could not understand . We are maximally capable of understanding . There is no concept out there that is possible in this physical reality that a human being , given sufficient time and resources and
Query : What unique capacity does Naval argue humans possess when it comes to understanding explanations or concepts ?
Helpful Answer :
'' '
Se confirma que la incrustación funciona como se esperaba. Devuelve el documento correcto, incluso si la pregunta se formula de forma ligeramente diferente. No se han consumido tokens de aviso.
El ensayo seguirá consumiendo tokens para insertar su consulta, pero es solo ~1/15 del mensaje.
Para crear un bot de chat sobre cualquier conjunto de datos es necesario seguir los siguientes pasos
Cada vez que un usuario realiza una consulta, se realiza el siguiente proceso para encontrar la respuesta a la consulta.
El proceso de cargar el conjunto de datos y luego consultar implica varios pasos y cada paso tiene sus propios matices.
Estas preguntas pueden ser triviales para algunos, pero para muchos de nosotros se necesita investigación, experimentación y tiempo para encontrar las respuestas precisas.
embedchain es un marco que se ocupa de todos estos matices y proporciona una interfaz sencilla para crear bots sobre cualquier conjunto de datos.
En la primera versión, hacemos que sea más fácil para cualquiera tener un chatbot sobre cualquier conjunto de datos listo y funcionando en menos de un minuto. Todo lo que necesita hacer es crear una instancia de aplicación, agregar los conjuntos de datos usando la función .add
y luego usar la función .query
para obtener la respuesta relevante.
embedchain se basa en la siguiente pila:
Si utiliza este repositorio, considere citarlo con:
@misc{embedchain,
author = {Taranjeet Singh},
title = {Embechain: Framework to easily create LLM powered bots over any dataset},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/embedchain/embedchainjs}},
}