Skip to content

ragPipeline.py

概述

answerGeneration/ragPipeline.py 是串联了“检索”与“生成”核心功能的胶水执行中心。它将用户的终端查询,通过已经预加载了的各项组件实例:例如基于大模型的文档检索器(Retriever)等,整合为一个从输入端到答案输出端的全生命周期函数流水线。

它的工作就是调用前置模块拿回一系列可能有用的知识语料库文档段落 chunks,组装在事先打磨完好的回答 Prompt 框架内,最后将带着丰满前因后果的新提示词发送给本地的大语言评判执行者(如配置了 Qwen 的模型接口实例)执行生成并流式将数学知识相关的答案结果抛回给用户端(或者保存到测训日志 json)。

核心方法与流程

setup_pipeline()

利用全局设置与配置管理库(config.toml),把模型接口及对应的各个子库(例如预载好的 FAISS 搜索客户端,词形还原对象等),进行状态复原并准备给请求端进行实例化或者缓存以便在并发中重用配置依赖句柄。

_format_context(docs) -> str

由于把检索回来的原始分词对象列表丢入大语言模型并不直白(往往长短不一带着冗余元属性)。此内部函数是用来抽提所有召回的高相关段落内部的 “page_content”(原书正文片段),配合它们可能来自于的多本书籍来源进行合并(常使用带标题、序号和换行符的方式,如 “[片段1]: 这个定理讲述了...”),以便为 LLM 提供最清晰的“你只看这里就行了”的文本隔离区域(Context Window)。

_build_rag_prompt(query, context, prompt_template_name="default") -> (str, str)

这是沟通两代处理流程(查与答)中至关重要的拼图。它调取了位于 promptTemplates.py 里的规则模板结构或是其它专门的系统定义指令(如:“基于提供的参考片段解答数学证明,绝不使用你的内部幻觉造假概念,遇到确实没有给出具体推导的就坦诚告知‘语境内容未提及此部分...’等”)。把整理好带有原文依据字符串 context 与新提问 query 注水到模板空位里,生成为最终的一套给 API 的 messages(通常被包装成包含 System Prompt 与 User Prompt 两段)。

run_pipeline(query: str) -> dict

提供给 API 或者 CLI 主函数的顶级对外封装句柄:它统合了:

  1. retrievers.retrieve(query, top_k) -> 拿到候选参考 docs,耗时和数量会被记录在字典内以分析其精度情况。
  2. 调用 _format_context 进行 docs 清洗。
  3. _build_rag_prompt(query, context) 打包对话语句结构阵列向远程大模型通信发起一轮推测问询(如 OpenAI / Qwen 代理类)。
  4. 解析拿到的应答字符串片段返回,将组装好的一揽子指标如耗时、引用的核心片断 metadata 都丢进响应的 JSON 体回传给客户端并落库报告日志 reports/ 里供查看。

main() 演示用启动器

允许在被赋予了正确的索引目录地址下通过控制台参数传递:

bash
# 进行一次简单的快速的 RAG 测试探针请求
python answerGeneration/ragPipeline.py --query "微积分基本定理的核心思想是什么?"

它会在屏幕上反馈检索到支持其答案的具体书籍以及大语言模型的归纳结果以作体验和调试(主要供开发环境或本地演示)。

Math-RAG 毕业设计项目