embedchain é uma estrutura para criar facilmente bots com tecnologia LLM em qualquer conjunto de dados. embedchainjs é a versão Javascript do embedchain. Se você quiser uma versão python, dê uma olhada embedchain-python
Agende uma sessão de feedback com Taranjeet, o fundador, para discutir quaisquer problemas, fornecer feedback ou explorar melhorias.
Ele abstrai todo o processo de carregamento do conjunto de dados, fragmentação, criação de embeddings e armazenamento em banco de dados vetorial.
Você pode adicionar um único ou vários conjuntos de dados usando as funções .add
e .addLocal
e, em seguida, usar a função .query
para encontrar uma resposta nos conjuntos de dados adicionados.
Se você deseja criar um bot Naval Ravikant que tenha 2 de suas postagens no blog, bem como um par de perguntas e respostas que você fornece, tudo o que você precisa fazer é adicionar os links para as postagens do blog e o par QnA e o embedchain criarão um robô para você.
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
Atualmente, é compatível apenas com openai 3.X, não com a versão mais recente 4.X. Certifique-se de usar a versão correta, caso contrário você verá o erro ChromaDB
TypeError: OpenAIApi.Configuration is not a constructor
Certifique-se de que o pacote dotenv esteja instalado e seu OPENAI_API_KEY
em um arquivo chamado .env
na pasta raiz. Você pode instalar o dotenv por
npm install dotenv
Baixe e instale o Docker em seu dispositivo visitando este link. Você precisará disso para executar o banco de dados vetorial Chroma em sua máquina.
Execute os seguintes comandos para configurar o contêiner Chroma no Docker
git clone https://github.com/chroma-core/chroma.git
cd chroma
docker-compose up -d --build
Usamos o modelo de incorporação do OpenAI para criar embeddings para pedaços e a API ChatGPT como LLM para obter respostas com base nos documentos relevantes. Certifique-se de ter uma conta OpenAI e uma chave API. Se você não possui uma chave de API, você pode criar uma visitando este link.
Assim que tiver a chave API, defina-a em uma variável de ambiente chamada OPENAI_API_KEY
// Set this inside your .env file
OPENAI_API_KEY = "sk-xxxx" ;
const dotenv = require ( "dotenv" ) ;
dotenv . config ( ) ;
App
do embedchain e use a função .add
para adicionar qualquer conjunto de dados..query
para obter a resposta para qualquer 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" ) ;
Apoiamos os seguintes formatos:
Para adicionar qualquer arquivo PDF, use data_type como pdf_file
. Por exemplo:
await app . add ( "pdf_file" , "a_valid_url_where_pdf_file_can_be_accessed" ) ;
Para adicionar qualquer página da web, use data_type como web_page
. Por exemplo:
await app . add ( "web_page" , "a_valid_web_page_url" ) ;
Para fornecer seu próprio par QnA, use data_type como qna_pair
e insira uma tupla. Por exemplo:
await app . addLocal ( "qna_pair" , [ "Question" , "Answer" ] ) ;
Antes de consumir tokens valiosos, você deve certificar-se de que a incorporação que você fez funciona e que está recebendo o documento correto do banco de dados.
Para isso você pode usar o método dryRun
.
Seguindo o exemplo acima, adicione isto ao seu 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 :
'' '
A incorporação está confirmada para funcionar conforme o esperado. Ele retorna o documento correto, mesmo que a pergunta seja feita de forma um pouco diferente. Nenhum token de prompt foi consumido.
A simulação ainda consumirá tokens para incorporar sua consulta, mas é apenas cerca de 1/15 do prompt.
A criação de um chatbot em qualquer conjunto de dados precisa das seguintes etapas para acontecer
Sempre que um usuário faz qualquer consulta, o seguinte processo acontece para encontrar a resposta para a consulta
O processo de carregamento do conjunto de dados e, em seguida, consulta envolve várias etapas e cada etapa possui nuances próprias.
Essas questões podem ser triviais para alguns, mas para muitos de nós é preciso pesquisa, experimentação e tempo para descobrir as respostas precisas.
embedchain é uma estrutura que cuida de todas essas nuances e fornece uma interface simples para criar bots em qualquer conjunto de dados.
Na primeira versão, estamos tornando mais fácil para qualquer pessoa colocar um chatbot em qualquer conjunto de dados instalado e funcionando em menos de um minuto. Tudo o que você precisa fazer é criar uma instância do aplicativo, adicionar os conjuntos de dados usando a função .add
e, em seguida, usar a função .query
para obter a resposta relevante.
embedchain é construído na seguinte pilha:
Se você utiliza este repositório, considere citá-lo com:
@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}},
}