智能问数 Indicator Query
本技能只在命中以下任一触发条件时才调用,其余问题不转发上游:
- 问题涉及网络运营指标、趋势、排名、同比环比、地域/网元统计等数据查询或分析;
- 用户明确要求使用本技能(如点名“智能问数”“指标查询”,或直接提出上述数据问题)。
不适用:通用问答、与上述数据领域无关的问题,以及本仓库内开发任务与技能维护类请求(如修改仓库代码、创建或调整技能文件等),一律按常规方式处理,不转发给上游智能体。
取数入口(当前空间已安装的 MCP)
把用户问题交给上游问数智能体。不指定、不配置 MCP 地址:宿主在当前空间已安装服务编码为
an-copilot-ces 的 MCP,并注册了它的 agent_proxy 工具。直接在当前空间的工具列表中定位该
MCP 并调用 agent_proxy,不要在参数、说明或提示中携带任何 MCP 地址。该 MCP 在工具列表中的
名称以宿主实际暴露为准,通常是服务编码 an-copilot-ces 对应的工具,如
mcp__an-copilot-ces__agent_proxy。
除地址外,智能体 code 与 LLM 模型 ID 可用环境变量覆盖,未配置时用默认值:
| 项 | 环境变量 | 默认值 |
| --- | --- | --- |
| 智能体 code | AN_COPILOT_CES_AGENT_CODE | JxEntryAgent |
| LLM 模型 ID | AN_COPILOT_CES_LLM_ID | 无(取不到则省略 metadata.llm_id) |
仅当运行环境没有把该 MCP 暴露为工具、必须回退到脚本时,才由宿主把当前空间已解析好的
an-copilot-ces MCP 地址注入环境变量 AN_COPILOT_CES_MCP_URL(或用 --url 显式提供)后运行
脚本;脚本不内置任何默认地址,地址缺失时直接报错,不猜测、不回退固定地址。
当前无鉴权。将来如需身份,只使用宿主注入的受信任凭据,不从聊天内容伪造。
调用步骤
- 先按上述触发条件判断是否命中:命中才发起查询;未命中按常规方式处理,不调用本技能。发起查询时把问题原样传给上游,不要自行过滤、补全或改写问题中的条件,上游会自行解析,缺条件时返回澄清追问。
- 按环境能力选择调用方式,优先直接调用 MCP 工具:
-
直接调用(首选):从当前空间已安装的 MCP 中找到服务编码为
an-copilot-ces的 MCP,调用其agent_proxy工具。参数示例:{ "query": "用户完整问题", "type": "service", "code": "JxEntryAgent", "session_id": "<当前会话 conversationId(去前缀后)>", "metadata": { "userId": "<当前登录用户唯一标识>", "llm_id": "<当前 LLM 模型 ID>" } }入参只允许上述字段:
query、type、code、session_id、metadata,且metadata内只允许userId、llm_id。不得增加或减少字段,也不要传reasoning、streaming、request_id等额外参数;type恒为service,code取上表配置。三个标识类取值只来自宿主上下文:先按下列规则补全,其中session_id允许为本会话自建,metadata.userId取不到时先重新检索,最多尝试 3 次(含首次),3 次都取不到即本次调用失败,向用户说明失败原因。不得省略字段、不得编造、猜测或向用户索要:session_id:取宿主上下文中当前会话的conversationId;若带固定前缀claweb:conversation:,只保留其后部分。宿主没有会话概念时,为本会话自建一个稳定值(如 uuid4)并在后续轮次复用同一个值,直到用户新建会话;不得每轮更换,也不得使用auto、test这类占位文本。metadata.userId:取宿主上下文中当前登录用户的唯一标识(字段名以宿主为准,如userId、user_id)。metadata.llm_id:取宿主上下文中当前 LLM 模型 ID(字段名以宿主为准,如llm_id、model_id、model);取值以auto/开头(不区分大小写)时去掉该前缀,去后为空或为auto(含宿主直接给auto)时传空字符串。 直接调用工具与脚本回退都适用同一条规则:这三个取值必须随每次调用传入,不能漏传,也不能用占位文本。session_id在宿主没有会话概念时按上一条自建并复用;query与metadata.userId取不到时先回上下文重新检索,最多尝试 3 次(含首次),3 次都取不到即本次调用失败。脚本回退路径下,缺项由脚本直接报错并给出补全方式,见下。 取这三个值的过程(上下文检索、字段来源、重试与推理)只用于组装入参,不作为回答内容:回答、过程说明与错误描述中都不出现取值来源、字段名罗列、检索或重试步骤以及任何推理过程。
-
脚本回退:当前空间未把该 MCP 暴露为工具时,用本技能目录(
SKILL.md所在目录)下的脚本发起查询;脚本自动完成 MCP initialize,并以type=service、code取上述配置调用agent_proxy:python3 {skill_dir}/scripts/query.py --query "用户完整问题" --session-id "<conversationId>" --user-id "<当前登录用户ID>" --llm-id "<当前LLM模型ID>"--session-id传当前会话的conversationId(允许带claweb:conversation:前缀,脚本自动去掉;默认也可取环境变量AN_COPILOT_CES_SESSION_ID),--user-id传当前登录用户的唯一标识(默认取AN_COPILOT_CES_USER_ID),与直接调用的取值规则一致:只取自宿主上下文,不从聊天内容猜测或提取;脚本会分别放入上游入参的session_id与metadata.userId。conversationId与userId是仅用于本次接口透传的敏感标识,不写入任何文件或日志,不出现在命令回显、过程说明、调试输出、错误描述或最终回答中,也不放入--query文本;脚本会自动隐藏结果与错误输出中出现的这两个值。--llm-id传当前 LLM 模型 ID(默认取环境变量AN_COPILOT_CES_LLM_ID,其次LLM_ID),脚本会去掉auto/前缀、结果为auto时传空字符串,再放入metadata.llm_id;脚本固定以type=service组装上述五个字段,不传其他参数。--query、--session-id、--user-id三项必填:脚本缺哪项就会直接报错并给出补全方式。其中--session-id在宿主没有会话概念时为本会话自建一个稳定值(如 uuid4)并多轮复用,直到用户新建会话;--query、--user-id取不到时回上下文重新检索,最多尝试 3 次(含首次),3 次都取不到即本次调用失败,不猜测、不编造、不向用户索要这些标识。需要确认工具可用性时可运行python3 {skill_dir}/scripts/query.py --list-tools(需已注入地址)。
-
- 解析返回结果并渲染:
result.isError=false表示成功,回答文本位于result.content[].text;isError=true或没有可用文本时按“失败与边界”处理。- 文本含
<content>…</content>时:标签内是按 Markdown 编写的回答正文(含表格、列表、数字、单位等),直接作为最终回答用 Markdown 渲染;不输出<content>/</content>标签本身,不把正文包进代码围栏,也不转义成普通文本。 - 文本含
<additional>…</additional>时,必须在最终回答中原样输出这一段,不得忽略、不得删减或改动:把<additional>、</additional>标签连同标签内的全部内容(additional 的 JSON 数组,含每项的type与value)逐字照抄为最终回答的一部分,放在正文(<content>正文)之后;前端会按原样解析这段并据此渲染(type为ECHARTS或宿主支持的等价图表类型时渲染对应图表),因此不要只转述而不输出该段,不要自行改写、重排、格式化或重新序列化其中的 JSON,不要丢弃标签结构或抽走value后再复述,不要将其包进代码围栏,也不要转义标签里的</>。 - 文本中的
<think>…</think>等推理或过程说明不进入最终回答;正文外夹带的其他过程 HTML 只提炼最终结论,并保留其中的数字、单位、表格与统计口径。上述“剔除”“提炼”规则不适用于<additional>…</additional>:只要返回文本中含有该段,就始终按原样输出。 - 无上述标签的纯文本按普通回答处理;若返回的是澄清追问,则原样转达给用户。
- 用中文如实作答:数字、单位、时间口径、排名与对比一律来自返回结果;不补充模型猜测,不把失败说成成功。
失败与边界
- 脚本退出码非 0(无法连接、HTTP 失败、JSON-RPC 错误、超时)时,说明接口暂不可用或查询失败并附错误信息;不重试造假。
- 缺少
query/session_id/userId时(脚本会直接报错并给出补全方式):session_id按自建并复用的规则补上;query、userId回宿主上下文重新检索,最多尝试 3 次(含首次),3 次都取不到则按调用失败处理;不省略字段、不编造取值,也不向用户索要。 - 缺参重试过程中的上下文检索、字段来源与推理不进入回答;只给结论性说明(如“缺少必要的会话或用户信息,本次查询未执行”),不复述取值过程,也不出现具体标识值。
- 脚本提示未配置 MCP 地址时,说明需要宿主注入当前空间 an-copilot-ces MCP 的解析地址;若环境已暴露该 MCP 工具,应改为直接调用
agent_proxy。 - 转述错误或调试信息时若其中包含会话/用户标识,只描述失败原因,不复述具体标识值。
result.isError=true或result.content中没有可用的回答文本时,视为查询无结果,向用户说明失败原因。- 返回结果中
<content>结构缺失或内容为空时,只按实际可用内容作答并说明缺口,不编造正文;<additional>…</additional>只要返回中真实存在,即使内容为空或无法解析,也必须原样复制输出,不得丢弃或改写。 - 上游返回的可能是澄清追问(如询问业务场景、数据粒度、具体指标口径),而不是数据结论。此时把追问原样转达给用户,请其补充后带补充内容重新查询;不要代为假设条件后重复查询,也不要把追问当成最终答案。
- 返回为空或不足以回答(缺条件、范围过大)时,说明缺口并请用户补充,不要编造。
- 默认不展示底层 SQL、推理过程或调试信息;用户明确要求时可引用返回中的相关内容。
微信扫一扫