From ecc113f9b362000a34a70507e02bb89a48d213fc Mon Sep 17 00:00:00 2001 From: ymq Date: Tue, 15 Sep 2026 21:51:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(human=5Ftask):=20=E4=BA=BA=E7=B1=BB?= =?UTF-8?q?=E5=BE=85=E5=8A=9E=E7=AD=94=E5=A4=8D=E5=8D=B3=E6=9D=83=E5=A8=81?= =?UTF-8?q?,=E4=B8=8D=E5=86=8D=E9=80=81agent=20QC(2026-09-15=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=A3=81=E5=AE=9A)=E2=80=94=E2=80=94=E5=8E=9Fcomplete?= =?UTF-8?q?=E2=86=92human=5Ftask=5Fqc=E2=86=92LLM=E5=AE=A1=E6=9F=A5?= =?UTF-8?q?=E4=BA=BA=E7=B1=BB=E7=AD=94=E5=A4=8D=E2=86=92=E4=B8=8D=E5=90=88?= =?UTF-8?q?=E8=A7=84=E9=80=80=E5=9B=9Epending=E2=86=92=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=86=8D=E8=AF=B4=E5=BF=BD=E7=95=A5=E5=8F=88=E8=A2=AB=E9=80=80?= =?UTF-8?q?=E7=9A=84=E6=AD=BB=E5=BE=AA=E7=8E=AF(=E7=94=98=E8=82=83?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE45EbV3Nw=E5=AE=9E=E6=B5=8B=E5=A0=863=E4=B8=AA?= =?UTF-8?q?QC=E4=BB=BB=E5=8A=A1);=E4=BA=BA=E5=B7=A5override=E6=9D=83?= =?UTF-8?q?=E5=A8=81=E5=AE=88=E5=8D=AB=E9=A1=BB=E8=B7=B3=E8=BF=87=E9=93=81?= =?UTF-8?q?=E5=BE=8B,complete=E7=9B=B4=E6=8E=A5done+qc=5Fstatus=3Dpassed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pipeline_service/human_task_capability.py | 27 ++++++----------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/pipeline_service/human_task_capability.py b/pipeline_service/human_task_capability.py index c30b9f2..ff883c4 100644 --- a/pipeline_service/human_task_capability.py +++ b/pipeline_service/human_task_capability.py @@ -284,31 +284,18 @@ async def complete_human_task(human_task_id, result_data, operator_id=None): if task_type == T_BUG_ACCEPT: return False, "bug 验收任务请走 bug_accept 接口" - # general:done + 触发 QC(创建 qc_review 任务) + # 2026-09-15 用户裁定(人类答复权威):人类待办的答复不再送 agent QC。 + # 原链路 complete→human_task_qc→通用QC提示词审查人类答复→LLM 判「答复不合规」 + # →qc_reject→待办回 pending→用户再说「忽略」又被退——实测甘肃项目用户答复 + # 「忽略任这些问题」被连退(45EbV3Nw 一个待办堆了 3 个 QC 任务)。 + # 待办的本质是「请人类办事」,人类说完成/忽略 = 最终裁定,agent 审查人类是倒挂; + # 与「人工 override 权威守卫须跳过」铁律一致(确定性规则,不靠 LLM 自觉)。 await sor.sqlExe( "UPDATE pipeline_human_tasks SET status='done', result_data=${rd}$, " + "qc_status='passed', qc_comment='人类答复即权威(不送agent QC)', " "submitted_by=${oid}$, submitted_at=NOW() WHERE id=${hid}$", {"rd": result_json, "oid": operator_id, "hid": human_task_id}) await sor.sqlExe("COMMIT", {}) - - # 创建 QC 任务(复用 qc poller → qc_review_run) - qid = getID() - qparams = { - "task_kind": "human_task_qc", - "human_task_id": human_task_id, - "title": ht.get('title', '') or '', - "description": (ht.get('description', '') or '')[:2000], - "iteration_id": ht.get('iteration_id', '') or '', - } - # 补 title(pipeline_human_tasks 有 title 列,已在上方 result 里带) - await sor.C('pipeline_tasks', { - 'id': qid, 'tenant_id': pid, 'pipeline_id': 'role_task', - 'owner_id': 'human_task_qc', - 'title': f"人类任务 QC 检查({human_task_id[:8]})", - 'state': 'qc_review', 'role': 'agent.qc', - 'params': json.dumps(qparams, ensure_ascii=False), - }) - await sor.sqlExe("COMMIT", {}) return True, human_task_id