Package: embedchain-harin
embedchainembedchain is a framework to easily create LLM powered bots over any dataset.It abstracts the entire process of loading a dataset, chunking it, creating embeddings and then storing in a vector database.You can add a single or multiple dataset using.addand.add_localfunction and then use.queryfunction to find an answer from the added datasets.If you want to create a Naval Ravikant bot which has 1 youtube video, 1 book as pdf and 2 of his blog posts, as well as a question and answer pair you supply, all you need to do is add the links to the videos, pdf and blog posts and the QnA pair and embedchain will create a bot for you.fromembedchainimportAppnaval_chat_bot=App()# Embed Online Resourcesnaval_chat_bot.add("youtube_video","https://www.youtube.com/watch?v=3qHkcs3kG44")naval_chat_bot.add("pdf_file","https://navalmanack.s3.amazonaws.com/Eric-Jorgenson_The-Almanack-of-Naval-Ravikant_Final.pdf")naval_chat_bot.add("web_page","https://nav.al/feedback")naval_chat_bot.add("web_page","https://nav.al/agi")# Embed Local Resourcesnaval_chat_bot.add_local("qna_pair",("Who is Naval Ravikant?","Naval Ravikant is an Indian-American entrepreneur and investor."))naval_chat_bot.query("What unique capacity does Naval argue humans possess when it comes to understanding explanations or concepts?")# answer: Naval argues that humans possess the unique capacity to understand explanations or concepts to the maximum extent possible in this physical reality.Getting StartedInstallationFirst make sure that you have the package installed. If not, then install it usingpippipinstallembedchainUsageWe use OpenAI's embedding model to create embeddings for chunks and ChatGPT API as LLM to get answer given the relevant docs. Make sure that you have an OpenAI account and an API key. If you have dont have an API key, you can create one by visitingthis link.Once you have the API key, set it in an environment variable calledOPENAI_API_KEYimportosos.environ["OPENAI_API_KEY"]="sk-xxxx"Next import theAppclass from embedchain and use.addfunction to add any dataset.fromembedchainimportAppnaval_chat_bot=App()# Embed Online Resourcesnaval_chat_bot.add("youtube_video","https://www.youtube.com/watch?v=3qHkcs3kG44")naval_chat_bot.add("pdf_file","https://navalmanack.s3.amazonaws.com/Eric-Jorgenson_The-Almanack-of-Naval-Ravikant_Final.pdf")naval_chat_bot.add("web_page","https://nav.al/feedback")naval_chat_bot.add("web_page","https://nav.al/agi")# Embed Local Resourcesnaval_chat_bot.add_local("qna_pair",("Who is Naval Ravikant?","Naval Ravikant is an Indian-American entrepreneur and investor."))If there is any other app instance in your script or app, you can change the import asfromembedchainimportAppasEmbedChainApp# orfromembedchainimportAppasECAppNow your app is created. You can use.queryfunction to get the answer for any query.print(naval_chat_bot.query("What unique capacity does Naval argue humans possess when it comes to understanding explanations or concepts?"))# answer: Naval argues that humans possess the unique capacity to understand explanations or concepts to the maximum extent possible in this physical reality.Format supportedWe support the following formats:Youtube VideoTo add any youtube video to your app, use the data_type (first argument to.add) asyoutube_video. Eg:app.add('youtube_video','a_valid_youtube_url_here')PDF FileTo add any pdf file, use the data_type aspdf_file. Eg:app.add('pdf_file','a_valid_url_where_pdf_file_can_be_accessed')Note that we do not support password protected pdfs.Web PageTo add any web page, use the data_type asweb_page. Eg:app.add('web_page','a_valid_web_page_url')TextTo supply your own text, use the data_type astextand enter a string. The text is not processed, this can be very versatile. Eg:app.add_local('text','Seek wealth, not money or status. Wealth is having assets that earn while you sleep. Money is how we transfer time and wealth. Status is your place in the social hierarchy.')Note: This is not used in the examples because in most cases you will supply a whole paragraph or file, which did not fit.QnA PairTo supply your own QnA pair, use the data_type asqna_pairand enter a tuple. Eg:app.add_local('qna_pair',("Question","Answer"))More Formats coming soonIf you want to add any other format, please create anissueand we will add it to the list of supported formats.How does it work?Creating a chat bot over any dataset needs the following steps to happenload the datacreate meaningful chunkscreate embeddings for each chunkstore the chunks in vector databaseWhenever a user asks any query, following process happens to find the answer for the querycreate the embedding for queryfind similar documents for this query from vector databasepass similar documents as context to LLM to get the final answer.The process of loading the dataset and then querying involves multiple steps and each steps has nuances of it is own.How should I chunk the data? What is a meaningful chunk size?How should I create embeddings for each chunk? Which embedding model should I use?How should I store the chunks in vector database? Which vector database should I use?Should I store meta data along with the embeddings?How should I find similar documents for a query? Which ranking model should I use?These questions may be trivial for some but for a lot of us, it needs research, experimentation and time to find out the accurate answers.embedchain is a framework which takes care of all these nuances and provides a simple interface to create bots over any dataset.In the first release, we are making it easier for anyone to get a chatbot over any dataset up and running in less than a minute. All you need to do is create an app instance, add the data sets using.addfunction and then use.queryfunction to get the relevant answer.Tech Stackembedchain is built on the following stack:Langchainas an LLM framework to load, chunk and index dataOpenAI's Ada embedding modelto create embeddingsOpenAI's ChatGPT APIas LLM to get answers given the contextChromaas the vector database to store embeddingsAuthorTaranjeet Singh (@taranjeetio)