HR问答代理

基于检索增强生成(RAG)架构的HR助手,提供政策问答、简历筛选和入职任务跟踪功能,适用于企业HR部门。

  • by sanjanb
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 sanjanb/mcp-agent

使用说明

HR代理(模型上下文协议)

一个生产就绪的人力资源助理,使用基于模型上下文协议(MCP)的检索增强(RAG)架构回答人力资源政策问题。它提供有根据、有引文支持的回复;支持多个LLM提供商;并应用适合企业部署的性能和缓存策略。

现场演示

通过来源和结构化引用回答政策问题。

接口以低延迟配置运行,以加速响应。

简历筛选小组根据提供的职位描述对候选人进行排名。

主要特点

快速链接: 快速开始 · 建筑 · 运作原理 · 人力资源政策RAG功能 · 项目计划

核心能力

  • 有根据的检索-带有源引用的增强答案
  • 多提供商LLM支持(OpenAI、Gemini、自动回退)
  • 企业性能层:预热、低延迟模式、Redis缓存
  • 通过仅检索的基本模式实现离线弹性
  • 模块化MCP工具架构,实现快速扩展

高级功能

  • 简历筛选和排名(干净、专业的评分输出)
  • 机载任务跟踪(基于JSON的MCP工具)
  • 会话摘要缓存(具有内存回退功能的Redis)
  • 流式响应渲染可改善感知延迟
  • 通过聊天命令切换运行时提供程序
  • 延迟和缓存效率的性能指标

为什么此解决方案提供价值

演出

  • 初始化后的亚秒级热响应
  • 缓存减少了重复的嵌入和检索工作
  • 流式传输最大限度地缩短了到达第一个令牌的时间
  • 提供程序自动回退在瞬态故障下保持连续性

可靠性

  • 严格的引文格式限制了幻觉风险
  • 在没有API密钥的情况下优雅地降级为基本检索
  • 完整的请求和检索日志以实现可审计性
  • 可重复性确定性快速构造

用户体验

  • 用于政策和筛选的单一整合界面
  • 实时令牌流,布局稳定
  • 针对不同显示器尺寸的响应式设计
  • 可访问性考虑因素(焦点顺序、清晰对比)

建筑

  • 通过MCP工具实现与提供商无关的编排
  • 明确分离的UI、工具、检索和持久层
  • 横向扩展就绪:外部缓存、容器化模式
  • UI中显示健康和状态指示器

架构概述

具有明确职责分离的分层MCP架构:

  • UI(Streamlit):聊天界面、状态显示、流媒体、用户设置
  • MCP服务器和路由器:工具注册、编排、健康/状态检查
  • 工具–策略RAG:摄取、分块、相似性检索、提示汇编、引文格式
  • 工具-简历筛选:基于嵌入的候选人评分(相关性+技能覆盖率)和排名输出
  • 对话管理器:历史管理、摘要生成、上下文大小缩减
  • 缓存层:Redis或内存摘要和轻量级指标
  • 数据存储:色度矢量数据库和当地人力资源政策语料库;恢复存储以进行筛查
  • LLM提供者:具有回退逻辑的OpenAI/Gemini选择
