embedchain 是一个框架,可以在任何数据集上轻松创建 LLM 支持的机器人。 embedchainjs 是 embedchain 的 Javascript 版本。如果你想要 python 版本,请查看 embedchain-python
安排与创始人 Taranjeet 的反馈会议,讨论任何问题、提供反馈或探索改进。
它抽象了加载数据集、分块、创建嵌入然后存储在矢量数据库中的整个过程。
您可以使用.add
和.addLocal
函数添加单个或多个数据集,然后使用.query
函数从添加的数据集中查找答案。
如果您想创建一个 Naval Ravikant 机器人,其中包含他的 2 篇博客文章以及您提供的问答对,您所需要做的就是将链接添加到博客文章,QnA 对和嵌入链将创建一个为你服务的机器人。
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
目前仅兼容openai 3.X,不兼容最新版本4.X。请确保使用正确的版本,否则您将看到ChromaDB
错误TypeError: OpenAIApi.Configuration is not a constructor
确保已安装 dotenv 软件包,并且您的OPENAI_API_KEY
位于根文件夹中名为.env
的文件中。您可以通过以下方式安装 dotenv
npm install dotenv
通过访问此链接在您的设备上下载并安装 Docker。您将需要它来在您的计算机上运行 Chroma 矢量数据库。
运行以下命令在 Docker 中设置 Chroma 容器
git clone https://github.com/chroma-core/chroma.git
cd chroma
docker-compose up -d --build
我们使用 OpenAI 的嵌入模型为块创建嵌入,并使用 ChatGPT API 作为 LLM 来获取给定相关文档的答案。确保您拥有 OpenAI 帐户和 API 密钥。如果您没有 API 密钥,可以通过访问此链接创建一个。
获得 API 密钥后,将其设置在名为OPENAI_API_KEY
的环境变量中
// Set this inside your .env file
OPENAI_API_KEY = "sk-xxxx" ;
const dotenv = require ( "dotenv" ) ;
dotenv . config ( ) ;
App
类并使用.add
函数添加任何数据集。.query
函数来获取任何查询的答案。 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" ) ;
我们支持以下格式:
要添加任何 pdf 文件,请使用 data_type 作为pdf_file
。例如:
await app . add ( "pdf_file" , "a_valid_url_where_pdf_file_can_be_accessed" ) ;
要添加任何网页,请使用 data_type 作为web_page
。例如:
await app . add ( "web_page" , "a_valid_web_page_url" ) ;
要提供您自己的 QnA 对,请使用 data_type 作为qna_pair
并输入一个元组。例如:
await app . addLocal ( "qna_pair" , [ "Question" , "Answer" ] ) ;
在使用有价值的代币之前,您应该确保您所做的嵌入有效,并且它从数据库接收正确的文档。
为此,您可以使用dryRun
方法。
按照上面的示例,将其添加到您的脚本中:
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 :
'' '
确认嵌入按预期工作。即使提出的问题略有不同,它也会返回正确的文档。没有消耗任何提示令牌。
试运行仍然会消耗令牌来嵌入您的查询,但它只是提示的〜1/15。
在任何数据集上创建聊天机器人需要执行以下步骤
每当用户提出任何查询时,都会发生以下过程来找到查询的答案
加载数据集然后查询的过程涉及多个步骤,每个步骤都有自己的细微差别。
这些问题对于某些人来说可能微不足道,但对于我们很多人来说,需要研究、实验和时间才能找到准确的答案。
embedchain 是一个框架,可以处理所有这些细微差别,并提供一个简单的界面来在任何数据集上创建机器人。
在第一个版本中,我们让任何人都可以更轻松地在不到一分钟的时间内就任何数据集启动并运行聊天机器人。您需要做的就是创建一个应用程序实例,使用.add
函数添加数据集,然后使用.query
函数获取相关答案。
embedchain 构建在以下堆栈上:
如果您使用此存储库,请考虑使用以下方式引用它:
@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}},
}