fix(parse): _parse_agent_action 支持 deepseek v4 DSML 原生工具调用格式——长上下文多轮时不解析会5轮耗尽
This commit is contained in:
parent
c9d914b9ff
commit
8fafe18d91
@ -1762,6 +1762,26 @@ def _parse_agent_action(raw):
|
||||
if raw.startswith("```"):
|
||||
raw = raw.split("\n", 1)[1].rsplit("```", 1)[0].strip()
|
||||
|
||||
# deepseek v4 原生格式(全角竖线):<|DSML||invoke name="...">…<|DSML||parameter name="...">value</|DSML||parameter></|DSML||invoke>
|
||||
# 与旧版 <invoke> 同款解析:长上下文多轮时 deepseek 会自发输出该格式,不解析则全部判「未识别」→ 5 轮耗尽。
|
||||
m = re.search(r'<|DSML||invoke\s+name="([^"]+)"[^>]*>(.*?)</|DSML||invoke>', raw, re.DOTALL)
|
||||
if m:
|
||||
tool = m.group(1).strip()
|
||||
body = m.group(2)
|
||||
params = {}
|
||||
for pm in re.finditer(r'<|DSML||parameter\s+name="([^"]+)"[^>]*>(.*?)</|DSML||parameter>', body, re.DOTALL):
|
||||
val = pm.group(2).strip()
|
||||
try:
|
||||
val = json.loads(val)
|
||||
except (json.JSONDecodeError, ValueError):
|
||||
pass
|
||||
params[pm.group(1)] = val
|
||||
if tool in ('deliver', 'deliver_result', 'submit', 'finish'):
|
||||
return {"action": "deliver", **params}
|
||||
if tool in ('ask', 'ask_question', 'ask_user'):
|
||||
return {"action": "ask", "question": params.get("question", "")}
|
||||
return {"action": "tool_call", "tool": tool, "params": params}
|
||||
|
||||
# deepseek 原生 function calling 输出 XML:<tool_calls><invoke name="..."><parameter name="..." string="true">...</parameter></invoke></tool_calls>
|
||||
m = re.search(r'<invoke\s+name="([^"]+)"[^>]*>(.*?)</invoke>', raw, re.DOTALL)
|
||||
if m:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user