%% Monochrome (Black & White) Architecture Diagram
flowchart LR
    subgraph UI
        ST["Streamlit Chat UI"]
    end

    subgraph MCP["MCP Server & Router"]
        Router["Router / Health"]
    end

    subgraph TOOLS["Tools"]
        subgraph RAG_GROUP["Policy RAG"]
            PS["PolicySearchTool"]
            RAG["RAGEngine"]
            CONV["ConversationManager"]
            CACHE[("Redis / In-Memory Cache")]
        end
        RS["ResumeScreeningTool"]
        ONB["OnboardingTool"]
    end

    subgraph DATA["Data Stores"]
        CHROMA[("Chroma Vector DB")]
        DOCS[("HR Documents")]
        RESUMES[("Resumes Store")]
        ONBDATA[("Onboarding JSON")]
    end

    subgraph LLM["Providers"]
        OPENAI["OpenAI"]
        GEMINI["Gemini"]
    end

    ST --> Router
    Router --> PS
    Router --> RAG
    Router --> RS
    Router --> ONB
    PS --> CHROMA
    PS --> DOCS
    RS --> RESUMES
    ONB --> ONBDATA
    RAG --> OPENAI
    RAG --> GEMINI
    CONV --> CACHE

    %% Grayscale styles
    classDef ui fill:#ffffff,stroke:#000000,stroke-width:1px
    classDef mcp fill:#f5f5f5,stroke:#000000,stroke-width:1px
    classDef tool fill:#ffffff,stroke:#000000,stroke-dasharray: 3 2
    classDef data fill:#f5f5f5,stroke:#000000,stroke-width:1px
    classDef prov fill:#ffffff,stroke:#000000,stroke-width:1px
    class ST ui
    class Router mcp
    class PS,RAG,CONV,CACHE,RS,ONB tool
    class CHROMA,DOCS,RESUMES,ONBDATA data
    class OPENAI,GEMINI prov

先决条件

  • Python 3.8+ 使用pip
  • Git 用于版本控制
  • 可选的:OpenAI或Gemini API密钥(用于AI响应)
  • 可选的:Redis服务器(用于分布式缓存)

快速入门(Windows PowerShell)

选项1:自动设置

# Clone and run the quick start script
git clone https://github.com/sanjanb/mcp-agent.git
cd mcp-agent
.\quick_start.bat

选项2:手动设置

# 1) Create and activate virtual environment
python -m venv .venv
.\.venv\Scripts\activate

# 2) Install dependencies
pip install -r requirements.txt

# 3) Configure API keys (optional for AI mode)
$env:OPENAI_API_KEY = "your-openai-key"
# OR
$env:GEMINI_API_KEY = "your-gemini-key"

# 4) Setup database and ingest sample documents
python setup.py

# 5) Warm up the system (reduces first response latency)
python scripts/warmup.py

# 6) Launch the application
streamlit run ui/streamlit_app.py

5分钟演示

  1. 启动应用程序:

    streamlit run ui/streamlit_app.py
    
  2. 测试策略查询:

    • “我有多少假期?”
    • “远程工作政策是什么?”
    • “告诉我健康保险福利”
  3. 探索功能:

    • 切换 低延迟模式 在侧边栏中提供更快的响应
    • 交换机提供商:类型 /provider auto 或 /provider openai
    • 清晰对话:类型 /clear
  4. 测试弹性:

    • 取消设置API密钥并刷新→ 基本模式继续工作
    • 注意回复下方的引用和源文件

配置指南

环境变量

LLM提供者(可选-启用AI响应)

# OpenAI Configuration
OPENAI_API_KEY=sk-...                    # Your OpenAI API key
OPENAI_MODEL=gpt-4                       # Default model (gpt-3.5-turbo, gpt-4)

# Google Gemini Configuration
GEMINI_API_KEY=...                       # Your Gemini API key
GEMINI_MODEL=gemini-1.5-pro             # Default model

# Provider Selection
LLM_PROVIDER=auto                        # auto, openai, gemini

矢量数据库和文档

VECTOR_DB_PATH=./data/vector_db          # Chroma database location
VECTOR_DB_COLLECTION_NAME=hr_policies    # Collection name
HR_DOCUMENTS_PATH=./data/hr_documents    # Source documents folder
EMBEDDING_MODEL=all-MiniLM-L6-v2        # Sentence transformer model

性能优化

# Redis Cache (optional - falls back to in-memory)
REDIS_URL=redis://localhost:6379/0
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_DB=0

# Low-Latency Mode Settings
FAST_OPENAI_MODEL=gpt-3.5-turbo         # Fast model for low-latency
FAST_GEMINI_MODEL=gemini-1.5-flash      # Fast Gemini model
LOW_LATENCY_MAX_TOKENS=350               # Token limit for fast responses
LOW_LATENCY_TEMPERATURE=0.0              # Lower temperature for consistency
LOW_LATENCY_BASIC_ONLY=false             # Force Basic mode in low-latency

简历筛选(可选)

