Files
aurak/docs/3.0/talent_assessment_workflow.md
T
Developer 0a9588abb7 feat: implement QuestionBank CRUD with pagination and template query
- Add pagination support to findAll (page, limit query params)
- Add findByTemplateId method to service
- Add GET /by-template/:templateId endpoint to controller
- Service already includes CRUD for QuestionBank and QuestionBankItem
2026-04-23 17:19:11 +08:00

122 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 人才评测智能体 (Talent Assessment Agent) 工作流程
人才评测智能体(Talent Assessment Agent)是一个基于 LangGraph 的 AI 系统,旨在通过与员工的动态对话,评估其对特定知识领域的掌握程度。
## 1. 核心流程概述
评测过程分为四个主要阶段:
1. **考纲拟定与生题 (Generation)**:基于知识库内容自动生成考题。
2. **交互引导 (Interviewing)**:AI 作为考官,向用户抛出问题并引导回答。
3. **智能阅卷与评分 (Grading)**:分析用户回答,给出分数及反馈,并决定是否追问。
4. **综合学情报告 (Analysis)**:汇总所有表现,产出最终的能力定级和建议报告。
---
## 2. 后端架构 (LangGraph)
系统使用 LangGraph 构建了一个有状态的任务流。
### 2.1 状态定义 (State)
所有节点共享 `EvaluationState`,其中包含:
- `questions`: 生成的题目列表(包含知识点和难度)。
- `currentQuestionIndex`: 当前题目索引。
- `messages`: 完整的对话历史(用于上下文推理)。
- `feedbackHistory`: 考官给出的实时反馈和得分记录。
- `scores`: 每道题的量化得分。
- `shouldFollowUp`: 是否需要针对当前题目进行补充追问。
### 2.2 节点逻辑 (Nodes)
- **`Generator` (出题节点)**
- **内容提取机制**
- 在评测开始前,`AssessmentService` 会根据用户选择的“知识库”或“知识分组”进行内容检索。
- **单文档提取**:直接从数据库中获取对应知识库记录的完整正文内容。
- **多文档分组提取**:如果是知识分组,则通过 `KnowledgeGroupService` 并行获取分组内所有已处理文件的内容,并按 `--- Document: [标题] ---` 格式进行拼接,形成聚合上下文。
- **题目生成**
- 将提取到的文本注入 LangGraph 的 `configurable` 参数中。
- 节点调用 LLM,将该文本作为 **Ground Truth (事实基准)**,要求 AI 生成 3-5 道覆盖不同知识点和难度(Standard, Advanced, Specialist)的 JSON 格式题目。
- **初始化**:将生成的题目写入状态,并初始化评测进度。
- **`Interviewer` (提问节点)**
- 负责将题目或追问信息转化为自然语言对话。
- 如果 `shouldFollowUp` 为真,则根据上次的 `feedback` 生成引导性话术。
- 节点执行后进入 **中断挂起 (Interrupt)** 状态,等待用户在前端输入。
- **`Grader` (评分节点)**
- 用户提交回答后唤醒。
- 对比“标准知识点”与“用户回答”的匹配度(准确性、完整性、深度)。
- 给处 0-10 分,并生成建设性反馈。
- **追问判定**:如果得分较低且未达到最大追问次数,则设置 `shouldFollowUp = true`
- **`Analyzer` (报告节点)**
- 评测结束(所有题目答完)时触发。
- 汇总所有得分和对话历史。
- 产出包含能力水平(Novice/Proficient/Advanced/Expert)、差距分析及学习建议的 Markdown 报告。
### 2.3 路由逻辑 (Routing)
- **`__start__`** -> `Generator` -> `Interviewer` -> **(等待用户回答)**
- 用户回答后 -> `Grader`
- `Grader` 判断:
- 需要追问? -> 回到 `Interviewer`
- 不需要追问且有后续题目? -> 索引自增,回到 `Interviewer`
- 题目全部完成? -> `Analyzer` -> **`__end__`**
---
## 3. 前端交互流
### 3.1 准备阶段 (Setup)
- 用户选择知识分组(Knowledge Group)。
- 前端调用 `/assessment/start` 获取 `sessionId`
- 连接到 `/assessment/:id/start-stream` 开始流式生成题目。
### 3.2 测评阶段 (Interactive)
- **实时对话**:前端渲染 `Interviewer` 生成的问题。
- **渐进反馈**:用户提交回答后,通过 `/answer-stream` 实时看到 `Grader` 给出的点评和得分(Live Feedback)。
- **状态流转**UI 会根据 `processStep` 提示当前 AI 正在进行的操作(如“正在阅卷”或“正在准备下一题”)。
### 3.3 结果阶段 (Completion)
- 测评完成后,展示总分、能力定级(Level)及详细分析。
- 支持历史记录回顾,用户可以随时查看之前的测评报告。
---
## 4. 数据持久化
- **线程持久化**LangGraph 的 `MemorySaver` 确保了对话状态的连续性。
- **业务存储**`AssessmentSession` 表记录了每场测评的元数据(状态、总分、语言、生成的题目及最终报告)。
- **断点恢复**:系统支持在服务器重启后,通过数据库中的历史消息自动重新激活 Graph 状态,实现“续考”。
---
## 5. 处理大规模知识库的“合理提取”策略
当知识分组中包含大量文档(如超过 50 份文件或数百万字)时,全量拼接(Raw Concatenation)会超越 LLM 的上下文窗口(Context Window)并降低生成质量。以下是系统推荐的“合理提取”进阶方案:
### 5.1 语义聚类与去重 (Semantic Clustering)
- **原理**:不直接提取文件,而是利用系统中已有的 `ElasticsearchService`
- **操作**:对知识组内的所有分片(Chunks)进行语义聚类,从中提取 10-20 个最具代表性的核心知识点(Core Concepts),以此作为“出题大纲”,而不是直接喂入全文。
### 5.2 动态 RAG 检索生成 (Dynamic RAG Generation)
- **原理**:将“出题”过程拆分为两步。
- **操作**
1. **种子生成**:AI 先在没有背景的情况下,根据知识组的主题(Topic)生成几个潜在的问题方向。
2. **精准检索**:针对每个方向,调用 `RagService.searchKnowledge` 检索出最相关的 Top-K 个知识分片。
3. **基于片段出题**:将检索出的精准片段作为 Ground Truth 提供给 `Generator` 节点,确保题目既真实存在于库中,又不会导致上下文溢出。
### 5.3 优先级与权重采样 (Weighted Sampling)
- **原理**:根据文档的元数据进行筛选。
- **操作**
- **按更新时间**:优先选择最近更新的政策或文档进行评测。
- **按文档权重**:可以为知识库中的文档打标(如“核心规章” vs “参考资料”),`Generator` 优先从核心规章中提取内容。
### 5.4 层次化提取 (Hierarchical Extraction)
- **原理**:先总结,后出题。
- **操作**:首先调用 AI 对整个知识分组进行一个“全景总结”(Summary),得到一份 2000 字以内的“知识图谱摘要”,再基于这份摘要进行出题编排。
---
## 6. 总结与建议选择
将架构改为 LangGraph 后,状态管理的复杂性从微服务代码退化为了直观的、声明式的图流转。对于大规模知识库的处理,建议逐步从“全量提取”转向“动态 RAG 采样”,以保证评测的深度与广度。