pull/882/merge
yi111 2026-10-01 11:31:00 +08:00 committed by GitHub
commit 2884eeb05f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 5 additions and 2 deletions

View File

@ -76,8 +76,9 @@ CHECK_ARGS = {
def parse_tool_calls(text): def parse_tool_calls(text):
calls = [] calls = []
for m in re.findall(r'<tool_call>(.*?)</tool_call>', text, re.DOTALL): for m in re.findall(r'<tool_call>(.*?)</tool_call>', text, re.DOTALL):
try: calls.append(json.loads(m.strip())) try: call = json.loads(m.strip())
except: pass except: continue
if isinstance(call, dict): calls.append(call) # 模型偶尔输出非对象JSON,直接丢弃避免下游崩溃
return calls return calls
def execute_tool(name, args): def execute_tool(name, args):
@ -132,6 +133,7 @@ def rollout_single(rollout_engine, tokenizer, messages, tools, max_turns=3, max_
if isinstance(raw, str): if isinstance(raw, str):
try: raw = json.loads(raw) try: raw = json.loads(raw)
except: raw = {} except: raw = {}
if not isinstance(raw, dict): raw = {} # arguments 结构异常按空参处理
result = execute_tool(name, raw) result = execute_tool(name, raw)
result_str = (json.dumps(result, ensure_ascii=False) if result else '{"error": "tool not found"}')[:2048] # 防止天文数字撑爆tokenizer result_str = (json.dumps(result, ensure_ascii=False) if result else '{"error": "tool not found"}')[:2048] # 防止天文数字撑爆tokenizer
messages.append({"role": "tool", "content": result_str}) messages.append({"role": "tool", "content": result_str})
@ -225,6 +227,7 @@ def calculate_rewards(prompts, completions, gt_batch, tools_batch, num_gen, rewa
if isinstance(raw, str): if isinstance(raw, str):
try: raw = json.loads(raw) try: raw = json.loads(raw)
except: raw = {} except: raw = {}
if not isinstance(raw, dict): raw = {} # arguments 结构异常按空参处理
check = CHECK_ARGS.get(name) check = CHECK_ARGS.get(name)
valid_call_count += int(bool(name in valid_names and check and check(raw))) valid_call_count += int(bool(name in valid_names and check and check(raw)))
tool_gap = abs(valid_call_count - len(gt)) + max(0, len(tool_calls) - valid_call_count) # tool数差值 tool_gap = abs(valid_call_count - len(gt)) + max(0, len(tool_calls) - valid_call_count) # tool数差值