RESUME_EMBEDDING_MODEL=all-MiniLM-L6-v2 # Model for resume embeddings
RESUME_STORAGE_PATH=./data/resumes       # Resume files location

性能注意事项

该系统包括几个性能优化:

  • 预热脚本:预初始化向量搜索和LLM连接
  • 对话缓存:Redis支持的摘要减少了提示大小
  • 低延迟模式:更快的模型,减少了令牌限制
  • 流媒体响应:渐进式UI更新,提升用户体验
  • 提供商自动回退:LLM提供商之间无缝切换

使用指南

聊天界面

提问:关于人力资源政策的自然语言查询:

  • “我有多少假期?”
  • “远程工作政策是什么?”
  • “告诉我健康保险的覆盖范围”
  • “绩效评估指南是什么?”

命令(键入聊天)

  • /clear --重置对话历史记录
  • /help --显示可用命令
  • /provider openai|gemini|auto --在运行时切换LLM提供程序
  • /status --显示系统运行状况和统计数据

侧边栏设置

  • 搜索结果(Top-K):要检索的文档块数(3-10)
  • 低延迟模式:通过优化模型实现更快的响应
  • 快速响应:更小的检索上下文以提高速度
  • 显示源:切换文档引用显示

状态指示灯

  • 文件:摄入的政策文件数量
  • 提供者:目前活跃的法学硕士提供者(OpenAI/Gemini/Basic)
  • 模式:AI模式(有引文)或基本模式(仅检索)
  • 缓存:Redis连接状态和命中率

简历筛选功能

上传职位描述和候选人简历以获取:

  • 排名候选人名单 具有相关性得分
  • 最匹配的片段 每份简历
  • 技能匹配细分 关键字分析
  • 自动筛查报告 有建议

性能指标

该项目旨在通过可衡量的优化实现企业级绩效:

响应时间

  • 冷启动:约2-3秒(预热前)
  • 热启动:~500ms(预热脚本后)
  • 低延迟模式:约200-400ms(快速型号)
  • 基本模式:~100-200ms(仅用于检索)

优化功能

  • 预热脚本:预初始化向量搜索和LLM连接
  • 对话缓存:Redis摘要将提示上下文减少了约60%
  • 流媒体响应:渐进式渲染,以获得更好的感知性能
  • 智能分块:优化文档分割以提高相关性
  • 提供商自动回退:LLM提供商之间的零停机切换

可扩展性指标

  • 文件容量:经过500多份政策文件的测试
  • 并发用户:通过Redis缓存支持多个会话
  • 内存效率:约200MB基础+每1000个文档块约50MB
  • 缓存命中率在同一环节中,重复问题的回答率超过80%

安全和隐私

数据保护

  • 当地第一建筑:文档保留在您的基础架构上
  • 最小API暴露:仅处理发送给LLM提供商的查询
  • 无PII存储:对话摘要是短暂的(30分钟TTL)
  • 审计日志:完成合规性请求/响应跟踪

秘密管理

  • 基于环境:仅通过环境变量的API键
  • 运行时切换:更改提供者而不更改代码
  • 故障弱化:在没有API密钥的情况下继续运行
  • 零知识:代码库或日志中未存储凭据

网络安全

  • 本地矢量数据库:不需要外部数据库依赖关系
  • 可选Redis:建议对敏感数据进行本地部署
  • HTTPS就绪:生产部署支持SSL/TLS终止
  • 防火墙友好:最少的出站连接(仅限LLM API)

其他文件

深潜指南

快速导航

主题 描述 链接
建筑 系统设计和组件交互 查看指南
MCP工具 模型上下文协议集成详细信息 查看规格
演出 优化策略和基准 查看指标
安全 隐私、数据保护和部署 查看指南
api参考 工具接口和数据模式 查看文档

部署资源

  • 生产设置:企业部署的环境配置
  • Docker支持:集装箱化准则和最佳做法
  • 缩放指南:Redis的横向扩展和负载平衡
  • 监控:健康检查、指标收集和警报设置

致谢

内置于❤️ 通过 Sanjan B M 使用行业领先的开源技术:

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

贡献

