2 个不稳定版本
新 0.2.0 | 2024 年 8 月 21 日 |
---|---|
0.1.0 | 2024 年 7 月 19 日 |
#424 in 文本处理
每月 115 次下载
76KB
2K SLoC
Ragtime
Ragtime 是一个 Rust 库,使构建自托管检索增强生成 (RAG) 应用程序变得更加容易。目前它使用 Phi3 进行问答和摘要,并支持多个嵌入模型。它有一个通用的模型接口,以促进整合可用的其他模型。
目前支持 onnx 和 llama.cpp 后端来运行模型,随着这些后端的成熟,可能还会添加额外的后端(例如 burn 或 candle)。
目前,使用 gte-Qwen2-instruct 嵌入模型系列和 Phi3 获得的最佳结果。这种组合可以在相同的向量数据库中索引源代码和文本文档,用于问答或简单的检索。
use ragtime::{llama, RagQaPhi3GteQwen27bInstruct};
use llama_cpp_2::llama_backend::LlamaBackend;
use anyhow::Result;
use std::{io::{stdout, Write}, sync::Arc};
let backend = Arc::new(LlamaBackend::init()?);
let mut qa = RagQaPhi3GteQwen27bInstruct::new(
64,
backend.clone(),
llama::Args::default().with_model("gte-Qwen2-7B-instruct/ggml-model-q8_0.gguf"),
backend,
llama::Args::default().with_model("Phi-3-mini-128k-instruct/ggml-model-q8_0.gguf")
)?;
// add documents
qa.add_document("doc0", 256, 128)?;
qa.add_document("doc1", 256, 128)?;
// query
for tok in qa.ask("question about your docs", None)? {
let tok = tok?;
print!("{tok}");
stdout().flush()?;
}
虽然拉格泰姆不直接使用任何异步运行时,但其基于迭代器的返回机制使得将其放入后台线程并将令牌推入 IPC 机制(如 mpsc 通道)非常简单。这使得它对异步运行时不可知,并更容易用于非异步应用程序,如命令行工具。
实用工具
除了核心 crate 之外,utils 文件夹中还有一些简单的命令行包装器。
- qa:一个问答命令行实用工具,可以摄取文档、持久化并加载索引,并提供问答 REPL
- gen:一个用于运行没有 RAG 支持的 Phi3 会话的驱动程序
- chunk:一个实用工具,用于显示文档将如何分割成块
模型
Phi3 和所有支持的嵌入模型权重都可在 hugging face 上找到。在某些情况下,您需要使用 llama.cpp 仓库中包含的 Python 脚本将它们转换为 gguf 格式。对于 onnx 模型,许多模型可以直接从 hugging face 下载,否则您必须将它们从 hugging face 格式转换。
- Phi3: https://hugging-face.cn/microsoft/Phi-3-mini-128k-instruct
- gte-Qwen2: https://hugging-face.cn/Alibaba-NLP/gte-Qwen2-7B-instruct
部署
如果使用 CPU 或 Vulkan 加速,则可以以最小依赖项部署 Ragtime 应用程序。在 cuda 的情况下,只需要 cuda 运行时。
依赖关系
~28–43MB
~791K SLoC