用自然语言构建可配置并可问答的RAG应用
Streamlit承载交互界面,OpenAI负责构建与问答,LlamaIndex Python提供RAG实现基础。
方案简介
RAGs 是一个基于 Streamlit 的应用,用自然语言从数据源创建 RAG pipeline。用户先描述任务和希望使用的检索参数,例如加载某个网页、希望检索多少篇文档;随后可以在配置页面查看并修改生成的参数,最后通过聊天界面向数据提问。\n\n这套方案适合希望快速搭建个人数据问答应用、又不想从头编写检索流程的使用者。当前数据源支持单个本地文件或网页,默认使用 OpenAI 同时完成 builder agent 与生成的 RAG agent,并以 LlamaIndex Python 作为应用基础。
亮点与能力
- 通过自然语言描述数据集、任务和 RAG 参数,创建初始 pipeline。\n- 支持单个本地文件或网页作为数据源。\n- 在 RAG Config 页面查看并修改 System Prompt、Top-K、Chunk Size、Embed Model 和 LLM。\n- 可选择是否加入 summarization tool,而不只是执行 top-k retrieval。\n- 修改配置后可通过 Update Agent 更新代理。\n- 生成的 RAG Agent 提供标准聊天界面,可针对数据提问。\n- 代理能够根据问题选择 top-k vector search,或在启用时选择 summarization。
组成与分工
- Streamlit:提供 Home、RAG Config 和 Generated RAG Agent 等页面及聊天交互界面。\n- OpenAI:默认同时作为 builder agent 和生成的 RAG agent 的模型服务。\n- LlamaIndex Python:作为该应用构建所使用的 RAG 应用基础。\n- Builder agent:根据数据源、任务和参数描述生成 RAG 配置。\n- RAG Config:展示并允许手动调整 system prompt、摘要、检索数量、分块、嵌入模型和 LLM 等参数。\n- 本地文件或网页:当前支持的两类数据源,供生成的 RAG Agent 检索和回答。
前置要求
项目要求先克隆仓库并进入 rags 项目目录。官方建议为依赖创建 Python 虚拟环境,然后使用 Poetry 安装依赖。\n\n创建虚拟环境:\n\n``\npython3 -m venv .venv\n`\n\n安装开发依赖:\n\n`\npoetry install --with dev\n`\n\n默认使用 OpenAI,因此需要在 home folder 下创建 .streamlit/secrets.toml,并写入 OpenAI key:\n\n`\nopenai_key = ""\n``
实施步骤
1. 准备项目环境\n\n克隆项目后进入 rags 项目文件夹,并按前置要求创建虚拟环境。之后安装项目及开发依赖。\n\n``\npoetry install --with dev\n`\n\n### 2. 配置 OpenAI 密钥\n\n在 home folder 下添加 .streamlit/secrets.toml,将 替换为实际密钥。默认配置会让 OpenAI 同时服务 builder agent 和生成的 RAG agent。\n\n`\nopenai_key = ""\n`\n\n### 3. 启动应用\n\n从项目的 home page 文件启动 Streamlit 应用:\n\n`\nstreamlit run 1_🏠_Home.py\n``\n\n### 4. 创建 RAG pipeline\n\n进入 Home Page 后,用自然语言描述数据集、任务以及典型 RAG 参数。数据集目前可选择单个本地文件或网页。builder agent 会据此生成 RAG 参数。\n\n### 5. 检查并更新配置\n\n进入 RAG Config 页面,查看并按需修改生成的 system prompt、摘要开关、Top-K、Chunk Size、Embed Model 和 LLM。修改后点击 Update Agent 更新代理。\n\n### 6. 查询数据\n\n进入 Generated RAG Agent 页面,在聊天界面提出关于数据的问题,代理会使用 top-k vector search,或在启用时使用 summarization。
使用与配置要点
运行后,建议按三个页面顺序使用。Home Page 用于描述数据集、任务和参数;其中任务描述会用于初始化 RAG pipeline 所用 LLM 的 system prompt。RAG Config 用于检查 builder agent 生成的参数,并允许人工调整。\n\n可调整的核心配置包括:\n\n- System Prompt:定义 RAG agent 的任务行为。\n- Include Summarization:决定是否加入 summarization tool。\n- Top-K:控制检索文档数量。\n- Chunk Size:控制文本分块参数。\n- Embed Model:指定嵌入模型。\n- LLM:指定生成模型。\n\n如果手动修改参数,需要点击 Update Agent。若看不到该按钮,说明 agent 尚未创建,应先回到 Home 页面完成设置。agent 创建后,在 Generated RAG Agent 页面提问即可验证其是否能够围绕数据回答问题。
注意事项与常见问题
- 当前数据源范围是单个本地文件或网页,项目文档表示未来可继续接受其他数据源建议。\n- builder agent 默认使用 OpenAI;文档说明 GPT-4 variants 在实际构建 agent 方面结果最可靠。\n- 虽然可以自定义 builder agent 使用的 LLM,并提供了 Anthropic 示例,但文档说明 Claude 目前无法正常工作。\n- 生成的 RAG Agent 支持 OpenAI、Anthropic、Replicate 和 HuggingFace 对应的模型标识格式;使用时需要向 builder agent 明确指定 ID。\n- 嵌入模型默认支持
text-embedding-ada-002,也支持 Hugging Face 模型;Hugging Face 模型需要使用local:前缀。\n- 如果升级 RAGs 版本后启动出现问题,可能需要删除 home directory 中的cache文件夹,因为不同版本间存储数据结构可能发生 breaking changes。\n- 如果遇到问题,项目建议提交 GitHub issue 或加入 Discord。
优缺点
- ✓ 支持自然语言创建RAG流程
- ✓ 生成参数可手动调整
- ✕ 当前仅支持单个本地文件或网页
- ✕ Claude目前无法正常构建代理
出处
本方案挖掘自开源项目 run-llama/rags,方案内容与实施命令均来自其 README 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。