欢迎投稿、问题和功能请求!请随时查看 问题页面 加入我们的发展社区。


⭐ 标记此存储库 如果你觉得它有用 分享它 与您的团队一起加速组织中的人力资源自动化!

项目结构

mcp-agent/
├── 📱 ui/
│   └── streamlit_app.py             # Chat interface with streaming responses
├── 🖥️ mcp_server/
│   └── server.py                    # MCP server orchestration and routing
├── 🔧 tools/
│   ├── policy_rag/
│   │   ├── document_processor.py    # PDF/text ingestion and chunking
│   │   ├── vector_database.py       # Chroma vector DB operations
│   │   ├── mcp_tool.py              # Policy search MCP tool
│   │   └── rag_engine.py            # RAG logic and conversation management
│   ├── resume_screening/
│   │   └── mcp_tool.py              # Resume ranking and screening
│   └── cache/
│       └── redis_cache.py           # Redis/in-memory caching layer
├── 🚀 scripts/
│   └── warmup.py                    # System warm-up for reduced latency
├── 📊 data/
│   ├── hr_documents/                # Source policy documents (PDFs/text)
│   ├── vector_db/                   # Chroma embeddings database
│   └── resumes/                     # Candidate resume files
├── 📖 docs/
│   ├── HOW_IT_WORKS.md              # Detailed architecture guide
│   ├── FEATURE_HR_POLICY_RAG.md     # HR RAG feature documentation
│   └── plan.md                      # Complete development roadmap
├── 🖼️ assets/
│   ├── Screenshot_29-11-2025_9451_localhost.jpeg   # Main UI demo
│   ├── Screenshot_30-11-2025_94541_localhost.jpeg  # Low-latency mode
│   └── Screenshot_30-11-2025_9461_localhost.jpeg   # Resume screening
├── ⚙️ setup.py                      # Database setup and document ingestion
├── 📝 requirements.txt              # Python dependencies
├── 🚀 quick_start.bat               # Windows automation script
├── 🚀 quick_start.sh                # Linux/Mac automation script
└── 📋 README.md                     # This comprehensive guide

核心组件

组件 用途 主要功能
流线型UI 聊天界面 流媒体、移动响应、可访问性
MCP服务器 工具编排 健康检查、请求路由、审计日志
政策RAG工具 文档问答 矢量搜索、引文生成、多提供者
RAG发动机 响应生成 提示工程、提供商回退、缓存
向量数据库 相似性搜索 色度嵌入、元数据过滤、统计
缓存层 性能优化 Redis后端、会话摘要、TTL管理
简历筛选 候选人排名 技能匹配、摘录、评分算法

可扩展性和路线图

扩展点

  • 添加LLM提供者:以最小的更改实现新的提供程序适配器
  • 新MCP工具:无需修改UI即可添加工具
  • 存储后端:用企业替代品交换Chroma/Redis
  • 认证:为企业部署添加SSO/LDAP集成

计划阶段

第一阶段-核心增强功能(未来两周)

  • [ ] 内联引用:[1][2]带有点击源的标记
  • [ ] 对话导出:JSON/Markdown下载功能
  • [ ] 主题支持:带辅助功能的亮/暗模式切换
  • [ ] 移动优化:增强的响应式设计

第2阶段-企业功能(第2个月)

  • [ ] SSO集成:LDAP/Active Directory身份验证
  • [ ] 多租户技术:组织级文档隔离
  • [ ] 高级分析:使用指标和查询性能
  • [ ] 文档版本控制:跟踪政策更新和更改

第3阶段-人工智能增强(第3个月)

  • [ ] 多模式支持:处理图像、表格和图表
  • [ ] 语义路由:基于查询意图的智能工具选择
  • [ ] 高级总结:会议说明和政策更新
  • [ ] 集成API:企业系统的REST/GraphQL端点

整合目标

  • HRIS系统:工作日、BambooHR、ADP集成
  • 协作工具:Slack、团队、Discord机器人
  • 文档管理:SharePoint、Google Drive连接器
  • 票务系统:ServiceNow,Jira工作流自动化

故障排除和支持

常见问题及解决方法

