policy-rag-mcp-server
政策文档问答助手 — RAG + MCP Server (LangChain, Azure AI Foundry, PostgreSQL/pgvector, Docker, Langfuse)
一个基于真实澳大利亚公共政策文档(昆士兰州政府财务/ICT 政策及 ATO 联邦税务指南)的问答助手,构建为检索增强生成(RAG)流水线,并以 MCP(Model Context Protocol)服务器形式暴露——因此它可以作为可调用工具接入 Claude Desktop 或任何其他兼容 MCP 的客户端,而不仅仅是一次性脚本。从 PDF 摄取到工具本身,整个流水线均通过 Docker 容器化运行,并使用 Langfuse 追踪进行端到端检测。
目标
构建此项目是为了弥补近期求职申请(Queensland Treasury、Warren and Mahoney、McCosker、CI&T、Datacom)中发现的特定 AI 工程师技能缺口——通过 MCP 实现代理工具、基于 LangChain 的编排、真实的向量数据库(而非嵌入式/玩具级存储)、容器化、具名的云原生 AI 平台(特指 Azure AI Foundry,而不仅仅是"一个 OpenAI API 密钥"),以及 LLMOps 可观测性。目标不是收集证书,而是构建一个真实、可运行、端到端的系统,以实践方式展示全部六项技能——与姊妹项目 lead-scoring-databricks-pipeline 采用的方法相同。
该应用本身反映了一个现实的企业用例:"让员工针对我们自己的政策文档提出自然语言问题,每个答案都可追溯到真实的来源页面"——特别与政府相关岗位的主题高度契合。
Related MCP server: AusLaw MCP
使用的数据集
8 份真实 PDF 文档(共 162 页),直接来自官方 .gov.au 域名——无第三方镜像:
FAH_Volume_1_Introduction_2025.pdf— 昆士兰财务问责手册,第 1 卷Overview-of-Queensland-Financial-Accountability-Framework-as-at-Jan-2020.pdfict-as-a-service_decision_framework-overview_v1_0_0.pdfpaf-policy-overview.pdf/paf-supporting-guidelines.pdf— 昆士兰项目保障框架(含公私合作伙伴关系)n75057 [DE-81739] - 2026 Tax Time toolkit for small business_DIGITAL.pdf— ATOn75127 [DE-73758] - Residency for tax purposes - factsheet_DIGITAL.pdf— ATOtr2023-001.pdf— ATO 税务裁定 2023/1
语料库刻意分为两个集群——昆士兰州政策与澳大利亚联邦税务指南——因此检索必须真正区分州级与联邦级来源,以及正式裁定与相关主题的通俗语言摘要,而不是简单地匹配单个明显关键词。最初的一组 11 份文档(344 页)被缩减为这 8 份(162 页),以保持语料库足够大以构成真正的检索问题,同时保持快速迭代。
架构与流水线
flowchart LR
subgraph Ingestion["Ingestion (run once, re-run on doc changes)"]
A[Policy PDFs] --> B[Chunking\nLangChain RecursiveCharacterTextSplitter]
B --> C[Embed\nAzure text-embedding-3-small]
C --> D[(PostgreSQL + pgvector\nvia Docker)]
end
subgraph Query["Query time"]
E[MCP Client\ne.g. Claude Desktop] --> F[MCP Server\nPython, containerized]
F --> G[LangChain RAG chain]
G --> D
G --> H[Azure AI Foundry\ngpt-5-mini]
H --> G --> F --> E
end
G -. traces .-> I[Langfuse\nobservability]摄取: 每份 PDF 使用 LangChain 的 PyPDFLoader 逐页加载(保留源文件名 + 页码作为元数据以供后续引用),然后使用 RecursiveCharacterTextSplitter 以 1000 字符 / 150 重叠进行分割——在真实语料库上直接比较后,选择了此配置而非较小的 500/50 分割(950 个 vs. 521 个块);较大的块大小更适合这些程序性、结构密集的政策文档,为模型每个检索片段提供更多上下文。生成的 521 个块中的每一个都通过 Azure 的 text-embedding-3-small 进行嵌入,并写入运行在 Docker 中的 PostgreSQL 数据库,pgvector 扩展直接在关系数据库内实现向量相似度搜索,而非使用单独的专用向量存储——这是一种更具生产可信度的模式,因为许多真实组织会在其已有的 Postgres 实例上添加向量搜索。
查询时: 问题使用相同模型进行嵌入,PostgreSQL 通过向量相似度返回最相似的前 4 个块,这些块被"填充"到提示中,指示 gpt-5-mini 仅根据检索到的上下文回答——或者说"我不知道",而不是依赖其自身的通用知识。答案连同其引用的每个块的准确来源文档和页码一起返回,因此每个答案都可以独立验证。
接口: RAG 链使用官方 Python MCP SDK 包装为 MCP 服务器,暴露两个工具——query_policy_docs(核心问答能力)和 list_indexed_documents(让客户端在提问前了解实际覆盖的内容)。RAG 逻辑和 MCP 协议层有意放在不同的文件中,以便底层能力将来可以在不修改的情况下复用于不同的接口。服务器通过 Docker 容器化;由于 MCP 的 stdio 传输要求服务器直接连接到客户端的 stdin/stdout,它作为按需为每个连接生成的短期容器运行(docker compose run --rm -i),不同于始终运行的 PostgreSQL 容器。
可观测性: 每个查询都通过 Langfuse 进行端到端追踪——检索和生成嵌套在每个问题的一个连接追踪下,显示确切的提示、检索到的块、延迟和令牌成本。
使用的模型
两个模型均通过 Azure AI Foundry 部署(刻意选择而非经典的"Azure OpenAI"资源类型,因为 Foundry 在多个目标职位发布中被明确提及):
gpt-5-mini— 生成,temperature=0以获得忠实、字面的答案,基于检索到的文本而非创造性输出。text-embedding-3-small— 嵌入,用于文档语料库和传入问题。
此 Foundry 资源使用 Azure 较新的统一 v1 API 接口(.../openai/v1),因此集成使用 LangChain 的普通 ChatOpenAI / OpenAIEmbeddings 类,配合 base_url + api_key + model,而非 Azure 特定的 AzureChatOpenAI / AzureOpenAIEmbeddings 类——后者针对较旧的带日期 API 版本端点方案,对此资源会返回 404。
结果与见解
使用 5 个真实测试问题在实时系统上手动评估:
"《财务问责手册》旨在帮助机构做什么?" → 正确,近乎逐字的基于来源的答案,引用准确。
"ICT 即服务决策框架帮助机构决定什么?" → 正确,捕捉到了真正的细微差别(部署/服务模型、风险评估)。
"法国的首都是哪里?"(刻意超出范围)→ 正确回答"我不知道",而非使用模型自身的通用知识——关键的反幻觉测试。
"根据昆士兰州的 PPP 政策,什么是公私合作伙伴关系?" → 回答"我不知道"。通过直接检查源 PDF 的提取文本独立验证:该文档确实从未在其 23 页中以通俗语言定义该术语——这是一个真实、可辩护的语料库缺口被正确识别,而非检索失败或编造答案。
"小企业税务时间工具包提到了哪些记录保存义务?" → 正确,具体细节,引用准确。
5/5 合理行为 — 3 个正确的基于来源的答案和 2 个正确的拒绝(一个真正超出范围,一个真实语料库缺口被正确识别而非幻觉)。区分"检索错过了正确的块"与"语料库确实不包含答案"是一项真正的 RAG 评估技能,本轮展示了两种失败模式都被正确处理——而不仅仅是目测通过/失败。
已针对真实 MCP 客户端(Claude Desktop)进行端到端验证,既通过 .venv 在本地运行,也通过 Docker 完全容器化运行,每个查询都在 Langfuse 中追踪。
设置与使用
要求: Docker Desktop、Python 3.13、部署了 gpt-5-mini 和 text-embedding-3-small 的 Azure AI Foundry 资源,以及(可选)用于追踪的免费 Langfuse Cloud 账户。
将
.env.example复制为.env,填写你自己的 Azure、Postgres 和(可选)Langfuse 凭据。启动向量存储:
docker compose up -d postgres摄取文档(一次性操作,或每当文档集变更时):
pip install -r requirements-ingest.txt python embed_and_store.py直接从 CLI 运行助手:
python rag_chain.py或将其作为 MCP 工具连接:构建服务器镜像(
docker compose build mcp-server),然后将其添加到你的 MCP 客户端配置中(例如 Claude Desktop 的claude_desktop_config.json):"policy-rag": { "command": "docker", "args": ["compose", "-f", "<path-to-repo>/docker-compose.yml", "run", "--rm", "-i", "mcp-server"] }
结论
该流水线已完全端到端运行:真实政府 PDF 被分块、嵌入并存储在真实向量数据库中;检索和生成基于来源,并正确拒绝超出语料库的回答;整个能力作为符合标准的 MCP 工具暴露,已针对真实 MCP 客户端进行实时验证;服务器已容器化且可移植;每个查询都通过成本、延迟和完整上下文进行追踪以实现可观测性。每个被列为目标技能缺口的层面——MCP、LangChain、真实向量数据库、Docker、Azure AI Foundry 和 LLMOps 追踪——都通过可运行、经过测试的代码而非仅教程式实现得到展示。
作者信息
Varun Vikas Jaiswal 2026
关键词
RAG、检索增强生成、LangChain、MCP、Model Context Protocol、Azure AI Foundry、Azure OpenAI、pgvector、PostgreSQL、向量数据库、向量相似度搜索、Docker、Docker Compose、Langfuse、LLMOps、可观测性、Python、AI 工程师
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI agents to search AustLII (Australian Legal Information Institute) for real Australian legislation and case law. Provides citations with direct links for legal research and verification.
- AlicenseAqualityAmaintenanceEnables users to search and retrieve Australian legislation and case law with full-text content extraction. Provides structured results with citation metadata and OCR support for archival PDFs.122333Apache 2.0
- FlicenseNot gradedqualityNot gradedmaintenanceEnables local indexing and semantic search of PDF documents (like AGLC4 style guide) with OCR support, allowing LLM tools to query PDF content and retrieve relevant text snippets with context.
- FlicenseNot gradedqualityCmaintenanceConnects policy documents to Claude.ai via vector search, allowing natural language querying and retrieval of indexed documents.
Related MCP Connectors
Australian tax knowledge base for agents: 34,500+ ATO documents, cited answers to any tax question.
Query any docs site via MCP. Submit a URL, ask questions, get cited answers.
Resolve, search and verify legal citations against the official sources, with provenance.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/VarunJaiswal05/policy-rag-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server