ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Pathway LLM/RAG 实战示例详解:用 LLM xpack 构建实时 RAG、Adaptive RAG 与文档索引流水线

Pathway LLM/RAG 实战示例详解:用 LLM xpack 构建实时 RAG、Adaptive RAG 与文档索引流水线 Pathway LLM/RAG 实战示例详解用 LLM xpack 构建实时 RAG、Adaptive RAG 与文档索引流水线【免费下载链接】pathwayPython ETL framework for stream processing, real-time analytics, LLM pipelines, and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pathway本文围绕 PathwayPathway Live Data Framework官方整理的 LLM 示例集合LLM Examples展开它用一组可直接运行的 RAG / 文档索引 / 非结构化数据提取示例展示了如何用 Pathway 的 LLM 工具链pathway.xpacks.llm在无需独立 ETL 的前提下构建“知识永远最新”的大模型应用。读完后你将掌握每个示例对应的实现原理——从DocumentStore的索引机制、UnstructuredParser/TokenCountSplitter的文档处理到AdaptiveRAGQuestionAnswerer的动态检索策略并能在本仓库中找到每个示例对应的教程文档与源码实现位置。示例总览Pathway LLM 工具链能做什么Pathway 的 LLM xpackpathway[xpack-llm]为流式数据处理框架内置了一整套 LLM/RAG 组件文档解析器parsers、文本切分器splitters、向量化器embedders、重排器rerankers、LLM 聊天封装llms、预置 Promptprompts、HTTP 服务封装servers以及整条问答流水线question answering。官方 LLM 示例页正是基于这些组件收集的一组实战模板全部以 llm-app 模板仓库中的templates/目录形式提供并支持 Docker 一键运行。官方示例分为两类Featured examples精选示例与Other examples其他示例。下表完整继承自原示例页示例说明本仓库对应文档question_answering_rag带“永远最新知识”的 RAG 应用展示如何用 Pathway 创建 RAG 应用无需单独 ETL 即可为 LLM 提供始终最新的知识。可从 SharePoint、Google Drive 等不同数据源构建向量库并用任意 LLM 模型基于索引文档回答问题Create your own RAGadaptive_ragAdaptive RAG展示 Adaptive RAG 技术利用 LLM 的反馈动态调整 RAG Prompt 中携带的文档数量Adaptive RAG Appprivate_rag全私有 RAG展示如何用 Pathway、Mistral 与 Ollama 搭建带自适应检索的私有 RAG 流水线Private RAG App with Mistral and Ollamamultimodal_rag多模态 RAG启动一个依赖文档处理流水线的多模态 RAG解析阶段使用 GPT-4o。Pathway 从文件夹中的非结构化财务文档提取信息文档变更或新文档到达时自动更新结果使 AI 应用与文档驱动器保持常驻连接、实时同步并支持表格、图表等视觉元素相比传统 RAG 难以回答表格类问题的局限多模态方案在表格信息抽取上表现更佳Multimodal RAG 模板document_indexing实时文档索引一个基础的实时文档索引流水线示例从 SharePoint、Google Drive 等不同数据源索引文档可查询索引、获取索引统计信息与文件元数据Document Indexing 模板drive_alertDrive 告警流水线与 “Alert” 示例几乎相同唯一区别是数据源换成 Google DriveDrive Alert 模板unstructured_to_sql_on_the_fly非结构化转 SQL从非结构化数据PDF 与查询语句中“即时”抽取并结构化数据Unstructured to SQL精选示例一知识永远最新的 RAG 问答应用question_answering_rag 是 LLM 示例中的核心模板。它的核心价值主张是索引实时化是 RAG 答案不“过期”的唯一途径。Pathway 的 Live Data Framework 把静态数据与流式数据用同一套模型处理因此文档目录一旦发生变化新增、修改、删除文件索引会自动增量更新RAG 的回答始终基于最新文档。安装与前置条件按 Create your own RAG 教程先安装带 LLM xpack 的 Pathwaypip install pathway[xpack-llm] python-dotenv并将 OpenAI API key 放入.env文件OPENAI_API_KEYsk-...完整流水线代码骨架RAG 流水线的七个环节为文档索引 → 用户查询 → 文档检索 → 上下文构建 → Prompt 构造 → 答案生成 → 返回输出。下面按官方教程给出完整可运行骨架以本地./data/目录中的 PDF 为例。1. 导入 LLM xpack 组件import pathway as pw from pathway.stdlib.indexing.nearest_neighbors import BruteForceKnnFactory from pathway.xpacks.llm import llms from pathway.xpacks.llm.document_store import DocumentStore from pathway.xpacks.llm.embedders import OpenAIEmbedder from pathway.xpacks.llm.parsers import UnstructuredParser from pathway.xpacks.llm.splitters import TokenCountSplitter from dotenv import load_dotenv import os load_dotenv()2. 通过文件系统连接器读入文档documents pw.io.fs.read(./data/, formatbinary, with_metadataTrue)3. 组装DocumentStore的四个核心部件——文本切分器按 token 数切块、向量化器把文本变成语义向量、检索器工厂基于向量找最相关文档、解析器从文档中提取并结构化文本text_splitter TokenCountSplitter( min_tokens100, max_tokens500, encoding_namecl100k_base ) embedder OpenAIEmbedder(api_keyos.environ[OPENAI_API_KEY]) retriever_factory BruteForceKnnFactory( embedderembedder, ) parser UnstructuredParser( chunking_modeby_title, chunking_kwargs{ max_characters: 3000, new_after_n_chars: 2000, }, ) document_store DocumentStore( docsdocuments, retriever_factoryretriever_factory, parserparser, splittertext_splitter, )4. 用轻量 HTTP 服务接收用户查询webserver pw.io.http.PathwayWebserver(host0.0.0.0, port8011) class QuerySchema(pw.Schema): messages: str queries, writer pw.io.http.rest_connector( webserverwebserver, schemaQuerySchema, autocommit_duration_ms50, delete_completed_queriesFalse, )5. 把查询整理成DocumentStore.retrieve_query期望的格式字段包括query用户问题、k检索文档数、metadata_filter可选按元数据过滤、filepath_globpattern可选按路径模式过滤文件。这里为所有查询统一取k1、不做过滤也可在QuerySchema中增加k字段实现按查询定制queries queries.select( query pw.this.messages, k 1, metadata_filter None, filepath_globpattern None, )6. 检索、构建上下文与 Promptretrieved_documents document_store.retrieve_query(queries) retrieved_documents retrieved_documents.select(docspw.this.result) queries_context queries retrieved_documents def get_context(documents): content_list [] for doc in documents: content_list.append(str(doc[text])) return .join(content_list) pw.udf def build_prompts_udf(documents, query) - str: context get_context(documents) prompt ( fGiven the following documents : \n {context} \nanswer this query: {query} ) return prompt prompts queries_context queries_context.select( promptsbuild_prompts_udf(pw.this.docs, pw.this.query) )7. 用 LLM 生成答案并写回model llms.OpenAIChat( modelgpt-4o-mini, api_keyos.environ[OPENAI_API_KEY], # 从环境变量读取 OpenAI API key ) responses prompts.select( *pw.this.without(pw.this.query, pw.this.prompts, pw.this.docs), resultmodel( llms.prompt_chat_single_qa(pw.this.prompts), ), ) writer(responses)8. 运行并用 curl 验证pw.run() # 在 main.py 末尾 python main.py curl --data { messages: What is the value of X?} http://localhost:8011需要 UI 时可再叠加 Streamlit 等前端。更多索引细节可参考 Document Indexing 与 Vector Store 说明。源码印证DocumentStore到底做了什么在 DocumentStore 实现中可以看到它的完整职责读入含databytes 列通常由连接器formatraw/binary产生与可选_metadata列的 Table用 parser 解析、splitter 切块、doc_post_processors 可选后处理再由retriever_factory构建向量索引并暴露retrieve_query等查询方法。查询中的过滤能力同样可在源码中验证metadata_filter与filepath_globpattern会先经 _get_jmespath_filter 合并成一条 JMESPath 过滤表达式路径过滤使用globmatch对path字段做通配匹配这解释了为什么官方示例中这两个字段可以直接传None。DocumentStore还实现了McpServable接口见 MCP Server 文档因此索引本身可以对外暴露为 MCP 服务。精选示例二Adaptive RAG —— 动态控制检索数量Adaptive RAG 是 Pathway 提出的一种 RAG 优化技术不再固定检索k个文档塞进 Prompt而是根据 LLM 的反馈动态决定本轮需要多少文档。模型先基于少量上下文作答并给出“证据充分/不充分”的信号不充分时再扩大检索范围从而在保证准确率的同时显著降低 token 开销。模板文档Adaptive RAG App对应 llm-app 的templates/adaptive_rag目录支持 Docker 运行交互式原理讲解Adaptive RAG 图文笔记在源码层面该技术由 AdaptiveRAGQuestionAnswerer 实现它继承自BaseRAGQuestionAnswererL442后者又继承自SummaryQuestionAnswerer→BaseQuestionAnswererL388。也就是说模板 YAML 中只需声明BaseRAGQuestionAnswerer即可得到标准 RAG换成AdaptiveRAGQuestionAnswerer就获得动态检索行为。相关行为有专门的测试覆盖见 test_rag.py。精选示例三全私有 RAGMistral Ollamaprivate_rag 示例展示如何搭建完全不依赖外部云服务的私有 RAGLLM 与嵌入模型都跑在本地通过 Ollama 提供 Mistral 等模型检索仍使用 Pathway 的自适应检索。模板文档Private RAG App with Mistral and Ollama对应templates/private_rag深入文章Private RAG with Connected Data Sources using Mistral, Ollama, and Pathway从源码结构看本地化替换的本质是换 LLM 封装与 Embedder在模板 YAML 中把llm换成走本地api_base的LiteLLMChat、把embedder换成SentenceTransformerEmbedder整条流水线就不再调用任何外部服务——这正是 YAML 配置指南中给出的私有 RAG 构造方法。可用封装列表见 LLM Chats 文档 与 Embedders 文档。精选示例四多模态 RAGGPT-4o 解析财务文档multimodal_rag 示例针对一个传统 RAG 的明显短板基于表格/图表数据的问答。它把文档处理流水线中解析环节交给 GPT-4o 这类多模态模型从文件夹里的非结构化财务文档含表格、图表等视觉元素中提取信息文档变化或新增时流水线自动更新结果使 AI 应用与文档驱动器保持常驻连接。模板文档Multimodal RAG with Pathway对应templates/multimodal_rag案例讲解Multimodal RAG 文章仓库内还有可直接运行的演示 notebookmultimodal-rag.ipynb 与 multimodal-rag-using-Gemini.ipynb其他示例文档索引、Drive 告警与非结构化转 SQLRealtime Document Indexingdocument_indexing基础版实时文档索引流水线从 SharePoint / Google Drive 等数据源索引文档之后可以查询索引、获取索引统计、读取文件元数据。模板文档Document Indexing 模板原理与手写实现Document Indexing 教程演示 notebooklive_vector_indexing_pipeline.ipynbDrive Alert Pipelinedrive_alert与 Pathway 官方的 “Alert” 示例几乎一致唯一区别是数据源改为 Google Drive监控 Drive 中文件变化并触发告警。该示例也出现在 Slack 告警连接器文档中可配合pw.io.slack.send_alerts把事件推送到 Slack。Unstructured to SQL on the Fly从 PDF 等非结构化数据中即时抽取、结构化数据并写入 SQL。文档展示了整体架构解析 → 用 LLM 抽取字段 → 落入结构化表。运行方式就是简单的python app.py也支持 Docker。详见 Unstructured to SQL 文章。所有示例共享的底层组件从源码理解 LLM xpack上述示例并非彼此独立的脚本而是同一套 xpack 组件的不同组合。结合本仓库源码可以清楚看到“示例—组件”的映射关系组件源码位置作用官方文档DocumentStoredocument_store.py解析→切块→向量化→建索引→retrieve_query一站式封装Document Store 说明UnstructuredParserparsers.py底层调用 Unstructured 库解析 PDF/Office 等支持single/paged/elements模式与by_title等切块策略Parsers 文档TokenCountSplittersplitters.py按 token 数min_tokens/max_tokens tiktokenencoding_name切块尽量不在句子中间断开Splitters 文档OpenAIEmbedder等embedders.py文本→语义向量OpenAI/SentenceTransformer 等实现Embedders 文档llms.OpenAIChat/LiteLLMChat等llms.pyLLM 提供商封装实例本身就是可作用于 Table 列的 UDFLLM Chats 文档BaseRAGQuestionAnswerer/AdaptiveRAGQuestionAnswererquestion_answering.py预置的完整 RAG 问答流水线含自适应检索变体与RAGClientL1070LLM xpack 总览Rerankerrerankers.py对检索结果重排以提升相关性Rerankers 文档组件行为的正确性由 xpack 测试套件持续验证例如 test_document_store.py、test_rag.py、test_parsers.py、test_splitters.py 与 test_embedders.py。如何运行这些示例模板仓库与 YAML 配置所有示例统一托管在独立的 llm-app 模板仓库的templates/目录下每个模板都是app.pyapp.yaml的组合。本仓库提供了完整的运行指南Run a template克隆 llm-app 仓库后进入对应模板目录如question_answering_rag按 README 配置环境变量即可运行也提供 Docker 方式Configure YAML详解app.yaml中$sources、$document_store、$answerer等字段的组合方式以及用大写标识符引用环境变量的语法YAML 片段示例以 Adaptive RAG 为例给出可直接复制的完整 YAML 流水线配置。一个值得注意的事实question_answering_rag、adaptive_rag、multimodal_rag、private_rag 这几个模板共享同一份 Python 代码差异只体现在 YAML 配置见 YAML 配置指南——这本身就是 Pathway “声明式定义流水线”理念的直观体现切换 LLM 提供商、切换检索策略、切换文档源多数情况下只需要改配置。小结Pathway 官方 LLM 示例页的价值在于把“LLM xpack 组件”与“可运行模板”连接了起来question_answering_rag展示了从零搭建实时 RAG 的完整代码路径adaptive_rag与private_rag分别演示了动态检索降本与全本地化部署multimodal_rag补齐了表格/图表类文档的短板而document_indexing、drive_alert、unstructured_to_sql_on_the_fly则覆盖了索引、事件告警与非结构化数据落库三类高频场景。配合 LLM xpack 总览、xpack 源码 与 集成测试你既可以照抄模板快速上线也可以下钻到DocumentStore、AdaptiveRAGQuestionAnswerer等实现细节按需定制自己的实时 LLM 流水线。【免费下载链接】pathwayPython ETL framework for stream processing, real-time analytics, LLM pipelines, and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pathway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表