EmbedJs简介
EmbedJs是一个开源的NodeJS框架,旨在简化基于大语言模型(LLM)和嵌入的检索增强生成(RAG)应用的开发过程。它提供了一套强大的工具,可以轻松地将非结构化数据转化为可检索的知识库,并利用这些知识来增强LLM的响应。
EmbedJs的核心功能包括:
- 将数据分割成可管理的块
- 生成相关的嵌入向量
- 将嵌入存储在向量数据库中以优化检索
- 提取上下文信息
- 查找精确答案
- 进行交互式对话
使用EmbedJs,开发者可以快速构建个性化的LLM应用,无需深入了解底层的复杂技术细节。
主要特性
EmbedJs提供了一系列强大的功能,使其成为构建RAG应用的理想选择:
- 支持多种流行的大语言模型,包括付费和开源模型
- 兼容多种向量数据库,包括自托管和云端版本
- 内置多种加载器,可轻松导入不同类型的非结构化数据
- 提供多种缓存选项,大幅提升生产环境中RAG应用的性能
- 简单且高度可配置的API,既可快速启动,又能深度定制
- 可单独用作嵌入引擎,也可作为完整的聊天API使用(支持历史记录)
快速开始
要开始使用EmbedJs,只需几个简单的步骤:
-
安装:
npm install @llm-tools/embedjs
-
基本用法:
const ragApplication = await new RAGApplicationBuilder() .addLoader({ type: 'YoutubeSearch', youtubeSearchString: 'Tesla cars' }) .addLoader('https://en.wikipedia.org/wiki/Tesla,_Inc.') .addLoader('https://tesla-info.com/sitemap.xml') .setVectorDb(new LanceDb({ path: '.db' })) .build(); console.log(await ragApplication.query('Give me the history of Tesla?'));
这个简单的示例展示了EmbedJs的强大功能。它从YouTube搜索结果、Wikipedia页面和Tesla官网的sitemap中加载数据,然后使用这些信息来回答关于Tesla历史的问题。
支持的加载器
EmbedJs支持多种数据加载器,使得从各种来源导入数据变得简单:
- YouTube视频、频道和搜索结果
- PDF、Word、Excel和PowerPoint文档
- 网页和sitemap
- Confluence空间
- 文本、JSON和CSV文件
此外,开发者还可以创建自定义加载器来满足特定需求。
语言模型支持
EmbedJs支持多种流行的大语言模型:
- OpenAI (GPT-3.5, GPT-4)
- Azure OpenAI
- Mistral
- Hugging Face
- Anthropic (Claude)
- Google Cloud Vertex AI (Gemini)
- Ollama (本地运行的开源模型)
开发者可以轻松切换不同的LLM,或者集成自定义的模型实现。
嵌入模型
EmbedJs提供了多种嵌入模型选项:
- OpenAI v3 Small (默认)
- OpenAI v3 Large
- OpenAI Ada
- Cohere
- Google Cloud Vertex AI Gecko
- Ollama (本地嵌入)
这些选项使得开发者可以根据具体需求选择最适合的嵌入模型。
向量数据库支持
EmbedJs支持多种向量数据库,包括:
- Pinecone
- LanceDB
- Chroma
- HNSWLib
- Weaviate
- Qdrant
- MongoDB
开发者还可以集成自定义的向量数据库实现。
缓存机制
为了提高性能,EmbedJs提供了多种缓存选项:
- LMDB
- 内存缓存
- Redis
- MongoDB
这些缓存机制可以显著提升RAG应用在生产环境中的响应速度。
高级功能
自定义提示词
EmbedJs允许开发者自定义查询模板,以更好地控制LLM的行为:
await new RAGApplicationBuilder()
.setQueryTemplate('My own query template')
上下文获取
在开发过程中,可以使用getContext
方法来测试加载器的性能和质量,而无需实际调用LLM:
await ragApplication.getContext('What is Steve Jobs?')
动态添加加载器
可以在应用构建完成后动态添加新的加载器:
await ragApplication.addLoader(new YoutubeLoader({ videoIdOrUrl: 'pQiT2U5E9tI' }));
加载器推断
EmbedJs能够自动推断内容类型并调用适当的加载器:
await ragApplication.addLoader('pQiT2U5E9tI'); // 自动调用YouTube加载器
await ragApplication.addLoader('https://example.com/sample.pdf'); // 自动调用PDF加载器
结语
EmbedJs为构建强大的RAG应用提供了一个全面而灵活的框架。无论是快速原型开发还是构建复杂的生产级应用,EmbedJs都能满足各种需求。它的模块化设计和丰富的集成选项使得开发者可以轻松地定制和扩展功能。
随着AI技术的不断发展,EmbedJs也在持续更新和改进。开发团队欢迎社区贡献,无论是提出新功能建议、报告问题还是提交代码,都可以通过GitHub参与项目的发展。
对于那些希望快速入门RAG应用开发的开发者来说,EmbedJs无疑是一个极具吸引力的选择。它不仅简化了复杂的技术流程,还提供了足够的灵活性来应对各种实际应用场景。随着更多开发者的加入和贡献,我们可以期待EmbedJs在未来会变得更加强大和易用。