盈绰服务云
短信催缴的项目名称守卫:先用 collection sms-task list-projects 核对本轮项目 ID 与真实名称,再在 notice-create(包括 --preflight)和 notice-preflight-batches 中传 --project-name "<真实项目名称>"。CLI负责设置每条发送记录的 projectName;不能只传项目 ID、猜名称、手改批次 JSON 或绕过模板必填变量检查。缺变量时说明缺少的业务信息,停止发送。详见 sms-notice.md。
客户房产欠费快捷命令(优先于项目排行)
用户问某客户「有几套 / 多少套 / 分别欠费 / 各房产欠多少」时,先按项目精确定位范围,然后执行:
sh ./scripts/yc-cloud.sh collection checkout-desk customer-summary --project-id <id> --user-name <精确姓名>
姓名精确匹配到多个客户时必须展示候选并请用户确认;用户已给手机号时加 --mobile <精确手机号>,已确认客户 ID 时改用 --user-customer-id <id>。不得自动选首个或根据欠费记录排除同名客户。CLI 负责全量关联房产计数(含无欠费房屋/车位)和完整收银台金额汇总;原样展示 CLI 输出,禁止手算或截取前 10 条重算。用户明确要求全部同名客户时,按候选 ID 分别执行、分别展示,不合并客户。详见 list-query.md。
项目欠费聚合快捷命令(筛选/排行/Top N)
范围确定后一条命令出结果,不要探索文件系统、不要加 --limit。collection sms-task preview --query-plan 内部按每页 500 自动翻页取全量(上限 50000),Agent 不要自己翻页。count 聚合禁止带 field(细节见 list-query.md)。
sh ./scripts/yc-cloud.sh collection sms-task preview --project-id <id> --require-page false --query-plan '<JSON计划>'
计划字段与合同见 references/list-query.md。一般展示场景不加 --json(stdout 已是表);收银台账单是例外:checkout-desk list-arrears 和 house-arrears 必须加 --json,由平台直接展示 billingStatement,不得根据 data 自行计数、分组、计算或重写金额表。
Role
本文件只做三件事:
- 判断请求属于哪个业务模块
- 应用全局守卫
- 把执行细节下沉到对应模块文件
本文件不承载参数细节,不承载长示例,不承载完整命令白名单。
Scope
当前只覆盖以下已注册业务模块:
collectiondeposit-refundhouseemployeeorderrebatetravelflash
另覆盖文档模块(非 CLI 子命令 allowlist):
pay-x402:微信 Agent Pay / X402 付费契约(HTTP 履约)
不覆盖:
- 泛化聊天
- 猜接口
- 历史命令
- 未在模块 allowlist 中出现的命令
Global Truth
全局事实源顺序固定如下:
AGENTS.mdreferences/runtime.md(CLI 启动与调用方式)internal/app/app.godocs/COMMAND_SPEC.mdreferences/list-query.md(仅列表统计意图)- 对应模块文件
- 对应模块源码
以下材料不是事实源:
dist/- 历史发布包说明
- 其他仓库同名实现
- README 中与当前源码冲突的描述
Routing
短信催缴的自然语言场景先读 sms-notice.md,按新版通知接口执行,不沿用历史单户范围。
新版短信催缴入口优先:该页面使用 collection sms-task notice-preview --summary-only --json → notice-prepare --json → 业务摘要。同次催缴的全部房屋必须合并为一个名单、一个任务;完整房名直接使用一次 notice-preview --house-names(已有全部ID可用 --house-ids),不逐房查询大段产权数据,预览与本地准备可在同一工具调用中用 && 顺序执行;准备后仅调用一次 notice-create,禁止逐房发送。超过100条不能保持单任务时停止说明限制,不自动拆成多个任务。已明确授权发送且参数齐全时直接创建,内部校验照常执行,不强制额外 --preflight;明确预检/测试时,多批一次使用 notice-preflight-batches,单批使用 notice-create --preflight。仅“生成”停在准备摘要,不能自行发送。使用 collectionNotice 接口,禁止回退旧 preview/send。路径和目录只作内部衔接,不展示给用户。详见 sms-notice.md。
<!-- billing-presentation-contract:v1 -->
收银台账单完整输出约束:checkout-desk list-arrears 与 house-arrears 必须保留完整 --json 输出;禁止接 head、tail、grep 等管道,禁止手工截取 JSON。--output <文件> 可与 --json 同时使用,不影响后续分享账单。收到客户澄清时正常提问;查询多套房时逐套完成本轮查询,不用历史金额补齐。账单卡片与解释、链接并存;不得以汇总文字代替用户要求的明细,也不得对用户输出内部字段名。
<!-- billing-client-share-routing:v1 -->
平台本轮已开启交互问答时:缺参、消歧、让用户选择下一步都必须调用 ask_user_question(兼容 ask_clarification),禁止用普通文本选项或 weixin:// / data.billUrl 代替。判定只看平台问答开关,不得在工具返回里寻找场景提示。share-bill create-snapshot 成功且返回真实 data.billId 后,必须按 collection.md 的「客户端账单分享」单独调用 ask_user_question;禁止只输出「账单已生成」或「现在把账单分享给好友」就结束。平台问答未开启时,继续交付 CLI 返回的完整 billUrl/shareMessage。
指定房屋查账单、欠费或要求重查时,使用 collection checkout-desk house-arrears --project-id <id> --real-short-name <房屋全称> --json(已知房屋 ID 可改用 --house-id)。本轮实际执行;needs_clarification 时确认候选客户,不得把应收管理的 receivable arrears-list 当作收银台账单。金额以 billing-system 收银台接口为准。成功输出中的 billingStatement 是程序校验后的展示结果;平台展示账单后,只补充说明,不再另写金额、笔数或分组表。
- 付费资源、Agent Pay、X402、微信支付付费、
WeixinPay-Required、支付服务 - 先读 pay-x402.md,按其中付费前置检查 → 支付触发 → 重试 → 订单号传递 → 异常处理执行
- 支付服务:
https://higress-gateway-test.evertro.tech/agentpay/api/resource(独立 agentpay-api) - 未支付完成前,不得改走业务 CLI 命令履约同一付费内容
项目已结清户数优先走 collection receivable settled-list,默认 house;先读 references/receivable.md,不进入欠费排行的 list-query 流程。项目已确认时直接复用本轮真实 ID。使用平台执行策略的默认工具超时;CLI 按平台注入的 AGENT_QUERY_CONCURRENCY / AGENT_QUERY_PAGE_SIZE 完整分页取数,未配置策略时默认并发8、源页1000,单源最多处理 100000 条,通用环境协议见 runtime.md,不得覆盖预算。模型只执行一次查询、原样使用摘要,不自行翻页或逐户查询。不要因等待改参数重复重跑,也不要添加 --debug 输出全部账单。
其他请求先判断是否为列表统计意图:请求同时包含业务对象,且包含“几套、多少套、分别欠费、各房产、筛选、以上/以下、大于/小于、分组、汇总、合计、排行、Top N、前 N”之一。指定客户的房产数量和逐房欠费优先走 checkout-desk customer-summary,不得套用项目 preview 路径。
- 命中列表统计意图:先读 runtime.md 和 list-query.md。
list-query.md已接入的数据源:直接按其查询计划合同执行,不先通读大型业务模块文件。- 未接入、转为明细查询或进入写操作:再路由到下方对应模块。
“应收已结清”与“已收款”是同义问法:用户问“应收已结清”“哪些户已结清”或“项目有几户应收已结清”时,使用 collection receivable settled-list --project-name,默认按 house 分组;明确说“按业主/缴款人”时传 --group-by owner,明确要求同一业主多套房分别统计时传 --group-by owner-house。该命令通过“全部应收分组 - 未结清分组”得到已结清分组,不改路由到收款报表或收费订单;owner 的身份键是 userCustomerId(缴款客户),不自动解释为法律产权人。
按关键词进入模块(收费系统已按子域拆分为多个模块文件):
- 催缴、欠费、收银台、分享账单、催缴通知单、违约金减免、短信、模板、短信黑名单、黑名单、拉黑、
collection sms-blacklist、collection - 读 collection.md
- 应收管理、应收入账、应收减免、缴款明细、缴款汇总、今日收款、当日收费、收款日期、按收款时间查询、收缴率、预收余额、押金余额、欠费明细表、收费订单、缴费记录、订单记录、已交费明细、票据更正、撤销订单、变更缴款人、账单调整、导入、多经、多业态营收
- 读 receivable.md
- 租客、租户、业主、房屋、房屋管理、添加租客、添加业主、客户管理、编辑客户、修改客户、修改手机号、房屋客户关系、
house - 读 house.md
- 员工、员工管理、员工状态、在职、离职、启用员工、关闭员工、停用员工、账号状态、员工角色、内部管理、
staff-manage、employee - 读 employee.md
- 押金退款、退押金、押金可退、退款申请、退款审核、
deposit-refund - 读 deposit-refund.md
- 工单、报事、报修、派单、认领、审批、转派、退回、撤销、评价、附件、
order - 先读 work-order.md
- 如果涉及共享收费前置条件,再读对应收费模块文件
- 旅游、旅行团、跟团、店铺权限、旅游订单、旅游售后、佣金补偿、地区店铺、路线、团期、团管理、团明细、陪团、出行人、负责人项目关系、团期审核、
travel - 读 travel.md
- 闪购、日报、注册量、下单量、配送、送货上门、商圈订单数据、商圈数据、商圈运营数据、
flash - 读 flash.md
禁止一边执行一边临时改路由。
常用意图必须走完整子命令,禁止猜根命令:
<子命令>只能从已注册根命令开始:collection/house/deposit-refund/employee/order/rebate/travel/flash- 禁止把叶子命令当根命令:项目列表必须
collection sms-task list-projects,生成催缴通知单必须collection payment-reminder create - 禁止把项目 ID / 客户 ID 当作第一个参数。反例:
sh ./scripts/yc-cloud.sh 6070317193900001;收费订单必须collection charge-order list --project-id - 禁止自造
blacklist.add-phone/blacklist/add-phone当根命令;加入短信黑名单只能collection sms-blacklist create - 禁止自造
weixinpay/weixinpay.precheck-sms/precheck-sms当根命令;催缴短信单批预检使用collection sms-task notice-create --preflight,多批使用collection sms-task notice-preflight-batches - 命令失败后先读对应模块文件,再按 allowlist 重试并自己执行完;禁止再猜更短的根命令,禁止
--help/ 空跑根命令探路,禁止把命令甩给用户去试
| 意图 | 先读 | 完整命令前缀 |
|---|---|---|
| 有权限的项目列表 | collection.md | collection sms-task list-projects |
| 收费科目 | collection.md | collection sms-task list-fee-items |
| 短信催缴模板 | collection.md | collection sms-task list-templates |
| 催缴任务列表 | collection.md | collection sms-task list |
| 项目欠费账单(未指定客户) | receivable.md | collection receivable arrears-list --project-id 或 --project-name;仅用于浏览/定位,报某客户或某房屋的汇总金额一律改走 checkout-desk list-arrears |
| 客户应收减免 | receivable.md | collection receivable-reduction reduce --ids |
| 指定客户收银台欠费 | collection.md | collection checkout-desk list-arrears --project-id --user-customer-id |
| 指定姓名+指定房产欠费 | collection.md | 定位客户后 checkout-desk list-arrears --user-customer-id --house-id;禁止把 userNames 全员列成业主 |
| 只给房号/房屋 ID 问「这房子欠多少」 | receivable.md | collection checkout-desk house-arrears 固定走页面客户解析与收银台查询;多客户先确认,禁止改用应收管理接口报数 |
| 某客户有几套房分别欠多少(未点名某套) | list-query.md | collection checkout-desk customer-summary --project-id --user-name;同名先确认,CLI 全量计数和汇总 |
| 催缴预览 / 全量叶子科目预览 | collection.md | collection sms-task preview --project-id(全量加 --all-fee-items --require-page false) |
| 催缴短信预检(不发送) | collection.md | 多批 collection sms-task notice-preflight-batches;单批 collection sms-task notice-create --preflight |
| 催缴通知单列表 | collection.md | collection payment-reminder list --project-id |
| 生成催缴通知单 | collection.md | collection payment-reminder create --project-id --project-name --cost-date [--house-names] [--charge-subject-names] |
| 缴费账单链接 | collection.md | 先 checkout-desk list-arrears --output,再 share-bill create-snapshot --input |
| 短信黑名单查询 | collection.md | collection sms-blacklist query --mobile |
| 加入短信黑名单 | collection.md | 先 collection sms-blacklist app-list,再 collection sms-blacklist create --mobile --application-name [--remark] |
| 违约金减免类型 | collection.md | collection late-fee operation-types |
| 违约金减免列表 | collection.md | collection late-fee list --project-id 或 --project-name |
| 生成应收入账 | receivable.md | collection receivable create-account --project-id --house-ids --subject-ids --account-time [--merge-bill <true\|false>] |
| 应收入账列表 | receivable.md | collection receivable list-accounts --project-id |
| 收费订单列表 | receivable.md | collection charge-order list --project-id |
| 某客户的缴费记录 / 订单记录 / 已交费明细 | receivable.md | collection charge-order list --user-customer-id --project-id(不要用 receive-payment-report detail:那是项目维度的收款报表,排序键与订单记录不同,客户维度会串数) |
| 今日/期间收款明细 | receivable.md | collection receive-payment-report detail |
| 今日收款 / 收了多少钱 | receivable.md | collection receive-payment-report summary |
| 按收款方式收入汇总 | receivable.md | collection receive-payment-report summary-by-pay-method |
| 收缴率 | receivable.md | collection report collection-rate --project-name(只能 1 个项目,统计周期最长 1 年) |
| 预收余额 | receivable.md | collection report prepaid-balance --project-name |
| 押金余额报表 | receivable.md | collection report deposit-balance --project-name |
| 产权信息 | house.md | house relation-list |
| 客户列表 | house.md | house customer-list |
| 押金退款办理列表 | deposit-refund.md | deposit-refund apply-list |
细节与 flag 以模块文件为准,本表只定命令路径。
收缴率查询时间前置条件(不可覆盖)
用户查询或统计收缴率时,必须先取得以下二者之一:
- 完整统计周期(开始日期和结束日期);
- 截止时间。
如果用户没有提供时间范围,必须先用业务话询问时间范围,本轮不得调用 collection report collection-rate,不得默认当前月份、猜测日期、查询无范围结果或把空结果解释成没有应收账期。收到时间范围后,才可按 references/receivable.md 的参数合同执行查询。
CLI Invocation (Hard Rule)
执行任何 yc-cloud 命令前,必须先读 runtime.md。
本 Skill 包不含明文业务 core。所有 yc-cloud 命令必须通过包内脚本执行:
sh ./scripts/yc-cloud.sh <子命令> [参数...]
启动脚本校验并执行包内 scripts/runtime/ 官方 loader;加密 core 仍由 loader 按包内 scripts/binaries.env 获取。这是正式发布链路,agent 只调用脚本,不得复刻其内部逻辑。
以下行为严格禁止:
which yc-cloudfind ~ -name "yc-cloud"- 直接调用
~/.yc-cloud/loader/下缓存二进制 - 自行下载 manifest / loader / core
- 手动写
~/.yc-cloud/config.json(必须用config set) go run ./make dev代替正式 CLI- CLI 启动失败时改用直接 API 调用或自建 launcher
示例:
sh ./scripts/yc-cloud.sh config set apiKey sk-xxx
sh ./scripts/yc-cloud.sh health
sh ./scripts/yc-cloud.sh collection sms-task list-projects --json
文档中所有 yc-cloud ... 均表示 sh ./scripts/yc-cloud.sh ...。
Global Guards
所有模块共享以下硬规则:
- 只承认当前 Go 版 CLI 已注册命令
- 只承认
apiKey为持久化配置项 BuildAPIBaseURL是构建注入,不是用户配置项- 不得脑补
projectId、customerId、houseId、workOrderId、templateId、store-ids - 模块内命令必须通过对应模块 allowlist 校验
- 轻量预检成功一次后,不得重复执行同类预检
- 基于当前上下文的整理任务,不得额外跑脚本或读取无关本地文件
- 同一条 CLI 错误原文出现第二次必须停止;多个
evertro_pm_bill时只用报错列出的--application-id再试一次 - 禁止
--help/ 空跑根命令探路;命令只从 Routing 表和模块 allowlist 取 - 命令失败后自己读模块文件按 allowlist 重试;禁止把命令甩给用户去试或向用户要命令名
- 分页截断不得当全量:任何命令输出出现
truncated: true或⚠ 结果被分页截断,都必须先按提示补齐分页,再做求和/排序/「没有更多了」这类结论 - 客户欠费汇总金额只认
checkout-desk customer-summary或checkout-desk list-arrears的完整返回:二者同用收银台源。receivable arrears-list不得用于客户欠费合计;sms-task preview仅用于项目催缴分析,需明确其统计口径,不得冒充客户收银台结算金额。报数时「本金/违约金/总计」三项都要给,覆盖全部账期。姓名查询必须先消歧;多个客户 ID 时询问用户,未经确认不得选首个。CLI 的房产数量和金额原样展示,不手工计数加总。 receivable arrears-list只有 5 类业务过滤条件真正生效:项目用--project-id或--project-name解析后传入,另有--house-id/--user-name/--charge-subject-id/--cost-status,外加成对出现的--cost-date-from+--cost-date-to。--user-customer-id/--house-name/--charge-subject-name/--due-date-*会被上游静默忽略(不报错、不减少条数、原样返回全项目数据),CLI 已改为直接报错拦截——看到这类报错要按提示换路径(按客户走checkout-desk list-arrears,按房号先house relation-list解析houseId),不得换个写法硬绕- 违约金减免必须对齐页面字段:先查询
late-fee operation-types获取REDUCTION_OPERATION_TYPE编码;减免请求的--ids使用receivableAccountDetailId,按比例传0–100的页面百分比。多个 ID 会逐条应用同一金额或比例,不能把“合计减 500”直接当作每条明细都减 500。若字典接口返回“API Key 解析服务未配置”,停止并报告后端限制,不得猜编码或循环重试。
Stop Conditions
遇到以下情况必须停止:
- 请求不属于任何已注册模块
- 对应模块文件不允许该命令
- 本地 CLI 不存在该命令
- 缺少
apiKey(必须是本轮实际校验失败;禁止根据更早对话断定未配置) - 缺少必要业务参数且当前上下文无法可靠补齐
- 预检失败
- 文档与当前源码冲突且无法以源码直接定论
- 用户参数为描述性/自然语言意图(如"全部""所有""汇总""最近"),无法直接映射成 flag 要求的具体格式值,且无法靠一次查询补齐
停止时只允许输出:
- 当前版本不支持
- 当前模块不覆盖
- 缺少必要条件
- 需要补充明确参数(用业务话问一句并给业务示例,如「要查哪个月份,比如 2026年3月」;禁止甩 flag 名或命令行)
- 需要先更新 CLI
停止/失败回复只写一到两句大白话结论,不允许套用"命中的子模块 / 命中的事实源 / 实际执行的命令 / 失败原因 / 诊断结论"这类排查报告格式——那是给开发者看的,一线用户看不懂也不需要看。禁止让用户去试命令或提供命令名称。禁止把「用例编号」「row15」这类评测标记,或「房屋客户关系」「客户 ID」「项目 ID」这类内部术语写进对用户的回复。
输出约束(全局硬规则 —— 所有模块共享)
- 只回答用户问的那件事。读 SKILL 与模块文件、校验 apiKey、轻量预取参数都是内部步骤,成功时一律不写进回复;只有失败才报错。
- 工具调用之间不输出任何可见文字:不预告下一步、不汇报已完成哪一步、不复述参数从哪条记录来。只有最终结果才可见。禁止只输出「好的,我来查」或「稍等」就结束。
- 不自证合规:不解释为什么选这条命令、为什么这些参数可发送、哪条规则要求或禁止了什么,也不声明前置条件已满足。合规由执行本身体现。
- 不按执行步骤给回复编号分节(如"## 1. 读 runtime""## 2. 路由到模块")。
- 不向用户展示 CLI 命令名、参数名、
--json、flag、脚本路径或 ID 绑定关系,除非用户明确要求看命令。觉得结果不完整时只问「要不要看完整的?」用户说要,自己再取完整结果贴表,仍然禁止提参数名。 - 不主动罗列其他可执行命令或"后续可选动作"清单;需要用户决策时只问一句话。
- 禁止让用户去试命令:不要说「请尝试」「请运行」「请提供命令名称」「您是否知道正确的命令」「有相关的模块文档可以参考」「请确认可用命令」「请提供更具体的命令或参数」「是否继续尝试其他命令」「是否需要进一步检查可用命令或查看相关文档」「请使用
--json」「是否需要我执行带有--json参数的命令」。一线人员不知道代码和指令。觉得结果不完整时只问「要不要看完整的?」。命令失败后自己读模块文件按 allowlist 重试并执行完。禁止把根命令清单贴给用户。 - 禁止
--help探路:不允许collection --help、空跑根命令、或--help来猜子命令。命令只从本文件 Routing 表和模块 allowlist 取。 - 「未知命令」≠ 未注册:猜错命令名后禁止声称「功能可能未在 CLI 中注册」。先读 Routing 表,用表里的完整命令重试。禁止自造
refund-deposit-list这类叶子名当根命令。 - 缺业务信息时用大白话问一句(例如「要查哪个月份,比如 2026年3月」),不要甩 flag 名。
- 不要额外开场白、归类说明或结果后的总结;用户明确要求补充说明时才追加。
- 命令失败时先把错误转换为普通用户可理解的中文,只说明发生了什么、用户需要补充什么或下一步怎么处理。不原样输出技术错误。
- 结果之外不追加总结、结论复述或参数备忘。
- 列表结果必须原样贴出,行序与列结构都不许改(CLI 已按业务口径排好序,行序是业务语义的一部分,不是展示偏好):
- 禁止重新排序、倒序,或按自己选定的字段(如收款时间)重排。缴费记录固定按创建时间倒序,最近缴的在最前。
- 禁止改动列:不增删列、不重命名表头、不改列顺序、不把多列合并进一列。
- 只能照搬单元格里已有的值;禁止合成结果里不存在的描述性文案(如把违约金金额拼进备注列)。
- 合计由 CLI 单独打在表后一行,不是数据行,不要把它当成一条记录。
- 非业务请求(问候 / 闲聊 / 泛化提问,非具体业务命令):一句话极简回复,不罗列能力清单、不介绍技能包、不主动引导业务方向。
- 不引用任何内部文件名、章节号、行号或规则编号(如"collection.md 第 508 行""SKILL.md 停止条件第 4 条""按模块规则……")。判断依据是内部事,不对用户可见。
- 面向一线人员说话:用小区名、业主姓名、房号、欠费。平台问答开启时禁止输出缴费链接,必须调用
ask_user_question;未开启时才给缴费链接。用户已经报了小区名和姓名时,失败回复沿用这些称呼,不要改口成一串数字 ID。禁止把评测元数据或内部术语写进回复(「用例编号」「row15」「测试约束」「处理失败」「房屋客户关系」「客户 ID」「项目 ID」)。 - 技术错误先翻译成一句大白话,不展示 HTTP 状态码、错误码或原始 JSON。常见对照:
- 401 / 鉴权失败 → "授权已失效,需要联系管理员重新开通后再试"
- 403 / 无权限 → "没有这个小区的操作权限,需要先申请开通"
- 404 / 找不到 → "没有找到这条记录,麻烦确认一下名称或编号"
- 网络超时 / 连接失败 → "网络连接失败,请稍后重试"
- 缺少 apiKey → "需要先配置登录凭证"(仅本轮实际校验失败时;不得因上一轮结论直接停止)
- 其他后端错误 → 用一句话说清楚"发生了什么"和"用户接下来能做什么",不复述接口返回的原文
- 被明确要求「汇报你实际执行了什么」(如自检/探针/健康检查)时,可以说明已真实执行只读检查并通过或失败,但只允许用自然语言描述结果(如「登录凭证有效」「授权已失效,需要联系管理员重新开通后再试」),不得出现命令名、文件名、HTTP 状态码、原始错误串或 apiKey 值。
- 禁止编造结果:命令失败如实说明,绝不假装成功。
反例(禁止这样回复):
> 收到。这是一个生成催缴通知单的收费操作请求……我先定位并读取该技能包的定义……请求命中"催缴"模块,按路由规则需读取 billing-system.md……严禁用 sms-task preview 代替纸质通知单(模块文件第 508 行明确禁止)……实际执行的命令:sh ./scripts/yc-cloud.sh collection sms-task list-projects --json……Loader 下载成功,但加密 core 下载返回 HTTP 401: API Key 无效或已禁用……
> 尝试使用 --help 获取 collection 子命令的帮助信息失败……请尝试以下命令来查看所有可用命令或进一步探索功能……是否继续尝试其他命令?
> 抱歉,我无法找到正确的命令来列出您有权限操作的项目。请提供更具体的指导或命令名称,以便我更好地协助您。
> 押金退款相关功能可能未在 CLI 中注册,或者命令格式不正确。您是否需要进一步检查押金退款的可用命令或查看相关文档?
> 客户张三(ID: 6072814381710000)与项目 6070317193900001 之间没有找到对应的房屋客户关系或账单明细。请确认客户 ID 和项目 ID 是否正确,或者是否已建立相关的房屋客户关系。用例编号 row15 处理失败。
> 命令执行失败,提示未知命令 607031793900001。请确认 yc-cloud.sh 脚本支持的命令格式或检查项目 ID 是否正确。是否需要进一步调试或查看脚本内容?
> 看起来生成催缴通知单的命令不是脚本中的有效命令。请确认可用命令列表或查看是否文档中有其他生成催缴通知单的指令方式。目前脚本支持的命令是 config / local / health / collection……请提供更具体的命令或参数以继续操作。
> 看起来 yc-cloud.sh 脚本中没有直接用于添加短信黑名单的命令。为了找到正确的命令,我需要更多信息或检查相关模块的文档。您是否知道正确的命令,或者有相关的模块文档可以参考?
> None of the available commands match the requested action.
> 收缴率报表已生成,您可以使用 --json 参数查看完整的数据内容。是否需要我执行带有 --json 参数的命令以获取详细信息?
正例(应该这样回复):
> 海霞国际新都 A3 的 2026年7月物业管理催缴通知单已生成。
> 海霞国际新都小区的授权已经失效,需要先联系管理员重新开通,恢复后我再帮你生成这张催缴通知单。
> 没查到张三在海霞国际新都的欠费,没法生成缴费链接。请确认是不是这个小区的业主,或者换一个姓名/房号再试。
用户说「查项目 6070317193900001 的收缴率」时,先确认统计周期或截止时间,再执行 collection report collection-rate --project-id 6070317193900001 --period-start <开始日期> --period-end <结束日期> 或 --cutoff-time <截止日期>;项目只能 1 个,统计周期最长 1 年,把 stdout 表原样贴出。禁止提 --json。若只有「请使用 --json」或没有业务数字,问「要不要看完整的?」用户说「把手机号 13900139020 加入收费系统短信黑名单,备注 lai-nl-20260819」时,先 collection sms-blacklist app-list --keyword 收费,恰好 1 个应用就立刻 collection sms-blacklist create --mobile 13900139020 --application-name <该应用名> --remark lai-nl-20260819,成功后只说「手机号 13900139020 已加入短信黑名单。」禁止 blacklist.add-phone,禁止问用户命令或文档。用户说「对项目 6070317193900001 客户张三做催缴短信发送预检,不要实际发送」时,缺模板先 collection sms-task list-templates,按 sms-notice.md 对张三执行 notice-preview、notice-prepare,再 collection sms-task notice-create --preflight --project-id 6070317193900001 --template-id <id> --task-name <本轮任务名称> --input <本批输入>;禁止 weixinpay / precheck-sms,禁止去掉 --preflight。用户说「帮海霞国际新都项目 6070317193900001 房屋 A3 生成 2026/07-2026/07 物业管理科目的催缴通知单」时,直接执行 collection payment-reminder create --project-id 6070317193900001 --project-name 海霞国际新都 --cost-date 2026/07-2026/07 --house-names A3 --charge-subject-names 物业管理。用户说「查项目 6070317193900001 的应收入账列表」时,直接执行 collection receivable list-accounts --project-id 6070317193900001。用户说「查项目 6070317193900001 的收费订单列表」时,直接执行 collection charge-order list --project-id 6070317193900001。用户说「查一下宋诗雯的缴费记录」这类指定客户的缴费记录/订单记录/已交费明细时,先按姓名拿到客户 ID,再执行 collection charge-order list --user-customer-id <客户ID> --project-id <项目ID>,把 stdout 那张表原样贴出(不重排、不改列);禁止改用 collection receive-payment-report detail,那是项目维度收款报表,排序键与订单记录不同,按客户查会串数。用户说「查一下押金退款办理列表」时,直接执行 deposit-refund apply-list。禁止把项目 ID 当根命令,禁止自造叶子命令当根命令,不要甩命令让用户自己试。
自检收敛(硬规则)
处理自检、健康检查、连通性验证类请求时,目标是在 4 个 Agent turn 内完成。最小步骤:
- 读一次本文件
SKILL.md与 runtime.md - 执行一次
health(若因偶发启动竞态失败,最多重试一次) - 用一条只读命令验证凭证(如
collection sms-task list-projects) - 直接用一句话回复结论
禁止为了「确认格式」再读多个业务模块文件;一条只读命令足以验证连通性;轻量预检成功一次后,不得重复执行同类预检。
参数补齐即行动(30s 收敛硬规则)
用户给的参数值是描述性/自然语言意图(如"全部""所有""汇总""最近"),或必填参数缺失时,第一轮就必须二选一并执行,严禁在"读哪个 reference 确认格式 / 要不要查 / 查哪条 / 问还是查"上反复思考:
- A 数据补齐:当前模块文件已给出可用查询命令时,直接发一次查询取真实值再执行写操作;不得为"确认命令格式"再读其他 reference 或反复纠结。
- B 停止回吐:无法靠一次查询补齐时,用业务话问一句并给业务示例(如「要查哪个月份,比如 2026年3月」),禁止甩 flag 名或命令行。
- 查数据补齐参数不属于"重复提问";用户说"不要重复提问"时仍可发查询命令。
- 决策一次定音:识别出缺失参数并选定 A 或 B 后立即执行或提问,不在 thought 里重开同一决策。"查 vs 问""全名 vs 相对名""先查欠费还是直接问"这类二选一,第一轮定一次,定完就动;重审已定项 = 空转,哪怕最终动了也算空转。
- 反模式 1(必避):在"先读某 reference 确认命令格式 / 直接执行 / 停止回吐"之间循环——这是空转。第一轮就应按 A 或 B 决断。(典型:用户答"全部未缴期间汇总"作为
--cost-date,模型在"读 receivable.md / 直接执行 / 停止"间循环 10 分钟无任何工具调用。) - 反模式 2(必避):必填参数缺失(如用户给了房号没给月份),模型在"先查 arrears-list 拿真实账期 / 直接问用户要月份 / house-names 全名能不能匹配"之间反复纠结 2 分钟,最终才发一次提问——这仍是空转。第一轮就应按 A 或 B 决断:能一次查询补齐就查,不能就按 B 直接用业务话问。
Execution Order
所有模块统一执行顺序:
- 读取 runtime.md,确认 CLI 启动方式
- 路由到模块
- 读取对应模块文件
- 校验命令是否在模块 allowlist 中
- 校验
apiKey - 进行一次模块规定的轻量预检
- 校验模块参数白名单与默认值
- 通过
sh ./scripts/yc-cloud.sh执行命令 - 仅在失败时回看对应源码和
COMMAND_SPEC
列表统计意图是唯一快速路径:
- 读取 runtime.md
- 读取 list-query.md
- 确认数据源已接入,并校验其字段 schema
- 如缺少必要业务范围,只做一次轻量预检
- 指定客户房产统计执行
checkout-desk customer-summary;项目排行生成受约束查询计划,执行一次已接入的列表命令 - 直接展示紧凑结果;禁止临时编写 Python、
jq或其他分析脚本
Non-Goals
本文件不负责:
- 逐命令参数说明
- 逐命令示例大全
- API 细节映射表
- 业务长背景说明
这些内容都应在模块文件中解决。