项目复盘:从 0 到 1 构建 JD 智能分析 Agent

本篇按"实验报告"的形式,完整记录这个项目的需求背景、方案设计、关键决策、踩坑与迭代过程。

目录
  1. 需求背景
  2. 方案设计与系统架构
  3. 关键技术决策
  4. 踩坑与解决
  5. 评测体系与成本控制
  6. 数据安全与脱敏
  7. 成果与迭代方向

1.需求背景

2026 年下半年启动跳槽,目标岗位为 AI 产品经理。在投递过程中发现三个高频痛点:

于是决定把这个问题当作一个真实的产品需求来做:做一个 Agent,把"JD分析 → 匹配评估 → 报告生成 → 投递归档"全流程自动化。它首先是我自己每天要用的工具,其次才是展示作品。

2.方案设计与系统架构

系统采用 FCAgent 两层架构:上层是由大模型驱动的决策循环,下层是注册给模型调用的工具集。LLM 不直接生成答案,而是通过 Function Calling 自主选择并调用工具,多轮迭代直至任务完成。

详细架构图:FCAgent两层架构

各层职责

另配有 Streamlit Web 界面,支持本地上传图片、查看分析进度与报告。

3.关键技术决策

决策一:输入类型判断交给 Function Call,而不是写死 if-else

早期版本用命令行参数路由(text/image 参数)。改造为 FCAgent 后,用户可以用自然语言表达("帮我分析这张图里的JD"),由 LLM 自主决定是否调用 ocr_image 工具。取舍:FC 更灵活、更接近真实 Agent 形态,代价是多一次模型决策调用。

决策二:知识库检索坚持代码遍历,不强行套 Function Call

匹配分析需要"拿 JD 里的每个技能去知识库逐项检索证据"。这个环节用 for 循环遍历技能清单逐个检索,而不是让 LLM 决定检索什么。原因:检索路径是固定的(每个技能都必须查),代码遍历 100% 确定性、无遗漏;交给 LLM 决策反而可能漏检。Function Call 应该用在"路径不确定"的决策点上,而不是为了用而用。

决策三:批量处理 = 并发OCR + 串行分析 + 串行写Excel

批量分析 N 份 JD 图片时,OCR 阶段无资源竞争可并发提速;LLM 分析阶段受 API 限流约束必须串行;写飞书 Excel 阶段若并发会产生行号冲突,也必须串行。按各环节的资源约束分段选择并发策略,而不是一刀切。

决策四:报告与归档分离,飞书表格固定覆盖写

每份 JD 生成独立的飞书云文档(无冲突,可并行),岗位汇总表则用固定范围覆盖写(URL 不变,刷新即更新),避免每次修改创建新表导致链接失效、文件冗余。

4.踩坑与解决

坑 1:RAG 检索漏检已有技能。知识库里明明记录了 4 年 SQL 经验,检索时却没有命中对应证据。
解决:分析发现是 chunk 切分策略把技能描述切断、以及单次提问式检索覆盖率不足。改为"逐技能检索"(每个技能单独一次向量检索)并优化 chunk 策略,召回率从 62% 提升到 87%。同时保留人工核对机制兜底。
坑 2:LLM 输入原始 JSON 导致输出截断。把结构化 JD 的 JSON 直接喂给模型做分析时,模型会"过度解释"字段含义,输出过长被截断,下游解析报错。
解决:先把结构化数据转成自然语言段落再输入模型,问题消失。教训:LLM 的输入形式直接影响输出行为,数据预处理是 Prompt 工程的一部分。
坑 3:LLM 供应商额度频繁耗尽。主用通道的免费额度多次在分析中途耗尽,流程直接中断。
解决:重构 LLM 配置层,支持多 Provider(注释/取消注释即切换),文本任务与视觉任务分离配置,主通道失效时秒级切换备用通道。
坑 4:批量写飞书 Excel 行号冲突。多篇报告并发写入同一张表格时,追加行号互相覆盖,数据错乱。
解决:写入阶段串行化,并改为"整表范围覆盖写"模式,彻底消除行号竞争。

5.评测体系与成本控制

效果评测(evaluator 模块)

核心思路:所有优化必须有量化依据,改 Prompt、改检索策略之前先跑基线,改完看指标变化,不靠感觉。

成本追踪(cost_tracker 模块)

多 Provider 容灾

这些模块的共同目标:让项目从"能跑的Demo"变成"可度量、可控成本的工程化系统"

6.数据安全与脱敏

7.成果与迭代方向

当前成果

下一步迭代方向