先建立可靠工作流,再扩展 Agent

AI 求职工作流平台

一个处理结构化职位数据、简历摄取与可观察后台任务的类型化 monorepo,并明确划分安全与授权边界。

时间
2026 — present
方向
Full-stack AI · Async Systems · Security Engineering
核心技术
Next.js · tRPC · Zod · Prisma

三行摘要

问题
求职工作流混合了不可信网页、个人文档、模型输出与长任务。仅靠聊天的架构会隐藏失败状态、来源与会产生后果的写入。
我做了什么
实现职位导入、可编辑结构化记录、简历上传,以及带持久状态的异步文本提取。
结果 / 限制
明确把面试、知识扫描、匹配报告 processor、完整 tool calling 与 RAG 排除在当前已实现范围之外。
笔记本电脑与纸质记录本,代表持续的职位与申请跟踪。
场景图 · StartupStockPhotos · CC0 · 不含个人求职数据

01 · A

问题

求职工作流混合了不可信网页、个人文档、模型输出与长任务。仅靠聊天的架构会隐藏失败状态、来源与会产生后果的写入。

01 · B

背景

当前平台把 TypeScript monorepo 划分为 Next.js Web、tRPC/Zod 契约、Prisma 持久化、BullMQ/Redis worker 与隔离 crawler 服务。

流程示意

先让工作可观察,再扩展自动化

我用这张流程示意图把任务状态、URL 检查、简历版本和提交前审查门集中呈现。

AI 求职工作流平台的流程示意,包含结构化记录、任务状态与审批门。
该流程使每一步保持可观察,并要求在记录提交前进行明确审查。
02

为什么重要

求职数据具有隐私性,申请状态变更会产生真实后果。类型化契约、持久任务状态与显式授权能让失败可诊断,并防止助手悄然越过用户意图。

展开技术细节真正的难点 · 系统路径 · 关键取舍
02 · B

真正的难点

  1. 01

    公开 URL 导入必须拒绝不安全协议、内网目标、危险重定向与超大响应。

  2. 02

    模型生成的职位数据必须通过 schema 才能持久化。

  3. 03

    长任务需要持久状态与显式失败报告。

  4. 04

    当前开发身份与 SQLite 持久化不等于生产认证或生产存储。

不可信 URL 边界

职位 URL 是需要校验的输入,不是任意抓取许可

每一次重定向和解析后的目标都必须满足网络与资源限制,内容才能进入结构化记录。

01输入

提交 URL

把页面与重定向都视为不可信输入

02网络门

协议 + DNS

拒绝不安全协议与内网目标

03资源门

重定向 + 限额

逐跳复核、超时和响应体大小

04Schema 门

结构化提取

Provider 输出必须通过 Zod

05提交门

审查 + 持久化

人工确认后进入业务状态

03

我的方案

系统路径

01

接入

通过受控接口导入职位网页与上传简历

02

校验

数据进入业务状态前执行 tRPC/Zod 契约

03

处理

运行 crawler 与 BullMQ worker,并持久化 TaskRun 状态

04

审查

呈现可编辑记录、申请状态与显式失败

持久任务生命周期

队列负责启动工作,TaskRun 负责记录事实

持久状态让 Web 应用即使面对另一个进程中的 worker,也能解释等待、进度与失败。

01持久

Queued

工作开始前任务记录已经存在

02可观察

Running

Worker 领取任务并报告进度

03终态

Completed

经校验结果绑定到记录

04可诊断

Failed

失败原因保持可查询

05显式

重试 / 审查

受控决策启动下一次尝试

  • Next.js
  • tRPC
  • Zod
  • Prisma
  • BullMQ
  • Redis
  • Docker

关键取舍

01

持久化任务状态

队列消息负责触发工作,TaskRun 保留可查询的排队、运行、完成或失败状态。

02

隔离 URL 抓取

Crawler 把不可信网络访问放在主进程之外,并校验重定向与资源上限。

03

先有契约,再谈智能

Provider 输出只有通过 schema 后才能成为应用数据;模型回答不等于数据库记录。

04 · A

我的贡献

  • 实现职位导入、可编辑结构化记录、简历上传,以及带持久状态的异步文本提取。
  • 在系统边界加入 SSRF、DNS/redirect、timeout、body-size 控制与 schema 校验。
  • 定位跨进程 queue/database 配置问题,并定义受控集成契约。

04 · B

已实现结果

  • 实现有源码依据的职位、申请、简历与任务数据流,以及可运行的 crawler/简历 processor。
  • 明确把面试、知识扫描、匹配报告 processor、完整 tool calling 与 RAG 排除在当前已实现范围之外。
04 · C

经验与反思

01

Agent 产品从可验证状态、有限权限与确定性写入开始,而不是从更多工具开始。

02

只有当状态、重试与失败可观察时,异步架构的复杂度才值得。

我能公开的内容

我围绕 monorepo 边界、数据流、结构化职位提取、受控 URL 抓取与异步简历处理开发这一平台。它目前是原型:身份与 SQLite 持久化仍面向开发,部分 Agent/RAG processor 仍在完善中。

公开来源

求职工作流场景照片 · StartupStockPhotos · CC0 https://commons.wikimedia.org/wiki/File:Laptop_picture_with_notepad.jpg