Skip to main content

在针对意图识别与消息分类(如判断用户输入是否与“写作/当前主线任务”相关)这一场景下,无论是使用 Jev(TypeSafe AI 的 System One 判定模型) 还是通用大语言模型(如 GPT-4o、Claude、DeepSeek 等),发送“最近 5 条聊天消息(携带上下文)”的处理方式明显更好,判断准确率也大幅提升。

分析原因如下,并针对不同模型(Jev 与 通用 LLM)提供最佳的实施架构建议。


一、 为什么“发送最近 5 条消息(含上下文)”更好?​

  1. 解决指代消歧(Co-reference Resolution)与代词依赖
  • 只发最后一条: 用户发送 “把这段缩短一点” 或 “第三段逻辑不对”。如果只看最后一条,模型根本不知道“这段”指代什么,极易误判为“无意义的闲聊”或“无法处理的废话”。
  • 带上最近 5 条: 模型能看到上一条 AI 输出的是一段刚写好的文章,从而精准判定:“这是针对前文写作内容的修改指令,属于写作相关”。
  1. 区分“话题延续”与“真正打断/闲聊”
  • 只发最后一条: 用户发送 “什么是‘双碳目标’?”。从字面看,这像是一个纯知识性的提问(闲聊/问答)。
  • 带上最近 5 条: 上文显示用户正在让 AI 撰写一篇《企业 ESG 报告》。此时用户询问该名词,是为了补全写作素材,因此属于写作过程中的辅助检索,应当判定为写作相关。
  1. 捕获隐式转换与交互意图
  • 大量的用户写作交互并不是直接发命令,而是迭代式的对话(如:“不够专业”、“换个语气”、“加上两个案例”)。上下文是理解这些微小指令唯一依据。

二、 针对 Jev 与 通用 LLM 的不同优化策略​

针对你选择的判定引擎不同,在传入上下文时有不同的最佳实践:

策略 A:如果使用 Jev (TypeSafe AI)​

Jev 并不是生成式模型,而是一个专门接收 JSON State/文本并返回 Typed 概率决策的极速模型。它的优势在于毫秒级响应和高精度分类。

在使用 Jev 时,建议将“最近 5 条消息”格式化为结构化状态(Structured State),并结合其原生的 Noul (布尔判定) 或 Choice (分类) 原语:

  • 构建传入 Jev 的 State:
{
"system_mode": "writing_assistant",
"recent_history": [
{"role": "user", "content": "帮我写一篇科技新闻稿"},
{"role": "assistant", "content": "好的,这是初稿..."},
{"role": "user", "content": "把第二段改得更有激情一点"}
],
"latest_user_message": "再补充两个苹果公司的例子"
}

  • 定义 Jev 判定 Primitive (Noul / Choice):
  • 原语类型:Noul(即评估 Yes/No 概率)
  • 问题句:"Is the latest_user_message an instruction, feedback, or request directly related to the ongoing writing task or document creation in history?"

Jev 的优势: 耗时通常仅几十毫秒,且输出概率分值(Confidence),你可以设置当 Confidence > 0.8 时自动继续走写作 Pipeline,低置信度时降级处理。


策略 B:如果使用通用 LLM (如 GPT-4o-mini, Claude 等)​

通用 LLM 擅长理解自然语言上下文,但可能响应稍慢(300ms~1s)。

  • Prompt 结构建议: 提示词中必须显式定义最新消息与历史背景的区分,避免 LLM 将“回答历史问题”和“评估最后一条消息”搞混。
System: 你是一个意图分类器。请根据【历史对话】判断【最新一条消息】是否与“写作任务”(包括创作、修改、润色、资料查询、篇幅调整等)相关。

【历史对话】:
1. User: ...
2. AI: ...
3. User: ...

【最新一条消息】:
User: ...

请严格返回 JSON:{"is_writing_related": true/false, "reason": "..."}


三、 极致性价比与性能的“折中方案”​

如果你担心发送 5 条消息会导致 Token 消耗过大或增加了无用噪声,可以采用以下轻量级上下文提取法:

  1. 精简上下文发送: 不需要把最近 5 条消息全文发过去,可以只拼接:
  • 最近 2 条历史记录(上一轮 AI 输出了什么 + 用户上一轮说了什么)
  • 当前最新消息 (研究表明,85% 以上的指代和意图承接只需要跨越最近 1~2 轮对话即可解析)。
  1. 状态标注(State Flagging): 在后端维护一个布尔值 is_in_writing_mode。如果当前处于写作模式下,只要用户没有发送极度明确的跳出指令(如“停止写作”、“换个不相干的话题”),默认保持在写作上下文中,减少分类模型的调用频率。

总结结论​

  • 首选“发送最近上下文”(5 条或 2 轮对话): 能够完美解决指代模糊、代词缺失、资料查询类辅助写作等问题,大幅提升意图判定的真实准确率。
  • 搭配 Jev: 将历史消息组装为 JSON 格式的 State,利用 Jev 的 Noul 或 Choice 原语,能以极低的成本和极高的速度(< 100ms) 完成准确分类。