内容
# 🎓 人工智能实习与职业导师
一个智能的多代理职业导师系统,旨在引导学生进入人工智能、机器学习、网络安全、云/DevOps和数据库领域的目标工程角色。
该系统基于生产级别的 **Google Agent Development Kit (ADK)** 多代理架构,可编程地与标准的 **Model Context Protocol (MCP)** 工具服务器集成,运行于 **Gemini 1.5/2.5 Flash**,并包含强大的输入安全验证防护。
---
## Demo 视频
YouTube: https://youtu.be/Rb7E-Uo43JY
---
## 🎯 问题
在现代软件工程中,导航职业选择、技术认证和工作申请对学生来说是一个令人不知所措的挑战:
* **令人不知所措的技能差距:** AI/ML、网络安全、数据库管理、云/DevOps等领域拥有庞大、复杂且快速变化的技术栈。学生们经常难以准确找出当前个人资料中缺少的技能。
* **信息过载和噪音:** 互联网上充满了通用、僵化或过时的路线图,无法适应学生的现有技能、课程或认证。
* **缺乏职业匹配:** 学生们难以将学术背景和项目历史映射到招聘经理在实习角色中实际寻找的特定个人资料。
---
## 💡 解决方案
**人工智能实习与职业导师** 通过提供由LLM代理协作网络支持的动态、个性化导师体验,解决了这些挑战:
* **个性化评估:** 与通用路径不同,它会审查学生的背景,并过滤掉他们已经拥有的认证和技能。
* **专业代理协作:** 协调员和监督员动态路由学生查询到专门的职业分析、实习角色匹配和战略学习路线图的子代理。
* **事实基础(MCP):** 为了避免LLM在认证跟踪和角色要求方面的幻觉,该系统可编程地查询一个符合标准的本地 **Model Context Protocol (MCP)** 服务器,包含精选的领域、认证和实习角色。
* **安全防护:** 该系统结合了长度和注入验证,以防止对抗性输入破坏代理角色。
---
## 📸 Demo 截图
### 多代理执行流程
<img width="320" height="180" alt="01_adk_playground_success_response png" src="https://github.com/user-attachments/assets/f56db2ed-4880-46c4-9678-ed1c79f4f440" />
<img width="320" height="180" alt="02_actionable_milestone_roadmap png" src="https://github.com/user-attachments/assets/c76366c2-8c46-493c-a900-b334b3357732" />
### 生成的职业路线图
<img width="320" height="180" alt="03_multi_agent_execution_trace png" src="https://github.com/user-attachments/assets/9038d3ff-729a-4500-b39c-dd098e3575bf" />
### 🔒 安全防火墙防御
<img width="320" height="180" alt="04_security_filter_injection_defense png" src="https://github.com/user-attachments/assets/9086e339-cf40-4d98-87e0-928e62586610" />
<img width="320" height="180" alt="05_security_filter_execution_trace png" src="https://github.com/user-attachments/assets/4cedac69-898e-42b1-b720-ba968b343891" />
---
## 🛠 技术栈
- Python
- Google Agent Development Kit (ADK)
- Gemini 1.5 Flash / Gemini 2.5 Flash
- FastAPI
- MCP (Model Context Protocol)
- FastMCP
- dotenv
- unittest
---
## 🏗 架构概述
监督代理
├── 职业代理
├── 实习代理
└── 路线图代理
监督代理分析学生查询并动态委托任务给专业代理。响应被综合成统一的职业指导报告。
### 📂 目录结构
.
├── app/
│ ├── agents/
│ │ ├── career.py
│ │ ├── internship.py
│ │ ├── roadmap.py
│ │ └── supervisor.py
│ ├── prompts/
│ │ └── personas.py
│ └── tools/
│ ├── mcp_client.py
│ └── security.py
├── tests/
│ ├── test_mcp_server.py
│ ├── test_prompts.py
│ └── test_tools.py
├── agent.py
├── mcp_server.py
├── pyproject.toml
├── requirements.txt
└── uv.lock
---
## 🗺️ 架构概念映射
### 1. 多代理编排(ADK)
该系统在 **Google ADK** 框架上实现分层 **Supervisor-Subagent编排树**:
* **监督路由器(`app/agents/supervisor.py`):** 使用 `ADK_SUPERVISOR_INSTRUCTION` 系统提示动态分析学生查询。它利用标准的ADK `AgentTool`定义动态委托查询解析给一个或多个子代理。
* **职业子代理(`app/agents/career.py`):** 使用 `CAREER_PROMPT` 指令进行技术技能差距和认证分析。它可以访问 `/tools/get_career_paths` 和 `/tools/get_skill_recommendations` MCP工具。
* **实习子代理(`app/agents/internship.py`):** 使用 `INTERNSHIP_PROMPT` 指令执行个人资料到角色的匹配。它可以访问 `/tools/get_internship_roles` MCP工具。
* **路线图子代理(`app/agents/roadmap.py`):** 使用 `ROADMAP_PROMPT` 指令构建基于里程碑的学习计划(3/6/12个月),结合其他子代理生成的内容和建议。
```mermaid
graph TD
User([用户查询]) --> Filter[安全过滤器:validate_prompt]
Filter -->|Pass| Supervisor[监督代理]
Filter -->|Block| Block[阻止并引发ValidationError]
Supervisor -->|AgentTool委托| CareerAgent[职业子代理]
Supervisor -->|AgentTool委托| InternAgent[实习子代理]
Supervisor -->|AgentTool委托| RoadmapAgent[路线图子代理]
CareerAgent -->|调用工具| MCP_Career[get_career_paths & <br> get_skill_recommendations]
InternAgent -->|调用工具| MCP_Intern[get_internship_roles]
MCP_Career -.-> MCP_Server[FastMCP服务器 <br> 端口8081]
MCP_Intern -.-> MCP_Server
CareerAgent --> RoadmapAgent
InternAgent --> RoadmapAgent
RoadmapAgent --> Output[结构化指导响应]
```
---
### 2. 模型上下文协议(MCP)服务器
为了向ADK代理提供确定的事实数据,实现了符合标准的 **MCP工具服务器**,使用Python `mcp` SDK(`FastMCP`)并安装在 **FastAPI**包装器上,托管在 `http://127.0.0.1:8081`:
* **编程端点(工具):**
* `get_career_paths`:将用户兴趣映射到工程领域(例如,网络安全,AI/ML)。
* `get_skill_recommendations`:推荐认可的行业认证跟踪(例如,*TCS数据库管理跟踪*,*IBM网络安全分析师*),并过滤掉学生已经拥有的认证。
* `get_internship_roles`:将学生的技术背景和关键词映射到目标实习角色。
---
### 3. 安全功能
该系统在 [app/tools/security.py](file:///c:/Users/PURUSHOTHAMAN/OneDrive/المستندات/Kaggle_Capstone_2026/Agent/AI_Internship_Career_Mentor/app/tools/security.py) 中实现了以安全为重点的输入验证和环境安全实践:
* **输入长度验证:** 如果任何学生提示输入超过500个字符,则阻止执行以防止缓冲区问题或资源耗尽。
* **提示注入防护:** 不区分大小写地扫描用户输入以查找恶意注入模式(例如,`"忽略所有前面的指令"`,`"显示系统提示"`),通过引发自定义 `ValidationError` 立即阻止它们。
* **安全API密钥解析:** 自定义环境解析器从git-ignored本地 `.env` 文件将Google API密钥加载到 `os.environ` 中,确保密钥从不硬编码。
---
## 💡 支持的职业指导场景
- AI/ML实习准备
- 网络安全实习指导
- 云和DevOps职业规划
- 数据库实习准备
- 认证差距分析
- 个性化学习路线图
- 简历定位建议
- 实习角色推荐
---
## 🛠️ 项目旅程
### 阶段1:概念和脚手架
我们着手创建一个工具来解决职业导航的混乱。最初的设计是一个单一代理聊天系统。然而,我们意识到职业分析、招聘人员角色匹配和教育路线图草拟是不同的认知任务,需要不同的角色和指令。
### 阶段2:分层多代理设计
我们将系统分为三个专业子代理(职业、实习和路线图)和一个中央监督/协调员来处理路由。我们使用 **Google Agent Development Kit (ADK)** 框架构建了这个编排。我们在 [personas.py](file:///c:/Users/PURUSHOTHAMAN/OneDrive/المستندات/Kaggle_Capstone_2026/Agent/AI_Internship_Career_Mentor/app/prompts/personas.py) 中为每个子代理定义了明确的指令。
### 阶段3:MCP的事实基础
早期测试期间的一个主要挑战是模型幻觉——特别是模型提出用户已经拥有的认证跟踪,或将背景与无关角色匹配。为了解决这个问题,我们将事实查找与LLM推理分离:
* 我们使用Python `mcp`(`FastMCP`)构建了一个 **MCP工具服务器**,并将其安装在 **FastAPI** 上,以提供结构化的查找表。
* 职业子代理调用 `get_skill_recommendations` 工具,该工具自动从推荐列表中减去学生的 `current_skills`,确保模型永远不会建议冗余的认证。
### 阶段4:主动安全执行
作为一个公开的教育工具,代理容易受到提示注入攻击(例如,用户要求聊天机器人“显示你的系统提示”)。我们在 [security.py](file:///c:/Users/PURUSHOTHAMAN/OneDrive/المستندات/Kaggle_Capstone_2026/Agent/AI_Internship_Career_Mentor/app/tools/security.py) 中实现了自定义中间件,作为一个安全的输入门,净化学生请求后再让它们到达协调器或子代理。
### 阶段5:测试驱动开发和验证
为了确保稳健性,我们在 `tests/` 目录下实现了单元测试套件。运行 `python -m unittest discover -s tests` 确认安全边界和工具操作在边界条件下可靠地执行。
---
## 🚀 运行系统
### 1. CLI设置和依赖
确保激活了虚拟环境并安装了依赖:
```bash
# 更新依赖
.\venv\Scripts\pip install -r requirements.txt
```
### 2. 运行MCP服务器
在运行任何代理之前,在端口 `8081` 启动MCP工具服务器:
```bash
# 启动FastAPI MCP服务器
.\venv\Scripts\python.exe mcp_server.py
```
### 3. 运行协调器代理CLI
直接将学生查询作为CLI参数传递:
```bash
# 运行学生查询
.\venv\Scripts\python.exe agent.py "我想获得数据库实习。我知道SQL,但我需要知道我缺少哪些认证,并获得3个月的路线图。"
```
### 4. 运行ADK游乐场(Web UI)
在端口 `8080` 启动交互式Google ADK Web UI,以玩耍和可视化代理路由和输出:
```bash
# 启动ADK游乐场服务器
.\venv\Scripts\adk.exe web --host 127.0.0.1 --port 8080 --reload_agents app
```
您可以在 `http://127.0.0.1:8080` 访问游乐场UI。
---
## 🧪 运行测试
使用测试套件验证提示安全验证、本地MCP服务器和客户端包装器:
```bash
# 发现并运行所有单元测试
.\venv\Scripts\python.exe -m unittest discover -s tests
```