代理人雇佣
多代理人工智能平台,可自动化整个求职生命周期,完全由Ollama的本地LLM推理提供支持。云API成本为零。完全数据隐私。
五个专业的人工智能代理——由一个协调器协调——分析个人资料、搜索工作、评分匹配、定制简历和指导面试。每个代理都作为独立的MCP服务器运行。通过SSE实时流媒体。持续的聊天会话,实时数据流入每个页面。
11个包|Turborepo monorepo|TypeScript严格模式
   
现场演示
______________________________________________________________________
截图
Landing Page
Dashboard — Agents Thinking
Dashboard — Pipeline Complete
Hero page with agent count and stats Profile Analyst complete (34.4 tok/s), Market Researcher thinking — React Flow graph updates live All 5 agents done: 2,578 tokens, 30.0s, 28.2 tok/s — zero cloud API calls
Jobs — Live from Pipeline
Profile Management
Architecture Overview
3 jobs auto-populated from Market Researcher JSON — salary, skills, remote badges Skills, experience timeline, education, profile strength metrics (92% completeness) Pipeline flow, MCP servers with tools, LangGraph orchestrator details
New Profile Form
Upload Resume — AI Parsing
Dynamic skills (category/level), experience, education sections with validation Upload .txt resume — Ollama parses into structured profile for review
______________________________________________________________________
为什么是Ollama?100%本地LLM推理
这是AgentHire的核心设计原则。 每个AI操作都通过以下方式在您的本地计算机上运行 奥拉玛。不需要API密钥。没有云成本。没有数据离开你的硬件。
运作原理
Your Machine (GPU)
|
v
Ollama Server (localhost:11434)
|
v
qwen2.5-coder:14b model (14B parameters)
|
v
Next.js API Routes call Ollama directly
|
+---> /api/orchestrate --> 5-agent pipeline (profile, jobs, matches, resume, interview)
+---> /api/parse-resume --> Resume text -> structured Profile JSON
|
v
Browser receives SSE stream --> real-time agent updates本地硬件性能
| 度量 | 值 |
|---|---|
| 模型 | qwen2.5-coder:14b (14B参数) |
| 图形处理器 | RTX 4090(16GB VRAM) |
| 吞吐量 | ~37-40个令牌/秒 |
| 全5剂管路 | 总共约20-25秒 |
| 继续解析 | ~5-10秒 |
| 温度 | 0.3(流水线)/0.1(恢复解析) |
| 需要API密钥 | 没有 |
Ollama处理什么
| 特性 | Ollama用法 |
|---|---|
| 配置文件分析 | 免费文本职业简介评估 |
| 求职 | 带有工作列表的结构化JSON |
| 比赛得分 | 四维评分(技能、经验、教育、文化) |
| 简历定制 | ATS优化建议 |
| 面试指导 | 基于主题的问题和指导技巧 |
| 简历解析 | 原始文本->结构化配置文件JSON提取 |
每个代理的系统提示都经过精心设计,使本地模型返回结构化JSON(用于数据驱动页面)或简洁的自由文本(用于分析页面)。这 extractJSON() 该实用程序能够稳健地处理markdown围栏和原始JSON提取。
切换模型
# In .env or .env.local
OLLAMA_MODEL=qwen2.5-coder:14b # Default (recommended for 16GB+ VRAM)
OLLAMA_MODEL=qwen2.5-coder:7b # For 8GB VRAM GPUs
OLLAMA_MODEL=llama3.1:8b # Alternative
OLLAMA_MODEL=mistral:7b # Alternative任何与Olama兼容的型号都可以使用。较大的模型会产生结构更好的JSON输出。14B模型在结构化输出质量与速度方面达到了最佳点。
云回退(可选)
如果您更喜欢云推理,请设置 ANTHROPIC_API_KEY 和那个 @agenthire/shared 包裹的 callLLM() 将前往克劳德。启用提示缓存以降低重复系统提示的成本。但Ollama是默认的——也是推荐的——路径。
演示模式(无需GPU)
如果Ollama没有运行,应用程序会自动回退到 演示模拟模式 --一个客户端异步生成器,产生具有真实延迟和预构建结构化数据的相同事件类型。每个页面仍然有效,由演示数据填充。这就是GitHub Pages静态部署的动力。
______________________________________________________________________
实时数据管道
三个代理在返回聊天响应的同时返回结构化JSON,这些响应会自动填充仪表板页面:
User Input
|
v
Orchestrator
|
+---> Profile Analyst ---> free-text profile analysis
+---> Market Researcher ---> JSON: jobs[] --> Jobs page
+---> Match Scorer ---> JSON: matches[] --> Matches page
+---> Resume Tailor ---> free-text resume advice
+---> Interview Coach ---> JSON: topics[] --> Interview Prep page
|
v
SSE Stream ---> Browser (real-time updates + structured data dispatch)
|
v
localStorage (Zustand persist) ---> All pages read reactively from store| 代理 | 结构化输出 | 目标页面 |
|---|---|---|
| 市场研究员 | { summary, jobs: [{ title, company, location, remote, salaryMin, salaryMax, skills, requirements }] } | 工作机会 |
| 比赛得分者 | { summary, matches: [{ jobTitle, overallScore, skillMatchScore, experienceMatchScore, educationMatchScore, cultureFitScore, skillGaps, strengths }] } | 比赛 |
| 面试教练 | { summary, topics: [{ title, category, difficulty, questions: [{ question, tip }] }] } | 面试准备 |
______________________________________________________________________
特性
仪表板页面
| 第页 | 描述 |
|---|---|
| 仪表盘 | 代理状态卡、React Flow编排图、与会话选择器的持续聊天、活动提要 |
| 档案 | 带有技能/经验/教育背景的个人资料卡,上传简历(人工智能解析),手动创建个人资料 |
| 工作 | 来自管道的实时工作卡——工资、地点、远程徽章、技能标签、可扩展要求 |
| 火柴 | 现场比赛得分——得分环可视化、四维细分、技能差距分析 |
| 面试准备 | 按类别/难度分类的主题、带指导技巧的练习题、目标角色横幅 |
| 建筑 | 可视化系统概述——流水线流程、MCP服务器、LangGraph详细信息、技术栈 |
配置文件功能(新)
- 上传简历:选择一个
.txt文件->Ollama将其解析为结构化的配置文件数据->在表单中查看->保存 - 新建配置文件:手动表格,包含动态技能(类别/级别)、经验(亮点)、教育部分
- AI简历解析:The
/api/parse-resume路由将简历文本发送给Ollama,并显示结构化提取提示 - 配置文件持久性:通过Zustand persistent保存到本地存储——页面刷新和导航后仍然有效
聊天功能
- 会话持续 --消息在导航和页面刷新后仍然有效
- 会话选择器 --在最多10个聊天会话之间切换
- 推断遥测 --每条消息统计信息:型号、持续时间、令牌计数、tok/s
- 管道汇总 --总令牌、总时间、完成时的代理计数
- 结构化数据调度 --代理JSON响应会自动填充“作业”、“匹配”和“面试准备”页面
- 演示模式回退 --在没有Ollama的情况下,使用模拟的代理响应工作
______________________________________________________________________
入门指南
先决条件
- Node.js>=20
- npm>=10
- 奥拉玛 安装时拉模型
设置
# Clone
git clone https://github.com/aptsalt/agenthire.git
cd agenthire
# Install dependencies
npm install
# Pull the LLM model
ollama pull qwen2.5-coder:14b
# Start Ollama (if not already running)
ollama serve
# Start dev server
npm run dev打开 http://localhost:3002 --仪表板加载了所有待命的代理。
环境变量
创建 .env.local 在 apps/web/:
# Ollama (default — no key needed)
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=qwen2.5-coder:14b
# Anthropic (optional, for cloud inference)
ANTHROPIC_API_KEY=sk-ant-...
# Supabase (optional, for database persistence)
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key验证一切正常
- 打开http://localhost:3002,导航到 仪表盘
- 在聊天中发送消息: *“分析我的个人资料并找到匹配的工作”*
- 观看代理使用实时推理统计数据流式传输响应
- 引导到 工作 --实时工作卡从管道中出现
- 引导到 火柴 --4维细分的现场比赛得分
- 引导到 面试准备 --管道中的主题和问题
- 引导到 档案 --点击“上传简历”或“新建个人资料”
- 刷新页面——所有数据都通过本地存储保存
- 如果Ollama关闭,演示模式将自动启动
______________________________________________________________________
技术栈
| 层 | 技术 |
|---|---|
| 前端 | Next.js 15、React 19、顺风CSS 4、Zustand 5(持久化)、React Flow 12 |
| 代理协议 | 模型上下文协议(MCP)SDK、stdio传输 |
| 编排 | LangGraph,条件状态图路由 |
| LLM推理 | 奥拉玛 (qwen2.5编码器:14b本地),拟人克劳德(可选) |
| 数据库 | Supabase、PostgreSQL、pgvector |
| 可观测性 | OpenTetry,引脚 |
| 验证 | Zod(运行时模式+TypeScript类型) |
| 构建 | Turborepo、TypeScript 5.7(严格模式)、ESM |
| 测试 | Vitest(单元),剧作家(E2E),自定义eval框架 |
| 流媒体 | 服务器通过ReadableStream发送事件(SSE) |
| 坚持 | 通过Zustand持久化中间件实现本地存储 |
______________________________________________________________________
Monorepo结构
agenthire/
apps/
web/ # Next.js 15 frontend (App Router, Turbopack)
app/
layout.tsx # Root layout (Inter font, dark theme)
page.tsx # Landing page
globals.css # Design tokens, animations, React Flow styles
(dashboard)/
layout.tsx # Sidebar navigation, collapsible
dashboard/
page.tsx # Dashboard: agent status, graph, chat, activity
profiles/page.tsx # Profile card, upload resume, new profile
jobs/page.tsx # Live job cards from pipeline
matches/page.tsx # Live match scores from pipeline
interview-prep/page.tsx # Live topics & questions from pipeline
architecture/page.tsx # System architecture visualization
api/
orchestrate/route.ts # SSE streaming 5-agent pipeline
parse-resume/route.ts # Resume text -> Profile JSON via Ollama
components/
agent-flow/agent-graph.tsx # React Flow orchestration graph
chat/chat-panel.tsx # Persistent chat with session picker
profile/
profile-card.tsx # Profile display component
profile-form-modal.tsx # Manual profile creation form
resume-upload-modal.tsx # Resume upload + AI parsing flow
lib/
store.ts # Zustand store with persist middleware
demo-simulation.ts # Demo fallback with structured data
supabase.ts # Supabase client
packages/
shared/ # Zod schemas, types, LLM client, BaseMcpAgent
observability/ # OpenTelemetry tracing, metrics, pino logging
orchestrator/ # LangGraph state graph, routing, SSE streaming
evals/ # Eval runner, scorers, fixtures, CLI reporter
mcp-servers/
resume-parser/ # MCP: parse resumes into structured profiles
job-search/ # MCP: search and filter job postings
match-scorer/ # MCP: score profile-job matches
resume-tailor/ # MCP: tailor resumes for specific jobs
interview-coach/ # MCP: interview questions & coaching
project-tools/ # MCP: project management utilities
supabase/
migrations/ # SQL: schema, indexes, RLS policies, triggers
docs/
ARCHITECTURE.md # Detailed system architecture
API.md # API endpoint documentation
FRONTEND.md # Frontend architecture and data flow
screenshots/ # App screenshots for README______________________________________________________________________
MCP服务器
每个代理都是一个通过stdio传输进行通信的独立MCP服务器:
| 服务器 | 包 | 工具 |
|---|---|---|
| 简历分析器 | @agenthire/mcp-resume-parser | parse_resume, extract_skills, analyze_experience |
| 职位搜索 | @agenthire/mcp-job-search | search_jobs, filter_jobs, get_job_details |
| 比赛得分者 | @agenthire/mcp-match-scorer | score_match, identify_gaps, rank_jobs |
| 简历定制 | @agenthire/mcp-resume-tailor | tailor_resume, optimize_keywords, generate_summary |
| 面试教练 | @agenthire/mcp-interview-coach | generate_questions, evaluate_answer, provide_feedback |
建立在 @modelcontextprotocol/sdk 使用Zod输入验证和共享 BaseMcpAgent 抽象类。
______________________________________________________________________
架构决策
| 决定 | 理由 |
|---|---|
| Ollama仅在云端 | 零成本推理,完全数据隐私,无费率限制,离线工作 |
| MCP通过直接函数调用 | 代理隔离、独立扩展、协议标准化 |
| 自定义路由上的LangGraph | 类型安全状态管理、条件边、人在环支持 |
| 基于WebSockets的SSE | 更简单的服务器实现、自动重新连接、单向就足够了 |
| 关于Redux | 最少的样板,用于本地存储的持久化中间件,直接访问存储 |
| JSON代理提示 | 结构化输出自动填充页面,而不仅仅是聊天文本 |
| Turborepo monorepo | 共享类型、依赖感知构建、增量缓存 |
______________________________________________________________________
命令
npm run dev # Start all packages in dev mode
npm run build # Build all packages (respects dependency order)
npm run test # Run vitest across all packages
npm run type-check # TypeScript strict mode check
npm run lint # Lint all packages
npm run eval # Run eval suites
npm run eval:report # Display eval results______________________________________________________________________
文档
______________________________________________________________________
许可证
麻省理工学院
