☰
用华为云码道 CodeArts 代码智能体,三天从零做出一个全栈 AI 求职平台(附源码)
2026/10/15 5:38:15 网站建设 项目流程

一键开通华为云码道 CodeArts 代码智能体

项目仓库:https://atomgit.com/gcw_93rlw6ed/careerpilot (公开,MIT 协议)
演示账号:打开登录页自动进入(演示账号 candidate@demo.com 自动登录)

一、项目背景:为什么做 CareerPilot

每年校招季,求职者最常见的三个痛点:简历投了没回音、不知道自己简历的问题在哪、面试前没有低成本的演练机会。而招聘方反过来也有痛点:一份热门岗位动辄几百份投递,人工初筛效率极低。

于是我决定用华为云码道 CodeArts 代码智能体开发一个「职引 CareerPilot」——一个 AI 驱动的求职协作平台,打通这条链路:

简历上传 → AI 解析与诊断 → 岗位智能匹配 → AI 模拟面试 → 投递跟踪 → 招聘方初筛

整个项目从需求拆解、架构设计、代码生成到测试补齐,全程由 CodeArts 代码智能体辅助完成,本文完整记录这个过程。

▲ 图 1:使用 CodeArts 代码智能体进行开发,左上角可见 AtomGit 账号 gcw_93rlw6ed

二、功能与效果演示

求职者端:

  • 注册登录(演示模式自动登录,零配置体验)
  • 简历上传(PDF/DOCX/TXT)→ 自动解析 + PII 脱敏
  • AI 简历诊断:给出评分与改进建议
  • 岗位广场:浏览岗位并一键投递,投递时 AI 自动计算匹配度
  • AI 模拟面试:针对目标岗位生成面试题,逐题作答并获得点评

招聘方端:

  • 企业信息维护、岗位发布/管理/下线
  • 查看投递列表,AI 初筛排序,候选人信息默认脱敏展示

▲ 图 2:求职者工作台——简历数、投递数一目了然,支持明暗主题切换

▲ 图 3:简历中心——上传解析与 AI 诊断评分

▲ 图 4:AI 模拟面试——按岗位生成面试题并逐题点评

三、技术架构

整体采用pnpm monorepo + 前后端分离:

careerpilot/ ├─ apps/web/ # React 18 + TypeScript + Vite + Ant Design + TanStack Query + Zustand ├─ apps/api/ # NestJS + Prisma + PostgreSQL + Redis ├─ packages/shared/ # 前后端共享类型与 DTO ├─ e2e/ # Playwright 端到端测试 └─ docker-compose.yml # 一键起全栈(web/api/db/redis)

▲ 图 5:系统分层架构——前端 / NestJS 模块化后端 / AI Provider 抽象层 / 数据层

架构上有五个关键决策(完整 ADR 见仓库 docs/architecture.md):

  1. AI 能力抽象为 Provider 接口:放弃直连单一厂商 SDK,AI_PROVIDER一键切换 pangu/openai/mock,mock 确定性回退保证评审零配置跑通;
  2. PII 在 Service 层 AES-256-GCM 加密:即使拿到库快照也读不出明文,出库后按角色决定脱敏展示;
  3. 权限判定下沉 Service:Controller 只做协议转换,资源级所有权校验在 Service 内完成并由单测锁定;
  4. Redis 仅作缓存、允许整体降级:连接失败静默降级,系统正确性不依赖缓存;
  5. monorepo 共享类型包:前后端 DTO 单一来源,字段漂移在编译期暴露。

后端采用 NestJS 模块化分层架构(Controller → Service → Prisma),共 9 个业务模块:auth / user / resume / job / match / interview / ai / upload / audit。

一个值得一提的设计是AI Provider 抽象层:

// apps/api/src/modules/ai/llm.provider.tsexportinterfaceLlmProvider{diagnose(resume:string):Promise<DiagnoseResult>;matchScore(resume:string,job:string):Promise<MatchResult>;interview(session:InterviewContext):Promise<InterviewTurn>;}

通过环境变量AI_PROVIDER=pangu|openai|mock即可切换底层模型:

  • pangu:对接华为云盘古大模型,贴合华为云生态;
  • openai:OpenAI 兼容协议,换 base_url 可接任意厂商;
  • mock:无 API Key 时自动回退的确定性实现,保证任何人 clone 下来都能零配置跑通全流程。

这个抽象是 CodeArts 智能体在架构讨论阶段帮我做的关键决策之一——它让"AI 能力"从硬编码调用变成了可替换的基础设施。

四、开发过程实录:CodeArts 智能体是怎么帮我干活的

整个开发我没有从零手写脚手架,而是用"需求描述 → 智能体生成 → 人工校核 → 迭代修正"的循环推进,大致分四个阶段:

阶段 1:需求拆解与架构设计(约 0.5 天)

我先把一句话需求"做一个 AI 求职平台,支持简历解析、岗位匹配、模拟面试"丢给 CodeArts 智能体,让它产出模块划分和数据模型草案。它给出的 Prisma schema 第一版就把用户角色(求职者/招聘方)、简历、岗位、投递、面试会话五张核心表的关系理清楚了,我主要做了两件事:砍掉过度设计的字段(比如它给简历表加了 6 个我第一期用不到的扩展字段)、补上我坚持要的审计日志表。

