Verba
金毛寻回犬
欢迎来到Verba:金毛寻回犬,这是一个开源应用程序,旨在提供端到端、简化且用户友好的检索增强生成(RAG)界面。只需几个简单步骤,即可轻松探索您的数据集并提取见解,可以在本地使用HuggingFace和Ollama,也可以通过OpenAI、Cohere和Google等LLM提供商。
pip install goldenverba
Verba是什么?
Verba是一个完全可定制的个人助手,用于查询和与您的数据交互,可以在本地或通过云部署。解决文档相关问题,交叉引用多个数据点或从现有知识库获取见解。Verba将最先进的RAG技术与Weaviate的上下文感知数据库相结合。根据您的个人用例,在不同的RAG框架、数据类型、分块和检索技术以及LLM提供商之间进行选择。
开源精神
Weaviate很自豪地为社区提供这个开源项目。虽然我们努力及时解决问题,但请理解它可能无法像生产软件那样严格维护。我们欢迎并鼓励社区贡献,以帮助它平稳运行。非常感谢您在快速修复开放问题方面的支持。
在此观看我们最新的Verba视频:
功能列表
🤖 模型支持 | 已实现 | 描述 |
---|---|---|
Ollama(例如Llama3) | ✅ | 由Ollama驱动的本地嵌入和生成模型 |
HuggingFace(例如MiniLMEmbedder) | ✅ | 由HuggingFace驱动的本地嵌入模型 |
Cohere(例如Command R+) | ✅ | Cohere提供的嵌入和生成模型 |
Google(例如Gemini) | ✅ | Google提供的嵌入和生成模型 |
OpenAI(例如GPT4) | ✅ | OpenAI提供的嵌入和生成模型 |
🤖 嵌入支持 | 已实现 | 描述 |
---|---|---|
Ollama | ✅ | 由Ollama驱动的本地嵌入模型 |
MiniLMEmbedder | ✅ | 由HuggingFace驱动 |
AllMPNetEmbedder | ✅ | 由HuggingFace驱动 |
MixedbreadEmbedder | ✅ | 由HuggingFace驱动 |
Cohere | ✅ | Cohere提供的嵌入模型 |
✅ | Google提供的嵌入模型 | |
OpenAI | ✅ | OpenAI提供的嵌入模型 |
📁 数据支持 | 已实现 | 描述 |
---|---|---|
PDF导入 | ✅ | 将PDF导入Verba |
GitHub和GitLab | ✅ | 从Github和GitLab导入文件 |
CSV/XLSX导入 | ✅ | 将表格数据导入Verba |
.DOCX | ✅ | 导入.docx文件 |
多模态 | 计划中 ⏱️ | 将多模态数据导入Verba |
UnstructuredIO | ✅ | 通过Unstructured导入数据 |
✨ RAG功能 | 已实现 | 描述 |
---|---|---|
混合搜索 | ✅ | 语义搜索与关键词搜索相结合 |
语义缓存 | ✅ | 根据语义含义保存和检索结果 |
自动完成建议 | ✅ | Verba提供自动完成建议 |
过滤 | 计划中 ⏱️ | 在执行RAG之前应用过滤器(如文档、文档类型等) |
高级查询 | 计划中 ⏱️ | 基于LLM评估的任务委派 |
重新排序 | 计划中 ⏱️ | 根据上下文重新排序结果以改善结果 |
RAG评估 | 计划中 ⏱️ | RAG管道评估界面 |
可自定义元数据 | 计划中 ⏱️ | 对元数据的自由控制 |
🆒 酷炫附加功能 | 已实现 | 描述 |
---|---|---|
Docker支持 | ✅ | Verba可通过Docker部署 |
可自定义前端 | ✅ | Verba的前端可通过前端完全自定义 |
🤝 RAG库 | 已实现 | 描述 |
---|---|---|
Haystack | 计划中 ⏱️ | 实现Haystack RAG管道 |
LlamaIndex | 计划中 ⏱️ | 实现LlamaIndex RAG管道 |
LangChain | 计划中 ⏱️ | 实现LangChain RAG管道 |
缺少什么吗?欢迎创建一个新的问题或讨论,分享您的想法!
Verba入门
您有三种部署Verba的选择:
- 通过pip安装
pip install goldenverba
- 从源代码构建
git clone https://github.com/weaviate/Verba
pip install -e .
- 使用Docker部署
先决条件:如果不使用Docker,请确保您的系统上安装了Python >=3.10.0
。
如果您不熟悉Python和虚拟环境,请阅读Python教程指南。
API密钥
在启动Verba之前,您需要通过.env
文件配置对各种组件的访问权限,具体取决于您选择的技术,如OpenAI、Cohere和HuggingFace。在您要启动Verba的同一目录中创建这个.env
文件。您可以在goldenverba目录中找到一个.env.example
文件。
请确保只设置您打算使用的环境变量,缺失或不正确的环境变量值可能导致错误。
以下是您可能需要的API密钥和变量的完整列表:
环境变量 | 值 | 描述 |
---|---|---|
WEAVIATE_URL_VERBA | 您的托管Weaviate集群URL | 连接到您的WCS集群 |
WEAVIATE_API_KEY_VERBA | 您的托管Weaviate集群API凭证 | 连接到您的WCS集群 |
OPENAI_API_KEY | 您的API密钥 | 获取OpenAI模型访问权限 |
OPENAI_BASE_URL | OpenAI实例的URL | 模型 |
COHERE_API_KEY | 您的API密钥 | 获取Cohere模型访问权限 |
OLLAMA_URL | 您的Ollama实例URL(例如 http://localhost:11434) | 获取Ollama模型访问权限 |
OLLAMA_MODEL | 模型名称(例如 llama) | 获取特定Ollama模型访问权限 |
OLLAMA_EMBED_MODEL | 模型名称(例如 mxbai-embed-large) | 获取特定Ollama嵌入模型访问权限(如未指定则默认为OLLAMA_MODEL) |
UNSTRUCTURED_API_KEY | 您的API密钥 | 获取Unstructured数据摄取访问权限 |
UNSTRUCTURED_API_URL | Unstructured实例URL | 获取Unstructured数据摄取访问权限 |
GITHUB_TOKEN | 您的GitHub令牌 | 获取通过GitHub进行数据摄取的访问权限 |
GITLAB_TOKEN | 您的GitLab令牌 | 获取通过GitLab进行数据摄取的访问权限 |
GOOGLE_APPLICATION_CREDENTIALS | Google凭证 | 获取Google模型访问权限 |
GOOGLE_CLOUD_PROJECT | Google Cloud项目 | 获取Google模型访问权限 |
GOOGLE_API_KEY | 您的API密钥 | 获取Google模型访问权限 |
VERBA_PRODUCTION | True | 在生产模式下运行Verba |
Weaviate
Verba提供了根据您需求连接到Weaviate实例的灵活性。默认情况下,如果未检测到WEAVIATE_URL_VERBA
和WEAVIATE_API_KEY_VERBA
环境变量,Verba会选择Weaviate嵌入式。这种本地部署是启动Weaviate数据库进行原型设计和测试的最简单方法。
但是,您还有其他选择:
🌩️ Weaviate云服务(WCS)
如果您更喜欢基于云的解决方案,Weaviate云服务(WCS)提供了可扩展的托管环境。按照Weaviate集群设置指南了解如何设置云集群并获取API密钥。
🐳 Docker部署 另一个强大的本地替代方案是使用Docker部署Weaviate。有关更多详细信息,请参阅Weaviate Docker指南。
Ollama
Verba支持Ollama模型。在您的设备上下载并安装Ollama(https://ollama.com/download)。确保使用`ollama run
已经测试过llama3
、llama3:70b
和mistral
。通常情况下,更大的模型性能更好,但需要更多计算能力。
在继续之前,请确保为嵌入器和生成器选择了正确的配置。
确保Ollama服务器在后台运行,并且不要使用不同的ollama模型摄取文档,因为它们的向量维度可能会有所不同,从而导致错误
您可以通过运行以下命令进行验证
ollama run llama3
如果您想使用Google功能,请确保安装Google Verba包。
pip install goldenverba[google]
或
pip install `.[google]`
如果您使用Docker,请相应修改Dockerfile
Google嵌入
对于Google嵌入,Verba使用Google Cloud内的Vertex AI Studio。您可以在这里找到获取密钥的说明。如果您已安装gcloud
CLI,可以运行以下命令:gcloud auth print-access-token
。目前,此访问令牌必须每小时更新一次。
您还需要将GOOGLE_CLOUD_PROJECT
环境变量设置为项目名称。
Google Gemini
要使用Google Gemini,您需要一个服务账号密钥,它是一个JSON文件。要获取此密钥,请转到Google Cloud控制台中的"项目设置",然后转到"服务账号"。创建一个新的服务账号,然后创建一个新的密钥。下载此密钥并将其放置在Verba的根目录中。将其命名为gemini_secrets.json
以自动将其从git中排除。将环境变量GOOGLE_APPLICATION_CREDENTIALS
设置为此文件的位置,例如gemini_secrets.json
。
您还需要将GOOGLE_CLOUD_PROJECT
环境变量设置为项目名称。
Unstructured
Verba支持通过Unstructured IO导入文档(例如纯文本、.pdf、.csv等)。要使用它们,您需要UNSTRUCTURED_API_KEY
和UNSTRUCTURED_API_URL
环境变量。您可以从Unstructured获取它们
UNSTRUCTURED_API_URL默认设置为
https://api.unstructured.io/general/v0/general
OpenAI
Verba支持OpenAI模型,如Ada、GPT3和GPT4。要使用它们,您需要指定OPENAI_API_KEY
环境变量。您可以从OpenAI获取它
您还可以添加OPENAI_BASE_URL
以使用代理,如LiteLLM(https://github.com/BerriAI/litellm)
OPENAI_BASE_URL=YOUR-OPENAI_BASE_URL
Azure OpenAI
要使用Azure OpenAI,您需要设置
- API类型:
OPENAI_API_TYPE="azure"
- 密钥和端点:
OPENAI_API_KEY=<YOUR_KEY>
OPENAI_BASE_URL=http://XXX.openai.azure.com
- Azure OpenAI资源名称,如果您的端点是XXX.openai.azure.com,则为XXX
AZURE_OPENAI_RESOURCE_NAME=<YOUR_AZURE_RESOURCE_NAME>
- 您需要为嵌入和查询设置模型。
AZURE_OPENAI_EMBEDDING_MODEL="text-embedding-ada-002"
OPENAI_MODEL="gpt-4"
- 最后,由于Azure使用每分钟配额,您可能需要在每个块上传之间添加等待时间。例如,如果您每分钟的限制是24万个令牌,如果您的块最多400个令牌,那么每次查询之间等待100毫秒应该没问题。如果从weaviate收到429错误,则增加此值。
WAIT_TIME_BETWEEN_INGESTION_QUERIES_MS="100"
HuggingFace
如果您想使用HuggingFace功能,请确保安装正确的Verba包。它将安装使用本地嵌入模型所需的包。
请注意,在启动时,Verba将自动下载并安装所有嵌入模型,如果您只想使用特定模型,请从goldenverba/components/managers.py
文件中删除不需要的模型。
pip install goldenverba[huggingface]
或
pip install `.[huggingface]`
如果您使用Docker,请相应修改Dockerfile
如何使用pip部署
Python >=3.10.0
- 初始化新的Python环境
python3 -m virtualenv venv
- 安装Verba
pip install goldenverba
- 启动Verba
verba start
您可以通过标志指定--port和--host
- 访问Verba
访问 localhost:8000
- 创建.env文件并添加环境变量
如何从源代码构建
- 克隆Verba仓库
git clone https://github.com/weaviate/Verba.git
- 初始化新的Python环境
python3 -m virtualenv venv
- 安装Verba
pip install -e .
- 启动Verba
verba start
您可以通过标志指定--port和--host
- 访问Verba
访问 localhost:8000
- 创建.env文件并添加环境变量
如何使用Docker安装Verba
Docker是一套使用操作系统级虚拟化来交付软件包(称为容器)的平台即服务产品。要开始使用Docker部署Verba,请按照以下步骤操作。如果您需要更详细的Docker使用说明,请查看Docker课程。
- 克隆Verba仓库 确保您的系统上已安装Git。然后,打开终端或命令提示符并运行以下命令来克隆Verba仓库:
git clone https://github.com/weaviate/Verba.git
- 设置必要的环境变量
确保在
.env
文件中设置所需的环境变量。您可以在API密钥部分中阅读更多关于如何设置它们的信息 - 调整 docker-compose 文件
你可以使用
docker-compose.yml
在verba
服务下添加所需的环境变量,也可以调整 Weaviate Docker 设置以启用身份验证或更改数据库实例的其他设置。你可以在我们的 docker-compose 文档 中阅读更多关于 Weaviate 配置的信息。
请确保只添加你真正需要的环境变量。如果你的 Weaviate 集群未启用身份验证,请确保不要包含
WEAVIATE_API_KEY_VERBA
环境变量。
- 使用 Docker 部署 安装 Docker 并克隆 Verba 仓库后,在终端或命令提示符中导航到包含 Docker Compose 文件的目录。运行以下命令以分离模式启动 Verba 应用程序,这样它可以在后台运行:
docker compose up -d
docker compose --env-file .env up -d
这个命令将下载必要的 Docker 镜像,创建容器,并启动 Verba。 请记住,要使用这种方法,必须在你的系统上安装 Docker。有关安装说明和更多关于 Docker 的详细信息,请访问官方 Docker 文档。
- 访问 Verba
-
你可以在
localhost:8080
访问本地 Weaviate 实例 -
你可以在
localhost:8000
访问 Verba 前端
如果你希望 Docker 实例安装特定版本的 Verba,可以编辑 Dockerfile
并更改安装行。
RUN pip install -e '.'
Verba 使用指南
概览页面
一旦你能够访问 Verba,你可以使用"概览页面"来验证是否所有环境和库都已正确设置和安装。你可以使用管理控制台查看存储在 Weaviate 集合中的所有数据,并重置 Verba 的某些部分(例如文档、缓存、配置等)。
导入你的数据
配置好 Verba 后,你就可以导入数据并开始探索了。使用"添加文档"页面来摄取你的数据。你可以选择支持不同数据类型、分块技术和嵌入模型的读取器。
查询你的数据
导入数据后,你可以使用"聊天"页面提出任何相关问题。你将收到与你的问题在语义上相关的相关文本块,以及由你选择的模型生成的答案。你可以在"RAG"页面下配置 RAG 流程。
开源贡献
我们始终欢迎你的贡献!如果你发现任何问题或错误,请随时贡献想法、反馈或创建问题和错误报告!在贡献之前,请阅读贡献指南。如果你需要任何帮助,请访问我们的 Weaviate 社区论坛!
项目架构
你可以在其技术文档和前端文档中了解更多关于 Verba 的架构和实现。在进行任何贡献之前,建议先看一下这些文档。
JSON 文件
在 Verba 中,你可以导入具有特定格式的 JSON,这种格式允许你添加原始源链接、文本块、元数据等。
目前,一个文档需要在一个 .json 文件中(这将在未来改变)
文档结构
{
"text": "<内容>", // 将被分块的内容
"type": "<类型>", // 将用于过滤文档
"name": "<文档名称>", // 包含在发送给 LLM 的上下文中
"path": "<本地文件路径>", // 目前未实现,可以为空
"link": "<原始源链接>", // 原始源的链接
"timestamp": "<YYYY-MM-DD HH:MM:SS>", // 目前未使用,可以为空
"reader": "<读取器>", // 目前未使用,可以为空
"meta": {}, // 目前未使用
"chunks": [] // 你可以在这里添加文本块,在摄取过程中跳过分块部分
}
文本块结构
{
"text": "<内容>", // 文本块内容
"doc_name": "<文档名称>", // 文档的名称
"doc_type": "<文档类型>", // 文档的类型
"doc_uuid": "<文档 UUID>", // 文档的 UUID
"chunk_id": "<文本块 ID>", // 文本块的顺序,从 0 到 n(n = 总文本块数)
"tokens": "<令牌数>", // 文本块中的令牌数,未使用,可以为空
"vector": "<向量>", // 文本块的向量,未使用,可以为空
"score": "<检索分数>" // 文本块的分数,将在运行时由检索器添加,可以为空
}
已知问题
- Weaviate Embedded 目前在 Windows 上还不能工作
- 将在未来版本中修复,在此之前请使用 Docker 或 WCS 部署
常见问题
-
Verba 是多语言的吗?
- 这取决于你选择的嵌入和生成模型是否支持多语言数据。
-
我可以在 Verba Docker 中使用我的 Ollama 服务器吗?
- 是的,可以!确保 URL 设置为:
OLLAMA_URL=http://host.docker.internal:11434
- 如果你在 Linux 上运行,你可能需要获取 Ollama 服务器的 IP 网关:
OLLAMA_URL="http://YOUR-IP-OF-OLLAMA:11434"
- 是的,可以!确保 URL 设置为:
-
如何清除 Weaviate Embedded 存储?
- 你可以在这里找到存储的数据:
~/.local/share/weaviate
- 你可以在这里找到存储的数据:
-
如何指定端口?
- 你可以使用端口和主机标志
verba start --port 9000 --host 0.0.0.0
- 你可以使用端口和主机标志