LLM 只需处理极短的 "Questions sent to user." 而不是完整的问题 JSON,减少了 token 消耗和延迟
This commit is contained in:
parent
30389be119
commit
0bf7a87a0e
@ -144,12 +144,11 @@ async def enhanced_generate_stream_response(
|
|||||||
is_ui_resource = (
|
is_ui_resource = (
|
||||||
msg.text
|
msg.text
|
||||||
and msg.text.lstrip().startswith('{"')
|
and msg.text.lstrip().startswith('{"')
|
||||||
and (
|
and '"ui://' in msg.text
|
||||||
('"ui://' in msg.text and ('"text/html' in msg.text or '"text/uri-list' in msg.text))
|
and ('"text/html' in msg.text or '"text/uri-list' in msg.text)
|
||||||
or '"__ask_user__"' in msg.text
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
if config.tool_response or is_ui_resource:
|
is_ask_user = msg.name == 'ask_user'
|
||||||
|
if config.tool_response or is_ui_resource or is_ask_user:
|
||||||
new_content = f"[{message_tag}] {msg.name}\n{msg.text}\n"
|
new_content = f"[{message_tag}] {msg.name}\n{msg.text}\n"
|
||||||
|
|
||||||
# Collect full content
|
# Collect full content
|
||||||
|
|||||||
@ -21,32 +21,20 @@ from mcp_common import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
ASK_USER_MARKER = "__ask_user__"
|
ASK_USER_RESPONSE = "Questions sent to user."
|
||||||
|
|
||||||
|
|
||||||
def ask_user(questions: list) -> Dict[str, Any]:
|
def ask_user() -> Dict[str, Any]:
|
||||||
"""Create an ask_user response.
|
"""Return a minimal fixed response for ask_user tool.
|
||||||
|
|
||||||
Args:
|
The actual questions/options are already in the TOOL_CALL arguments,
|
||||||
questions: List of dicts, each with "question", "options", and "multi_select".
|
so the frontend parses them directly from there. This response only
|
||||||
|
serves to acknowledge the tool call and minimize token usage in the
|
||||||
Returns a JSON structure with a marker so the backend can detect it
|
subsequent LLM inference round.
|
||||||
and emit it as a special delta.ask_user event at the end of the stream.
|
|
||||||
"""
|
"""
|
||||||
normalized = []
|
|
||||||
for q in questions:
|
|
||||||
normalized.append({
|
|
||||||
"question": q.get("question", ""),
|
|
||||||
"options": q.get("options", []),
|
|
||||||
"multi_select": q.get("multi_select", False),
|
|
||||||
})
|
|
||||||
payload = {
|
|
||||||
"__type__": ASK_USER_MARKER,
|
|
||||||
"questions": normalized,
|
|
||||||
}
|
|
||||||
return {
|
return {
|
||||||
"content": [
|
"content": [
|
||||||
{"type": "text", "text": json.dumps(payload, ensure_ascii=False)}
|
{"type": "text", "text": ASK_USER_RESPONSE}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,7 +156,7 @@ async def handle_request(request: Dict[str, Any]) -> Dict[str, Any]:
|
|||||||
request_id, -32602, "Missing required parameter: questions"
|
request_id, -32602, "Missing required parameter: questions"
|
||||||
)
|
)
|
||||||
|
|
||||||
result = ask_user(questions)
|
result = ask_user()
|
||||||
return {"jsonrpc": "2.0", "id": request_id, "result": result}
|
return {"jsonrpc": "2.0", "id": request_id, "result": result}
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user