fix: refresh delegation permissions and report Reasoner task outcomes
This commit is contained in:
@@ -38,7 +38,9 @@ CONTROL_NAMES = frozenset({"complete_task", "ask_user"})
|
||||
|
||||
TASK_INSTRUCTIONS = """你是语音助手的后台任务执行者,有独立上下文。
|
||||
只执行委派目标,并使用当前已授权的工具;技能说明不能增加权限。
|
||||
完成任务后必须调用 complete_task(result),结果应准确说明完成内容和限制。
|
||||
结束执行时必须调用 complete_task(status, result),明确报告任务目标是否完成。
|
||||
只有完整完成目标时 status 才为 succeeded;无法完成或只完成部分目标时必须使用 failed,
|
||||
并在 result 中说明已完成内容、未完成部分和限制。该状态是你的执行报告,不代表平台独立验证。
|
||||
需要用户提供必要信息时调用 ask_user(question),等待回复后继续。
|
||||
普通文字、思考过程、工具回执和模型空闲都不代表任务完成。
|
||||
任务结果由 Speaker 整理后告知用户,不要输出内部推理过程。
|
||||
@@ -146,8 +148,19 @@ class ReasonerExecutor:
|
||||
callbacks.append((tool.function_name, execute))
|
||||
|
||||
schemas.extend([
|
||||
FunctionSchema(name="complete_task", description="明确完成任务并提交最终结果。",
|
||||
properties={"result": {"type": "string", "description": "完成结果、依据和未完成的限制。"}}, required=["result"]),
|
||||
FunctionSchema(
|
||||
name="complete_task",
|
||||
description="结束执行,报告任务目标是否完整完成。部分完成或无法完成必须报告 failed。",
|
||||
properties={
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": ["succeeded", "failed"],
|
||||
"description": "执行模型对目标完成情况的报告,不能仅因执行结束而报告成功。",
|
||||
},
|
||||
"result": {"type": "string", "description": "执行结果、依据和未完成的限制。"},
|
||||
},
|
||||
required=["status", "result"],
|
||||
),
|
||||
FunctionSchema(name="ask_user", description="需要必要信息时暂停任务,向用户提出一个问题。",
|
||||
properties={"question": {"type": "string", "description": "需要用户回答的问题。"}}, required=["question"]),
|
||||
])
|
||||
@@ -164,14 +177,19 @@ class ReasonerExecutor:
|
||||
)
|
||||
|
||||
async def _complete_task(self, params: FunctionCallParams):
|
||||
status = params.arguments.get("status")
|
||||
result = str(params.arguments.get("result") or "").strip()
|
||||
if not result or self._pending or self._stopped:
|
||||
if status not in ("succeeded", "failed") or not result or self._pending or self._stopped:
|
||||
await params.result_callback(
|
||||
{"status": "error", "message": "需要非空结果,且任务不能处于等待输入或停止状态"},
|
||||
{"status": "error", "message": "必须提供 succeeded 或 failed 状态及非空结果,且任务不能处于等待输入或停止状态"},
|
||||
properties=FunctionCallResultProperties(run_llm=not (self._pending or self._stopped)),
|
||||
)
|
||||
return
|
||||
self._final = {"status": "succeeded", "summary": "任务已完成", "result": result}
|
||||
self._final = {
|
||||
"status": status,
|
||||
"summary": "Reasoner 报告任务已完成" if status == "succeeded" else "Reasoner 报告任务未完成",
|
||||
"result": result,
|
||||
}
|
||||
await params.result_callback({"status": "accepted"}, properties=FunctionCallResultProperties(run_llm=False))
|
||||
|
||||
async def _ask_user(self, params: FunctionCallParams):
|
||||
|
||||
Reference in New Issue
Block a user