无AI响应

问题:系统仅返回基本检索结果

# ✅ Solution: Set API keys
$env:OPENAI_API_KEY = "your-openai-key"
# OR
$env:GEMINI_API_KEY = "your-gemini-key"

未找到文档

问题:“未找到相关文件”错误

# ✅ Solution: Add documents and re-run setup
# 1. Add PDF/text files to data/hr_documents/
# 2. Re-run ingestion
python setup.py

初始响应缓慢

问题:初始查询需要>5秒

# ✅ Solution: Run warm-up script
python scripts/warmup.py
# Then enable low-latency mode in sidebar

缓存警告

问题:日志中的Redis连接错误

# ✅ Solution: Install and start Redis, or ignore for in-memory fallback
# Option 1: Use in-memory cache (automatic fallback)
# Option 2: Install Redis
# Windows: Download from https://redis.io/download
# Linux: sudo apt-get install redis-server

导入错误

问题:模块导入失败

# ✅ Solution: Reinstall dependencies
pip install --upgrade -r requirements.txt

获取帮助

  • 📖 文档:检查 docs/HOW_IT_WORKS.md 详细技术信息
  • 🐛 错误报告:GitHub上的未解决问题,包括错误日志和环境详细信息
  • 💡 功能请求:使用项目的GitHub讨论或问题
  • 📧 直接支持:联系方式 sanjanacharaya1234@gmail.com

调试模式

简历筛选:干净的专业输出

车载工具

入职MCP工具管理存储在单个JSON文件中的基于角色的任务清单(data/onboarding_tasks.json).它揭示了三个动作:

  • onboarding_get_tasks(role) --返回所有带有id、描述和完成标志的任务。
  • onboarding_mark_completed(role, task_id) --标记任务完成(幂等;如果已经完成,则返回注释)。
  • onboarding_get_status(role) --提供总计、已完成计数、完成百分比和剩余任务。

JSON模式示例:

{
  "engineering": [
    { "id": 1, "task": "Set up email", "completed": false },
    { "id": 2, "task": "Read engineering handbook", "completed": false }
  ],
  "hr": [{ "id": 1, "task": "Access HRIS portal", "completed": true }]
}

设计原则:

  • 基于文件的存储,简单易用;使用临时文件进行原子写入,以降低损坏风险。
  • 所有操作的可预测JSON输出(成功标志,显式错误)。
  • 通过锁进行线程安全完成更新。
  • 无隐藏状态:UI在每次交互中直接反映文件内容。

环境覆盖:设置 ONBOARDING_TASKS_PATH 指向另一个清单文件。

简历筛选部分提供了一个结构化的、可辩护的评估:

  1. 规范化:每份简历都被解析并转换为纯文本;删除多余的格式。
  2. 嵌入生成:使用句子转换模型嵌入候选人简历和提供的职位描述。
  3. 相似性评分:余弦相似性为每个候选者产生一个基本相关性评分。
  4. 技能匹配:提取的技能关键字(可配置)是交叉引用的;部分匹配贡献加权增量。
  5. 排名输出:最终报告呈现了一个有序的候选人列表,其中包含数字分数、匹配的技能计数和代表性文本片段。
  6. 透明度:所有评分要素(相似性、技能覆盖率)都可以浮出水面进行审核或导出。

此功能的设计原则:

  • 确定性评分管道(无隐藏随机加权)
  • 可维护性的检索、转换和评分分离
  • 可配置的嵌入模型和技能分类
  • 清晰的输出格式,适合内部审查或ATS集成

正在考虑的未来增强功能包括基于角色简介的自适应加权、小组评审意见整合和自动差异突出显示(例如,声称的技能与文本证据)。

专业笔记

此存储库有意省略表情符号和非正式标记,以符合中立的公司文档标准。现在,所有部分都侧重于行为的清晰度、可追溯性和可重复性。


对于任何其他调整(例如,添加基准脚本、集成身份验证或导出筛选报告),请打开问题或提交拉取请求。

启用详细日志以进行故障排除:

$env:LOG_LEVEL = "DEBUG"
streamlit run ui/streamlit_app.py