分享
基于EnumMap搭建Flow状态机
输入“/”快速插入内容
基于EnumMap搭建Flow状态机
用户5417
用户5417
5月7日修改
前言:
这篇文章专门介绍当前项目里的
InterviewFlowStateMachine
。
它对应简历描述里的这一句:
基于
EnumMap
状态机实现流程推进。
这里的“状态机”不是一个很玄的概念。在这个项目里,它主要解决一个问题:
代码块
Plain Text
AI 面试答题流程不能乱跳。
它必须按照合法顺序从展示题目、提交答案、评分、追问、下一题、结束态之间切换。
对应核心代码:
•
admin/src/main/java/com/hewei/hzyjy/xunzhi/interview/application/flow/InterviewFlowStateMachine.java:14
•
admin/src/main/java/com/hewei/hzyjy/xunzhi/interview/application/flow/InterviewFlowStatus.java:3
•
admin/src/main/java/com/hewei/hzyjy/xunzhi/interview/service/model/InterviewFlowState.java:10
•
admin/src/main/java/com/hewei/hzyjy/xunzhi/interview/flow/answer/InterviewAnswerPipeline.java:212
为什么
需
要状态机?
AI 面试答题不是简单的:
代码块
Plain Text
用户提交答案 -> 调 AI -> 返回结果
真实链路里,一次答题可能会触发:
代码块
Plain Text
当前题校验
评分 Agent
追问裁决
追问 Agent
主问题推进
分数提交
turn log
runtime checkpoint
如果没有状态机,流程很容易变成散落在代码里的
if else
。比如:
代码块
Plain Text
如果当前正在提问,能不能直接完成?
如果当前正在评分,能不能进入追问?
如果已经完成,还能不能再次评分?
如果当前是追问题,下一步是继续追问还是回到主问题?
这些判断如果散落在 Pipeline、CacheService、AgentService 里,后续就很难维护。所以项目把“流程状态是否合法”集中到
InterviewFlowStateMachine
里。
状态机管理了什么?
状态机管理的是:
代码块
Plain Text
当前面试流程处在哪个阶段,以及哪些阶段之间可以合法跳转。
核心状态:
InterviewFlowStatus
状态机的核心状态定义在
InterviewFlowStatus
:
代码块
Java
public enum InterviewFlowStatus {
INIT,
ASKING,
EVALUATING,
FOLLOW_UP,
COMPLETED;
}