name: task-bargaining description: 任务草案已产出(pending_draft 存在)后,处理玩家的接受/拒绝/讨价还价/整体重拟分支。涵盖 update_task_draft / confirm_agent_task / cancel_agent_task 三个工具的调用时机与参数约束。触发:task-publishing 流程产出 draft 后、玩家消息中带有"接受/同意/好/行/可以/可以吧"或"拒绝/算了/不要/不干"或"奖励再多点/加一点/换个关卡/太难了"等意图。不触发:尚未调用 draft_agent_task 时(此时应先走 task-publishing)。
任务草案协商流程
你在上一轮已经通过 draft_agent_task 产出草案,并用对话告诉玩家任务内容。本轮玩家回复后,按以下四分支处理。
分支 A:接受
识别信号:好 / 行 / 可以 / 没问题 / 接 / 我去 / 交给我吧 等肯定性表达。
调用 confirm_agent_task:
{
"draft_id": "<来自 pending_draft.draft_id>",
"title": "<与草案一致或微调后的最终标题>",
"description": "<任务说明,150 字内,与最终关卡/物品/奖励一致>",
"get_dialogue": [
{"name": "$PC", "title": "$PC_TITLE", "text": "我接这个任务。"},
{"name": "<NPC>", "title": "<NPC_TITLE>", "emotion": "欣慰", "text": "很好,那就拜托你了。"}
],
"finish_dialogue": [
{"name": "$PC", "title": "$PC_TITLE", "text": "任务完成。"},
{"name": "<NPC>", "title": "<NPC_TITLE>", "emotion": "满意", "text": "干得漂亮,这是你应得的酬劳。"}
],
"ui_hint": "正在登记任务……"
}
对话约束
text纯对话,不能包含动作/神态/旁白/【...】。神态放emotion字段。emotion从当前 NPC 可用情绪集合中挑选,可为空字符串。- 玩家条目用
$PC/$PC_TITLE占位,不要写死玩家名字。 - 每段对话数组至少 2 条,建议 2~4 条,简短自然。
- 不要复用其它任务的对话文本。
成功后
后端返回 status=confirmed,你在自然语言回复里自然地告知玩家任务已登记即可,不要列完整 JSON。
分支 B:拒绝
识别信号:不行 / 算了 / 不要 / 不接 / 再想想 / 这个我不做 / 先不了 等否定性表达。
调用 cancel_agent_task({"draft_id": "..."})(可选 ui_hint,≤12 字)。取消不需要任何原因字段。
随后以角色口吻回应:
- 好感度 ≥ 50:温和接受,"好吧,有空再找你聊" 类
- 好感度中等:中性回应
- 好感度低 / 角色刻薄:可以略带情绪但不失礼
不要隐瞒取消的事实,也不要在未取消的情况下当作发布成功。
分支 C:讨价还价/微调
识别信号:奖励太少 / 给多点 / 加一点 / 再给点 / 能不能换xxx / 这关卡不行换一个 / 不想提交xxx 等。
调用 update_task_draft:
{
"draft_id": "<来自 pending_draft.draft_id>",
"modify_fields": {
"rewards": [
{"item_name": "金币", "count": 1800},
{"item_name": "强化石", "count": 3}
]
},
"ui_hint": "正在调整奖励……"
}
modify_fields 规则
modify_fields只写需要修改的字段,保留的字段不要重复;不要另加reason等 schema 未声明的字段。- 支持修改:
title / finish_requirements / finish_submit_items / finish_contain_items / rewards / get_npc / finish_npc。 - 不支持修改
task_type——换任务类型请走"整体重拟"(分支 D)。 rewards调整后总价必须落在reward_budget.final_min ~ final_max × bargain_rate内(bargain_rate = 1.5)。- 每个草案最多允许 2 次 update_task_draft;超过返回
bargain_limit_exceeded。 - 允许不同意讨价还价:此时不调用 update_task_draft,直接用对话继续推销原草案即可。
调幅参考
| 好感度 | 最大上调幅度 |
|---|---|
| ≥ 50 | +30% ~ +50% |
| 20 ~ 49 | +10% ~ +50% |
| < 20 | +0% ~ +30% |
更新后
- 成功 → 继续用对话把新奖励/新条件告诉玩家,等待下一轮玩家回复。
validation_failed→ 后端会返回validation_errors,按提示修正后重新调用,或劝玩家接受原方案。
分支 D:整体重拟
识别信号:玩家要求换任务方向,如"能不能给我一个打架的任务""我不想跑腿,给个收集任务""换成挑战难度"。
做法:重新从 Step 1 开始:prepare_task_context → draft_agent_task。新的 draft 会替换当前 pending_draft(旧草案自动作废,无需手动 cancel)。
其它硬约束
- 当前无 pending_draft 时不要调用
update_task_draft / confirm_agent_task / cancel_agent_task。 - 即使玩家一句话同时表达"我接+但是奖励给多点",优先走分支 C(讨价还价),而非分支 A。等玩家对调整后方案说"好"再 confirm。
description / get_dialogue / finish_dialogue只在confirm_agent_task时填写,draft / update 阶段不要填。confirm_agent_task返回失败时(如校验不通过),按validation_errors修复后重试,不要伪装成已发布。