【Hackathon 9th Sprint No.60】【RFC】为 FastDeploy 新增支持 DeepSeek 模型的 Reasoning Parser & Tool Parser by fgeygfe · Pull Request #1185 · PaddlePaddle/community (original) (raw)

对于具体执行方案,给一个以下建议:
根据不同模型输出协议的差异制定不同的执行方案(Review 的时候,也会与方案进行对齐)。

首先,列举模型,正常返回是的协议情况, 例如(不一定是 Deepseek 模型的示例)

有调用工具意图的时候:reasoning_content</think>\n\n<tool_call>xxx</tool_call><tool_call>xxx</tool_call></s>
无调用工具意图的时候:reasoning_content</think>content</s>

其次,制定在不同输出场景的处理方案, 例如:

  1. 未出现</think>场景, 如: ABCD
  1. 未出现<tool_call>, 如 ABCD </think> EFG
  1. 出现<tool_call>, 但与</think>之间有 非\n字符,如 ABCD </think>\nEFG\n<tool_cal>XXX</tool_call>
  1. 出现<tool_call>, 且与</think>之间仅有\n字符, 如ABCD </think>\n\n<tool_cal>XXX</tool_call>
  1. 多工具解析时,</tool_call>与下一轮的<tool_call>之间有非\n 字符时, 可以忽略,如 ABCD </think>\n\n<tool_cal>XXX</tool_call>\nXYZ\n<tool_call>XXX</tool_call>
  2. 工具解析逻辑<tool_call>与</tool_call>之间任一个内容不合法时....

还可以进一步考虑非思考模式下,思考和工具的解析方案。