【免费下载链接】mini-ragAn Educational Project (step by step) to teach how to build a production-ready app for RAG application.项目地址https://gitcode.com/gh_mirrors/mi/mini-rag点击查看免费下载mini-rag 是一个手把手教你构建生产级 RAG 应用的教育项目它内置的多语言 Prompt 模板系统值得一提仅靠一个类 TemplateParser就把 RAG 用到的全部 Prompt 拆分为按语言组织的模板文件同一套问答流程只需修改一行配置就能在英文、中文等语言之间无缝切换。本文带你拆解这套设计并演示如何三步扩展一种新语言。mini-rag 是什么RAG 应用的完整教学项目一句话定位mini-rag 是一个最小化的 RAG检索增强生成问答系统实现配合一套分步视频教程讲解整个代码库。项目结构非常清晰 FastAPI 提供 REST 接口main.py Celery RabbitMQ 处理文件解析、向量索引等异步任务celery_app.py LLM 与 VectorDB 均采用工厂模式Provider 可自由替换️ Prompt 统一收口在 templates/ 目录按语言隔离读完这个项目你拿到的不只是一个能跑的 RAG Demo而是一套生产级应用的完整设计思路。为什么 RAG 应用需要多语言 Prompt 模板RAG 问答分三步检索相关文档 → 组装完整 Prompt → 调用 LLM 生成答案。mini-rag 把这套流程放在 NLPController.py 的answer_rag_question中调用search_vector_db_collection从向量库检索 Top-N 相关文本块用三类模板拼装完整 Promptsystem_prompt角色设定、document_prompt逐篇文档、footer_prompt提问与作答格式交给 LLM 生成最终答案如果 Prompt 被写死成英文当阿拉伯语用户提问时模型就难以用用户的语言作答。所以 mini-rag 把所有 Prompt 文本放进按语言分目录的模板文件只留$doc_num、$chunk_text、$query等占位符运行时再填充真实内容。模板文件长什么样按语言目录组织所有 Prompt 模板位于src/stores/llm/templates/locales/下目前项目内置英文和阿拉伯语两种templates/ └── locales/ ├── en/rag.py # 英文模板 └── ar/rag.py # 阿拉伯文模板以英文版 en/rag.py 为例每个文件就是几个string.Template对象system_prompt Template(You are an assistant to generate a response for the user. ...) document_prompt Template(## Document No: $doc_num\n### Content: $chunk_text) footer_prompt Template(## Question:\n$query\n## Answer:)阿拉伯文版 ar/rag.py 中是完全同构的三个变量只是文案换成了阿拉伯语。这正是无缝切换的关键业务代码依赖的是变量名而不是哪种语言的文案。TemplateParser 核心机制解析全部魔法都藏在 template_parser.py 这一个文件里核心有三点。1语言校验与自动回退构造时接收language当前语言与default_language回退语言默认en两个参数。set_language方法#L13-L21会先做目录存在性检查传了language但locales/{language}目录不存在 → 静默回退到默认语言语言为None→ 直接使用默认语言这意味着无论配置文件里怎么填系统都不会崩溃只会优雅降级。2动态按需加载模块get(group, key, vars)被调用时通过__import__动态导入对应模块#L23-L43module __import__(fstores.llm.templates.locales.{language}.{group}, fromlist[group]) return getattr(module, key).substitute(vars)两个细节值得品味按需加载用到哪组模板才加载哪组不会一次性载入所有语言包substitute替换这是string.Template的原生能力$doc_num等占位符在运行时被替换为真实值3分组级回退第二重保险若当前语言下缺少某个分组文件比如某语言只翻译了部分模块get会自动回退到默认语言的同名文件#L29-L31。语言级回退 分组级回退双重保险保证即使翻译不完整系统也依然完整可用。配置如何驱动语言无缝切换语言参数来自配置文件 config.pyPRIMARY_LANG: str en # 业务使用的当前语言 DEFAULT_LANG: str en # 回退使用的默认语言项目里有两处入口初始化 TemplateParser保证前后端行为一致API 端FastAPI 启动时创建main.py#L46-L49异步任务端Celery 的get_setup_utils中创建celery_app.py#L40-L43实例被注入NLPController后answer_rag_question组装 Prompt 只需三行system_prompt self.template_parser.get(rag, system_prompt) document_prompt self.template_parser.get(rag, document_prompt, {doc_num: i, chunk_text: ...}) footer_prompt self.template_parser.get(rag, footer_prompt, {query: query})想把整个系统切换到阿拉伯语只需把环境配置里的PRIMARY_LANG改掉一行 Python 代码都不用动。三步给系统添加中文支持这套设计最迷人的地方在于新增一种语言完全不用改代码。新建目录src/stores/llm/templates/locales/zh/复制 en/rag.py将三个模板翻译成中文保持变量名system_prompt、document_prompt、footer_prompt和占位符$doc_num、$chunk_text、$query不变配置PRIMARY_LANGzh服务重启后整个问答流程即输出中文。若某组模板尚未翻译TemplateParser 会自动回退到默认语言服务不会中断。总结小模块背后的设计智慧 TemplateParser 只有四十多行代码却体现了生产级应用的几个通用最佳实践配置优于代码语言切换只是一个配置项的事优雅降级双层回退保证缺翻译时系统降级而不是崩溃按需加载__import__动态导入避免加载无用模板结构同构所有语言使用同一套变量名与占位符业务代码对语言完全无感知如果你想系统学习如何构建 RAG 应用建议完整阅读 项目 README这套多语言 Prompt 模板模块就是把简单的事做好的绝佳范例。赞分享【免费下载链接】mini-ragAn Educational Project (step by step) to teach how to build a production-ready app for RAG application.项目地址https://gitcode.com/gh_mirrors/mi/mini-rag点击查看免费下载相关推荐文本分类特征工程完整指南从TF-IDF到降维技术的终极教程 文本分类特征工程完整指南从TF IDF到降维技术的终极教程 文本分类是自然语言处理的核心任务之一而特征工程则是决定分类效果的关键环节。本文将为您详细介3分钟解决Home Assistant插件下载难题HACS极速版完全指南3分钟解决Home Assistant插件下载难题HACS极速版完全指南 还在为Home Assistant插件下载缓慢而烦恼吗每次安装新集成都要等待十几分插件系统智能家居MPV_lazy多语言支持中英文界面无缝切换MPV_lazy多语言支持中英文界面无缝切换 引言 在全球化的今天媒体播放器的多语言支持已成为提升用户体验的关键功能。MPV_lazy作为一款功能强大的开源上一篇用架构决策记录ADR落地 AWS 云基础设施选型从决策到治理的完整实战指南下一篇Psalm TypeDoesNotContainNull 错误解析在静态分析中识别不可能成立的 null 判断创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?