项目简介
embedchainjs
是一个用 JavaScript 编写的框架,专为简化创建基于大型语言模型(LLM)数据集的聊天机器人而设计。该框架的目标是使用户能够在任何数据集上轻松构建功能强大的机器人,利用高级智能技术来处理复杂的任务。embedchainjs
是 embedchain
项目的 JavaScript 版本,而如果需要 Python 版本,可以访问 embedchain-python。
项目工作原理
embedchainjs
抽象了加载数据集、分块、创建嵌入并在向量数据库中存储的整个过程。用户可以使用 .add
和 .addLocal
函数添加单个或多个数据集,然后利用 .query
函数在所添加的数据集中查找答案。例如,如果用户想创建一个关于 Naval Ravikant 的机器人,只需提供他的两篇博客文章的链接以及一对问答对,embedchainjs
就能为用户创建一个相应的机器人。
快速开始
安装
-
确保已安装相应的软件包,通过以下命令进行安装:
npm install embedchain && npm install -S openai@^3.3.0
-
当前版本只兼容 OpenAI 的 3.X 版本。如果使用 4.X 版本,将会遇到
ChromaDB
错误。 -
安装
dotenv
包,并在根目录的.env
文件中配置OPENAI_API_KEY
。 -
按照链接安装 Docker,用于运行 Chroma 向量数据库。
-
使用以下命令设置 Chroma 容器并在 Docker 中运行:
git clone https://github.com/chroma-core/chroma.git cd chroma docker-compose up -d --build
使用方式
- 使用 OpenAI 的嵌入模型创建数据块的嵌入,并使用 ChatGPT API 作为 LLM 来给出相关文档的答案。
- 配置好 OpenAI 的 API 密钥后,利用
App
类的.add
函数添加数据集,并通过.query
函数获得查询的答案。
以下是示例代码:
const dotenv = require("dotenv");
dotenv.config();
const { App } = require("embedchain");
async function testApp() {
const navalChatBot = await App();
// 添加在线资源
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"
);
// 添加本地资源
await navalChatBot.addLocal("qna_pair", [
"Who is Naval Ravikant?",
"Naval Ravikant 是一位印度裔美国企业家和投资者。",
]);
const result = await navalChatBot.query(
"Naval 认为人类在理解解释或概念方面具有哪些独特的能力?"
);
console.log(result);
// 输出答案:Naval 认为人类在理解解释或概念时,具备在此物理现实中最大程度的理解能力。
}
testApp();
支持格式
embedchainjs
支持以下数据类型:
- PDF 文件:
pdf_file
- 网页:
web_page
- 问答对:
qna_pair
如果需要支持其他格式,可以在 GitHub 上创建问题,我们将考虑添加。
测试
在应用程序中嵌入数据之前,建议使用 dryRun
方法进行测试,以确保实现能够接收正确的文档,这样可以减少不必要的资源消耗。
底层技术
embedchain
用到的技术包括:
- Langchain:用于加载、分块和索引数据的LLM框架。
- OpenAI 的 Ada 嵌入模型:用于创建嵌入。
- OpenAI 的 ChatGPT API:作为LLM给出答案。
- Chroma:存储嵌入的向量数据库。
团队
作者
- Taranjeet Singh(@taranjeetio)
维护者
对于开发人员和技术爱好者而言,embedchainjs
提供了一种快速且高效的方式来构建在任何数据集上运行的聊天机器人,简化了复杂的过程,极大地降低了创建数据驱动机器人应用的技术门槛。