前言
CMU(卡内基梅隆大学)开源RAGViz:它提供了对检索文档和模型注意力的可视化,帮助用户理解生成的标记与检索文档之间的交互,可用于诊断和可视化RAG系统。
Query=“为什么猪会飞?”的可视化。突出显示的生成内容没有基于任何上下文文档,展示了内部幻觉。
RAGViz特性和用例
- 注意力可视化:RAGViz通过标记高亮显示来可视化生成的标记序列对输入标记的关注度,并通过颜色强度来衡量关注度。
- 文档级别的关注度:展示生成输出对每个检索段落的关注度,以累积文档级别的注意力分数形式展现。
- 拖动选择用户界面:用户可以通过拖动选择来轻松检查任何标记序列的累积关注度。
- 文档切换功能:用户可以选择在构建答案上下文时省略特定的标记和文档,以比较添加或移除标记和文档对LLM输出的影响。
- 自定义上下文文档数量:用户可以指定从数据集中检索的相关文档片段的数量。
- API密钥认证:RAGViz实现了HTTP请求上的中间件功能,以确保请求经过适当的认证。
在使用文档切换功能时,对选定的标记序列进行注意力可视化
演示了RAGViz识别和调试外部幻觉的能力
RAGViz系统架构
RAGViz的系统架构包含四个主要组件:近似最近邻(ANN)索引、后端服务器、LLM推理服务器和前端用户界面。这些组件被设计为可以独立配置,以提高灵活性。
- ANN索引(Dense Retrieval):
- 在密集检索中,查询和文档被编码成高维特征向量,然后通过相似性搜索(如余弦相似度或内积)来确定查询向量的最近邻居。
- RAGViz使用分布式系统来存储和索引这些向量,每个节点存储一部分向量并提供REST API来返回查询的近似最近邻。
- 上下文构建器(Context Builder):
- 后端服务器处理构建语言模型上下文的所有逻辑,包括加载嵌入模型、管理后端逻辑和存储完整语料库。
- 接收到的查询经过认证后被编码成嵌入向量,并路由到所有工作节点进行ANN搜索。
- 从每个工作节点检索到的顶部文档会被重新排序,以返回整个数据集中查询的最终最近邻。
- RAGViz提供两种文档片段提取方法:naive first(简单首段)和sliding window(滑动窗口)。
- 生成和注意力输出(Generation and Attention Output):
- RAGViz需要一个GPU节点来运行LLM推理任务。
- 系统使用vLLM库进行快速LLM推理,生成文本,但由于vLLM不支持注意力输出,系统随后使用HuggingFace模型库来获取注意力分数。
- 这些分数通过对所有头和层的文档窗口的平均值来计算累积的文档级别注意力分数。
- 前端用户界面(Frontend User Interface):
- 前端用户界面基于Next.JS框架构建,并作为静态文件托管在Apache web服务器上。
- 用户界面使用表单收集查询信息和其他参数,并在接收到后端的注意力分数后,将它们存储在React状态中以用于注意力可视化。
- 用户可以通过拖动选择输出标记来检查累积关注度,前端会突出显示文档中相关度高的标记。
- 前端还提供切换文档包含状态的按钮,并将带有更新文档集的新查询路由到重写端点。
展示了窗口大小为5、步长为2的滑动窗口片段提取方法的演示。滑动窗口方法选择具有最高内积相似度的片段。相反,简单首段方法总是选择显示为绿色的首个窗口。
https://github.com/cxcscmu/RAGViz.
demo video of RAGViz https://youtu.be/cTAbuTu6ur4
https://arxiv.org/pdf/2411.01751
RAGVIZ: Diagnose and Visualize Retrieval-Augmented Generation