已关闭
[Feature-Request|需求反馈]: Add session_control to AgentHint #484
zengwei创建于  8月14日关闭于  8月18日
zengwei
zengwei
8月14日 创建

在您提交issue前,请确认以下信息:

背景信息

agent_hint 特性(https://gitcode.com/Ascend/MindIE-Motor/pull/692)已经在请求体中暴露了底层的 context_management 字段,客户端可以通过显式声明 manage_request + edits[] 来驱动 KV 缓存的 offload / prefetch / evict:

"agent_hint": {
  "session_id": "s-001",
  "context_management": {
    "manage_request": true,
    "edits": [
      { "type": "evict", "target": "session" }
    ]
  }
}

但与Agent框架对接时,客户端表达的并不是“evict session”,而是“session 进入了 stop 状态”或“compact 一次”这类会话生命周期事件。客户端 SDK 不得不维护一份从“session lifecycle verb”到 context_management.edits[] 的手工映射:

Agent 生命周期事件 当前需要客户端手写的 context_management.edits
start (无对应,纯通知)
pause [{"type":"offload", "target":"session"}]
stop [{"type":"evict", "target":"session"}]
compact [{"type":"evict", "target":"session"}]
resume [{"type":"prefetch","target":"session"}]

这种“客户端侧翻译”存在三类问题:

  1. 集成摩擦大:每接入一个新的 Agent SDK 都得重复写一遍翻译表,且必须和服务端约定保持一致(一旦服务端新增 compactevict 之外的语义,客户端必须跟着升级)。
  2. 易用性差:客户端要在每次状态切换时手工构造 manage_request=true 与 edits 数组;空 messages 还要靠客户端自行绕过 OpenAI 校验。
  3. 语义不直观:运维/排障时,请求体里的 edits[] 反映不出“用户视角的会话生命周期”,只能反推。

需求来源

为对接更多Agent对session的简易管理的,要求:

  • 提供会话级高层动词start / pause / stop / compact / resume),让 Agent SDK 直接表达“session 进入什么状态”;
  • 服务端把这些动词统一翻译为既有的 context_management.manage_request 请求,保证 KV Conductor / 调度器不需要感知新增语义;
  • 不破坏既有 context_management 调用方;二者并存时显式 context_management 优先生效(互斥但向后兼容);
  • 复用已有的“messages=[] 放行”校验路径(manage_request 时允许空 messages)。

价值/作用

对session管理请求,相比直接发送context_management,session_control字段具有以下优点

  • 集成摩擦降低:Agent SDK 不再维护“session lifecycle verb → edits[]”翻译表,直接发 session_control.type 即可;
  • 错误面更小:服务端统一校验/翻译,客户端只需表达意图,不必担心 manage_request=true 漏写、target 错填等细节;
  • 完全向后兼容:既有使用 context_management 的客户端无任何影响;二者并存时按既定规则收敛。

session_control 让 Agent 框架能更自然地驱动这套增益——把“session stop”这种语义事件直接翻译为 evict,把“session resume”翻译为 prefetch,而不必关心 manage_request / edits / target 这些底层细节,从而把 AgentHint 的性能收益从“愿意写 SDK 的少数框架”扩展到“所有按生命周期管理 session 的 Agent 框架”。

设计方案

总体方案与原有AgentHint关系:

┌──────────────────────────────────────────────────────────────────────┐
│                          Client / Agent SDK                          │
│                                                                      │
│   agent_hint.session_control = { type: <verb> }                      │
│                                                                      │
│     start   ─── 不触发任何 manage_request(仅声明)                   │
│     pause   ───┐                                                     │
│     stop    ───┤                                                     │
│     compact ───┼─▶ 翻译为                                           │
│     resume  ───┘    agent_hint.context_management = {                │
│                       "manage_request": true,                         │
│                       "edits": [                                     │
│                         { "type": <offload|evict|prefetch>,           │
│                           "target": "session" }                      │
│                       ]                                               │
│                     }                                                 │
└────────────────────────────────┬─────────────────────────────────────┘
                                 │ HTTP/JSON
                                 ▼
┌──────────────────────────────────────────────────────────────────────┐
│  inference_server.py  (FastAPI)                                      │
│   └─ _validate_openai_request                                        │
│        └─ messages=[] 放行条件:                                       │
│            _is_manage_request(body_json) ∧ _has_session_target_edit   │
│            OR                                                       │
│            session_control_implies_manage_request(                   │
│              body_json.get("agent_hint"))                            │
└────────────────────────────────┬─────────────────────────────────────┘
                                 │
                                 ▼
┌──────────────────────────────────────────────────────────────────────┐
│  router/dispatch.py  :: __create_request_info                         │
│   ├─ apply_session_control_autofill(request_json)        # 翻译   │
│   ├─ ensure_minimum_messages_for_session_edits(           # 注入   │
│   │      request_json, req_data)                          # 占位   │
│   ├─ parse_agent_hint(request_json, headers)              # 解析   │
│   └─ 返回 RequestInfo(..., agent_hint_info=...)                      │
└────────────────────────────────┬─────────────────────────────────────┘
                                 │
                                 ▼
┌──────────────────────────────────────────────────────────────────────┐
│  既有 AgentHint / KV Conductor 链路(详见https://gitcode.com/Ascend/MindIE-Motor/pull/692)        │
└──────────────────────────────────────────────────────────────────────┘


感谢您的贡献 🎉!

likedislike
zengweizengwei
8月14日 修改标题为 “[Feature-Request|需求反馈]: Add session_control to AgentHint”,原标题为“[Feature-Request|需求反馈]: ”
zengweizengwei
8月14日 修改了issue 的描述
wangyang
wangyang成员
8月15日 评论:

👋 您好,感谢向 mindie-motor 提交 Issue!
🎉 我们已收到您的反馈,感谢你对开源社区的支持!

📅 处理时效 维护团队将在工作日 24 小时内查看并回复您的问题。
🔍 自助排查(推荐优先查看) 在等待回复期间,您可以先查阅仓库README以及历史 Issue 中相似问题的解决方案,多数问题可快速解决。
💡 为了更快定位问题,请您确保 Issue 包含:

清晰的问题描述
可复现的操作步骤
相关日志、截图或环境信息
我们会尽快跟进,感谢您的理解与配合!

likedislike
wangyangwangyang成员
8月18日 关闭了 issue
ascend-robotascend-robot成员
8月18日 添加了label:resolved