Skip to content

fix _parse_response 解析llm返回内容错误#378

Open
wang0618 wants to merge 1 commit intozai-org:mainfrom
wang0618:fix-llm-response-parsing
Open

fix _parse_response 解析llm返回内容错误#378
wang0618 wants to merge 1 commit intozai-org:mainfrom
wang0618:fix-llm-response-parsing

Conversation

@wang0618
Copy link

问题复现

def _parse_response(self, content: str) -> tuple[str, str]:
在遇到

<think>先思考</think>
<answer>do(action="Launch", app="知乎")</answer>

这种格式的llm响应时,会将action错误解析成 do(action="Launch", app="知乎")</answer>

复现代码:

def parse_response(content: str) -> tuple[str, str]:
    # Rule 1: Check for finish(message=
    if "finish(message=" in content:
        parts = content.split("finish(message=", 1)
        thinking = parts[0].strip()
        action = "finish(message=" + parts[1]
        return thinking, action

    # Rule 2: Check for do(action=
    if "do(action=" in content:
        parts = content.split("do(action=", 1)
        thinking = parts[0].strip()
        action = "do(action=" + parts[1]
        return thinking, action

    # Rule 3: Fallback to legacy XML tag parsing
    if "<answer>" in content:
        parts = content.split("<answer>", 1)
        thinking = parts[0].replace("<think>", "").replace("</think>", "").strip()
        action = parts[1].replace("</answer>", "").strip()
        return thinking, action

    # Rule 4: No markers found, return content as action
    return "", content

raw_content = """
<think>用户需要打开知乎查看首页第一条消息,当前在系统桌面,首先需要启动知乎应用,因此执行Launch操作打开知乎。</think>
<answer>
do(action="Launch", app="知乎")
</answer>
"""
thinking, action = parse_response(raw_content)
print("thinking:", thinking)
print("action:", action)

本PR修复了此问题,并补充测试用例

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant