AI职业导师
一个由(某种技术或平台)驱动的、具有自主行为能力的AI职业助手 NVIDIA Nemotron(NIM)它分析简历,识别技能差距,检索实时职位空缺,并实时返回可操作的建议。该系统是在圣克拉拉大学举办的NVIDIA开发者黑客松活动中开发的,重点在于推理工作流程和NIM(神经模块化推理引擎)的集成,而非单纯追求用户界面的简洁性。
目录
- 运行两个服务器(一条命令) - 手动运行 - 两个终端 - 环境变量 - 使用 FastAPI 提供前端服务(单进程)
概述
AI职业导师 将一份静态的简历转化为可执行的职业规划。它采用了一个由……支持的代理(或主动)流程 通过NIM的NVIDIA Nemotron 并且使用 MCP(最小化认知处方) 获取实时工作数据。
核心工作流程
| 步骤 | 描述 | | :-- | :-- | | 上传简历 | 提供PDF或DOCX格式的简历 | | Nemotron 分析 | NIM 执行结构化解析和上下文推理 | | 代理洞察 | 优势、不足、岗位匹配度及更佳表述建议 | | 个性化输出 | 清晰的编辑建议和可立即采取的职位推荐 |
特点/特性
| 特性 | 描述 |
|---|---|
| 简历理解 | 从PDF或DOCX中提取结构化内容 |
| Nemotron 代理 | 对优势和不足进行上下文感知分析 |
| 主体代理工作流 | 将解析、检索和生成集成在一个流程中 |
| 对话式用户界面 | 简约的HTML + JS聊天界面 |
| 实时职位 | 使用MCP从Remotive等公共API获取职位信息 |
技术栈
| 层 | 技术 |
|---|---|
| 大语言模型 (LLM) | 通过NVIDIA NIM端点使用NVIDIA Nemotron /v1/chat/completions |
| 后端 | 基于Python 3.10+的FastAPI |
| 前端 | HTML, CSS, 原生JavaScript |
| 外部API | 通过MCP的Remotive Jobs API |
项目结构
AI Career Coach/
├── LICENSE # MIT license
├── README.md # Project docs (this file)
├── dev.py # Cross‑platform one‑command runner
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI entry point
│ │ ├── services/
│ │ │ ├── nim_client.py # NVIDIA NIM client
│ │ │ ├── mcp_client.py # MCP connector
│ │ │ └── resume_parser.py # Resume extraction and structuring
│ │ └── prompts/
│ │ └── system.txt # Base prompt for agent reasoning
│ └── requirements.txt # Python dependencies
├── frontend/
│ └── index.html # Minimal chat UI
├── mcp-servers/
│ └── jobs_server.py # Job retrieval using Remotive API
├── imagesReadMe/ # Images used in README
│ ├── image1.png # Primary image
│ ├── image2.png
│ ├── image3.png
│ └── image4.png
└── tmp/ # Uploaded resumes (git-ignored)注:tmp/存储本地上传的文件。保持忽略状态;使用tmp/.gitkeep如果你希望追踪文件夹而不追踪其内容。
入门指南
运行两个服务器(一条命令)
使用跨平台的Python运行器。
# macOS/Linux
python3 dev.py
# Windows
py -3 dev.py这将会:
- 创建/更新
backend/.venv - 安装依赖项
- 启动 FastAPI 于 http://localhost:8000 翻译为中文是:“本地主机的8000端口”。不过,通常我们不会直接这样翻译网址,而是根据上下文可能将其意译为“本地服务器上的8000端口服务”或“运行在本地计算机上的8000端口应用”,具体取决于该网址所代表的实际服务或应用。在这里,为了简洁明了,直接翻译为“本地主机的8000端口”也是可以接受的
- 在(指定地址/端口)上提供前端服务 http://localhost:5500 翻译为中文是:“本地主机的5500端口”。不过,通常我们不会直接这样翻译URL地址,而是根据上下文或使用场景来解释其含义。在这个例子中,它指的是在本地计算机上运行的一个Web服务器,可以通过localhost(即本机)和5500端口来访问
- 两者都停止使用
Ctrl+C
手动运行 - 两个端子
航站楼A(后端):
cd backend
python3 -m venv .venv
source .venv/bin/activate # macOS/Linux
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000B航站楼(前端):
cd frontend
python3 -m http.server 5500在您的浏览器中打开 http://localhost:5500。使用 Ctrl+C(复制) 阻止每一个(人/事)。
环境变量
创建 backend/.env (永远不要提交)或从(他人处)抄袭 backend/.env.example。
NVIDIA_API_BASE=https://integrate.api.nvidia.com/v1
NVIDIA_API_KEY="NVIDIA API KEY"
NVIDIA_MODEL=nvidia/llama-3.3-nemotron-super-49b-v1
ALLOW_ORIGINS=*在Git中保密信息
.env被忽略了。如果它已悄然成为历史,请将其移除并重新提交:
git rm --cached backend/.env 2>/dev/null || true
git commit -m "Remove backend/.env from repo"- 为合作者提供模板:
cp backend/.env backend/.env.example # then replace values with placeholders- 如果密钥泄露, 旋转 在NVIDIA门户网站中找到它并进行更新
.env。
使用 FastAPI 提供前端服务(单进程)
如果你更喜欢使用单个服务器,请提供 frontend/ 来自 FastAPI:
# backend/app/main.py
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
from pathlib import Path
app = FastAPI()
FRONTEND_DIR = Path(__file__).resolve().parents[2] / "frontend"
app.mount("/assets", StaticFiles(directory=FRONTEND_DIR, html=False), name="assets")
@app.get("/")
def index():
return FileResponse(FRONTEND_DIR / "index.html")运行:
backend/.venv/bin/python -m uvicorn --app-dir backend app.main:app --reload --port 8000演示
一个快速直观的应用程序使用故事。
- 发射 - 打开网页应用。聊天面板和简历上传卡片已就绪。
- 上传 - 选择一个PDF/DOCX文件。文件名会显示出来,然后你可以点击 *分析简历*.
- 解析 - 后端提取简历文本,Nemotron开始进行结构化分析。
- 聊天 - 提出诸如“我如何改进我的简历以申请软件开发工程师(SDE)职位?”之类的问题。代理会返回你的优势、不足以及修改建议。
路线图
- 来自NIM的流式响应,以实现更低延迟的感知
- 更精准的评分和职位匹配推理
- 会话历史和认证
- 除了Remotive之外,还有更多MCP资源
- 使用Docker Compose实现一键启动
致谢
- NVIDIA Nemotron和NIM访问开发团队
- SCU AI Club(四川大学人工智能俱乐部)的主办支持
- 在黑客马拉松期间构建此项目的团队成员
许可证
这个项目在MIT许可下是开源的。
请看 许可证请随意调整和扩展!
作者/致谢
三人小组 | | | | |:--:|:--:|:--:| | 加尔什马·纳加拉帕蒂 | | LinkedIn(领英) | | Wineel Wilson Dasari(这个名字在中文中没有直接对应的翻译,通常保持原名,但如果需要意译或音译结合,可以大致为“维尼尔·威尔逊·达萨里”,不过具体翻译可能因个人习惯或语境而异) | | 领英(LinkedIn) | | 沙姆库哈·伽内什(Shanmukha Ganesha,此处为音译加意译的结合,实际翻译可能因文化和语境而异,伽内什是印度教中的象头神,此处“Shanmukha”可能指其具有六面或六只眼睛的特殊形态,但具体含义需结合上下文) | | 领英(LinkedIn) |