阶段 2:骨架与核心链路(约 1 天)

让智能体按模块逐个生成:先 auth(注册/登录/JWT 双 Token),再 resume(上传解析),再 job 和 match。每生成一个模块我就跑一次它的单元测试。这里有个很实用的技巧:让智能体在写业务代码的同时把该模块的测试一起写了,而不是最后补——最后补测试的返工成本远高于随写随测。

阶段 3:前端页面与联调(约 1 天)

前端 9 个页面全部用智能体生成初版:登录页、工作台、简历中心、岗位广场、投递记录、模拟面试、404 等。我提的 prompt 模式是"页面用途 + 数据源接口 + 交互要求 + 已有组件约束(Ant Design)",生成质量相当稳定。联调阶段主要靠 Swagger 文档(/docs端点)对齐前后端字段,发现一个有趣的提效点:让智能体先给所有 DTO 加上 @nestjs/swagger 装饰器,前端照着实例 JSON 对接,字段对不上的低级错误基本消失了。

阶段 4:质量加固(约 0.5 天)

最后一轮让智能体做"自我体检":跑覆盖率、找薄弱模块、针对性补测试。它先给出覆盖率报告,定位到 7 个控制器的函数覆盖率偏低,然后自动补上了对应的控制器单元测试。最终后端达到26 个测试套件、138 个测试,语句覆盖 92.6%、函数覆盖 87.58%;前端补齐 5 个测试文件 13 个用例;E2E 用 Playwright 覆盖登录、路由守卫、注册、404、表单校验共 13 项,全部通过。

五、安全合规设计

求职平台天然处理大量个人敏感信息(PII),所以安全不是加分项而是及格线。本项目在这方面做了完整的一套:

维度实现
认证授权Argon2 密码哈希 + JWT 双 Token 轮换 + RBAC 角色控制 + 资源级所有权校验
PII 保护手机/邮箱 AES 加密存储、日志脱敏、列表掩码展示、敏感访问审计留痕
注入防护Prisma 参数化查询防 SQL 注入、Prompt 注入隔离、XSS sanitize、helmet + CSP
限流审计@nestjs/throttler 覆盖登录/注册/上传/AI 等敏感接口,AuditLog 记录敏感操作
文件上传类型/大小/MIME 白名单、文件名随机化、非公开存储

六、工程质量一览

  • 测试:后端 Jest 26 套件 138 测试(语句 92.6% / 分支 77.82% / 函数 87.58%);前端 Vitest 5 文件 13 用例;E2E Playwright 13 项全过
  • 依赖安全:pnpm audit实测出生产链 21 项漏洞(7 高危),通过 pnpm overrides 将 multer/lodash/qs/body-parser/uuid/file-type 六个传递依赖强制拉到修复版,最终收敛到 1 项 moderate(剩余项需 @nestjs/core v11 大版本升级,已在仓库如实标注);前端 react-router-dom 同步升级 v6→v7.18 并保持 13 项测试全过
  • CI/CD:pnpm verify一键验证链(lint → test → build,本地提交前强制自检),husky + commitlint 在每次提交时真实拦截不规范 commit;仓库内置 GitHub Actions 工作流,托管到 GitHub 后即自动生效
  • 性能:前端路由懒加载(9 页面独立 chunk)+ Vite manualChunks 分包(react/antd/query 独立 vendor),首屏体积可控
  • API 文档:Swagger OpenAPI 集成,/docs交互式调试

七、CodeArts 代码智能体使用体验

做得好的:

  1. 中文需求理解准确——业务术语(“投递”“初筛”“脱敏”)不用额外解释,生成的代码注释也是规范中文;
  2. 工程习惯好——生成的代码默认带 DTO 校验、统一异常处理、Swagger 装饰器,不是"能跑就行"的玩具代码;
  3. 与 AtomGit 联动顺滑——仓库托管、提交记录全程在一条链路上,对外展示作品很体面。

希望改进的:

  1. 生成 monorepo 构建配置时,nest start --watch的入口路径在嵌套 dist 结构下会指错(dist/mainvsdist/apps/api/src/main),需要人工修一次;
  2. 测试在 jsdom 环境缺matchMediapolyfill 时会挂,希望脚手架能默认带上。

八、总结

三天时间,一个包含 9 个后端模块、9 个前端页面、151 个自动化测试(后端 138 + 前端 13)、完整 CI 流水线的全栈 AI 应用从零跑通——这在没有 AI 编程助手的时代是不可想象的。CodeArts 代码智能体的价值不只是"写得快",更在于它把工程最佳实践(分层架构、测试、文档、CI)变成了默认动作。

项目已完整开源,欢迎体验与指正:

  • 源码:https://atomgit.com/gcw_93rlw6ed/careerpilot (MIT 协议,Docker Compose 一键启动)
  • 体验:clone 后docker compose up --build -d,打开 http://localhost:5173 自动进入演示账号

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询