一键开通华为云码道 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):
- AI 能力抽象为 Provider 接口:放弃直连单一厂商 SDK,
AI_PROVIDER一键切换 pangu/openai/mock,mock 确定性回退保证评审零配置跑通; - PII 在 Service 层 AES-256-GCM 加密:即使拿到库快照也读不出明文,出库后按角色决定脱敏展示;
- 权限判定下沉 Service:Controller 只做协议转换,资源级所有权校验在 Service 内完成并由单测锁定;
- Redis 仅作缓存、允许整体降级:连接失败静默降级,系统正确性不依赖缓存;
- 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 代码智能体使用体验
做得好的:
- 中文需求理解准确——业务术语(“投递”“初筛”“脱敏”)不用额外解释,生成的代码注释也是规范中文;
- 工程习惯好——生成的代码默认带 DTO 校验、统一异常处理、Swagger 装饰器,不是"能跑就行"的玩具代码;
- 与 AtomGit 联动顺滑——仓库托管、提交记录全程在一条链路上,对外展示作品很体面。
希望改进的:
- 生成 monorepo 构建配置时,
nest start --watch的入口路径在嵌套 dist 结构下会指错(dist/mainvsdist/apps/api/src/main),需要人工修一次; - 测试在 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 自动进入演示账号