返回市场
教练

教练

作者:SCU-2025-Oct2 星标更新:2025-10-21

项目介绍

AI职业教练

由**NVIDIA Nemotron (NIM)**驱动的代理AI职业助手。它分析简历,识别技能差距,检索实时职位空缺,并实时返回可操作建议。在圣克拉拉大学举办的NVIDIA开发者黑客松期间构建,重点在于推理工作流程和NIM集成,而非UI简洁性。

Python FastAPI NVIDIA NIM 状态 许可证

目录

概述

AI职业教练将静态简历转化为可操作的职业计划。它使用由NVIDIA Nemotron通过NIM支持的代理管道,并使用MCP获取实时职位数据。

核心工作流程

步骤描述
简历上传提供PDF或DOCX简历
Nemotron分析NIM执行结构化解析和上下文推理
代理见解强项、差距、职位匹配及更好的措辞建议
个性化输出清晰编辑和可采取行动的职位推荐

功能

功能描述
简历理解从PDF或DOCX中提取结构化内容
Nemotron代理上下文感知的强项和差距分析
代理工作流结合解析、检索和生成于一体的工作流
对话界面最小HTML + JS聊天界面
实时职位使用MCP从Remotive等公共API获取职位

技术栈

层次技术
大型语言模型通过NIM端点/v1/chat/completions的NVIDIA Nemotron
后端Python 3.10+上的FastAPI
前端HTML、CSS、纯JavaScript
外部API通过MCP的Remotive职位API

项目结构

AI职业教练/
├── LICENSE                       # MIT许可证
├── README.md                     # 项目文档(此文件)
├── dev.py                        # 跨平台一键运行器
├── backend/
│   ├── app/
│   │   ├── main.py               # FastAPI入口点
│   │   ├── services/
│   │   │   ├── nim_client.py     # NVIDIA NIM客户端
│   │   │   ├── mcp_client.py     # MCP连接器
│   │   │   └── resume_parser.py  # 简历提取和结构化
│   │   └── prompts/
│   │       └── system.txt        # 代理推理的基础提示
│   └── requirements.txt          # Python依赖项
├── frontend/
│   └── index.html                # 最小聊天界面
├── mcp-servers/
│   └── jobs_server.py            # 使用Remotive API检索职位
├── imagesReadMe/                 # README中使用的图片
│   ├── image1.png                # 主要图片
│   ├── image2.png
│   ├── image3.png
│   └── image4.png                
└── tmp/                          # 上传的简历(git忽略)

注意: tmp/存储本地上传。保持其被忽略;如果需要跟踪文件夹而不包含内容,请使用tmp/.gitkeep

开始使用

运行两个服务器(一个命令)

使用跨平台Python运行器。

# macOS/Linux
python3 dev.py

# Windows
py -3 dev.py

这将:

手动运行 - 两个终端

终端A(后端):

cd backend
python3 -m venv .venv
source .venv/bin/activate      # macOS/Linux
pip install -r requirements.txt
uvicorn app.main:app --reload --port  8000

终端B(前端):

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 "从仓库移除backend/.env"
    
  • 为协作者提供模板:
    cp backend/.env backend/.env.example  # 然后用占位符替换值
    
  • 如果密钥泄露,请在NVIDIA门户中轮换它并更新.env

从FastAPI服务前端(单个进程)

如果你更喜欢单个服务器,可以从FastAPI服务frontend/

# 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

演示

应用程序运行的快速视觉故事。

  1. 启动 - 打开Web应用。聊天面板和简历上传卡片已准备好。 <img src="imagesReadMe/image1.png" alt="1 - 应用程序打开:干净的聊天UI已准备好" style="max-width:100%; height:auto; border-radius:12px; box-shadow: 4px 4px 12px rgba(0,0,0,0.25);" />

  2. 上传 - 选择PDF/DOCX。文件名出现,你可以点击分析简历<img src="imagesReadMe/image2.png" alt="2 - 上传器中选择了简历" style="max-width:100%; height:auto; border-radius:12px; box-shadow: 4px 4px 12px rgba(0,0,0,0.25);" />

  3. 解析 - 后端提取简历文本,Nemotron开始结构化分析。 <img src="imagesReadMe/image3.png" alt="3 - 分析请求发送,JSON/摘要区域显示解析文本" style="max-width:100%; height:auto; border-radius:12px; box-shadow: 4px 4px 12px rgba(0,0,0,0.25);" />

  4. 聊天 - 提问如“如何改进我的简历以适应SDE角色?”代理返回强项、差距和编辑建议。 <img src="imagesReadMe/image4.png" alt="4 - 聊天询问如何改进简历以适应SDE角色,助手反馈呈现" style="max-width:100%; height:auto; border-radius:12px; box-shadow: 4px 4px 12px rgba(0,0,0,0.25);" />

路线图

  • 从NIM流式传输响应以降低感知延迟
  • 更好的职位匹配评分和推理
  • 会话历史和认证
  • 超过Remotive的更多MCP来源
  • Docker组合用于一键启动

致谢

  • NVIDIA开发者团队提供的Nemotron和NIM访问
  • SCU AI俱乐部的主办
  • 在黑客松期间构建此项目的团队成员

许可证

本项目在MIT许可证下开源。

参见**LICENSE**。欢迎改编和扩展!

作者/贡献者

三人团队

Gareshma NagalapattiGitHubLinkedIn
Wineel Wilson DasariGitHubLinkedIn
Shanmukha GanesnaGitHubLinkedIn

链接

LinkedIn公告