Files
one_divine_lot/docs/04-迭代记录/17-策略会话/产品逻辑设计.md
T

6.7 KiB
Raw Blame History

迭代 17 产品逻辑设计:策略会话

依据:R-019(已定稿)| 日期:2026-09-08 | 状态:设计稿(D 问题待老师拍板后定稿)

0. 一句话逻辑

会话 = 用户选定「讨论策略」→ 系统把该策略当前数据(当前持仓 + 全历史关联交易摘要)作为会话依据注入 → 之后人机围绕该数据复盘/分析;依据可随时更换/刷新;只读。

1. 概念与数据域

概念 定义 数据来源
策略 settings 中的策略定义(id/name,做T、网格超市…) settings.strategies(现有)
策略当前持仓(活动行) 该策略账本中未清仓的 holdingshares>0 活动) SqliteStore strategy_holdingsR-018 数据域:账本为唯一权威)
行情现价/涨跌 holding code 的实时价格 QuoteHub 内存快照(读穿透;不可得=—)
关联交易记录 归属该策略/持仓的委托(含已清仓历史,trade_orders 归属列 + 历史库) SqliteStore trade_orders/trade_fillsR-009/R-018
数据依据(basis 一次注入到会话的"策略当前数据摘要快照" 服务端按需生成(本设计)

关键语义(沿用 R-018 数据域分界):持仓展示 = 账本(活动行);交易 = 归属账本(历史全量);行情 = 内存快照。摘要生成只读这些域,不写账本。

2. 会话级状态

策略会话不需要跨会话持久存储(设计建议,见 D-3);会话内 UI 状态:

  • basis: none | { strategyId, strategyName, injectedAt }
  • basisState: idle | generating | done | error
  • 注入后的摘要内容随会话消息流存在(可折叠"数据依据"条目),不单独存储。

3. 核心流程

3.1 选择策略 → 注入依据(主流程)

  1. 对话视图(聊天)中,用户在「讨论依据」控件里选一个策略;
  2. 客户端调服务端 strategies/:id/basis-summary(只读)生成摘要文本(规格见 §4);
  3. 摘要通过宿主注入通道进入当前会话上下文(技术通道调研待定,见 §6);同屏在对话流顶部呈现「数据依据」条目;
  4. toast 反馈:已载入「做T」数据依据(3 持仓 / 42 笔交易,快照 14:32:05
  5. 用户开始提问复盘/分析;模型以摘要(及会话中后续补充)为依据回答。

3.2 换策略

  • 重开选择器选另一策略 → 再次执行 3.1(新摘要作为新的依据条目追加;chip 切换为新策略)。旧依据条目保留在历史中(模型自然以最近/明确引用的为准)。

3.3 刷新依据

  • 已选状态下 chip 提供「刷新」:重新生成当前时刻摘要并注入(盘中数据变化后想拿最新)。
  • 语义:每次刷新=新快照依据条目(含新快照时间),不覆盖旧条目。

3.4 清除依据

  • 选择器提供「清除依据」:回到无依据普通会话(chip 复位为「讨论依据:未选择」);已注入的历史条目仍在消息流中,后续对话不再视为策略依据会话。

3.5 边界

场景 行为
无可选策略(未配置) 选择器显示空态「暂无策略,请到 设置→神之一手→策略分组 添加」
会话进行中该策略被删除/改名 chip 下次加载策略列表时按 id 对齐:找不到=显示「策略已删除」+ 可清除;改名后按 id 正常(显示新名);历史依据条目保留
策略当前持仓为空 / 无行情 摘要照常生成:持仓区显示"当前无持仓";现价列显示 —;交易摘要照常(历史)
账本只读 摘要生成与注入路径无任何写操作;UI 无操作按钮(区别于数据 tab 的手动操作)
未选策略的普通聊天 与现状完全一致,不受影响(策略会话是可选增强,不锁定会话)

4. 摘要规格(服务端 basis-summary 输出,markdown 文本)

结构(自上而下):

  1. 快照头【神之一手数据依据】策略:做T | 快照:2026-09-08 14:32:05 数据为只读快照,非实时
  2. 当前持仓(活动行,逐行):code 名称|份额|可用|成本价|现价(— 缺失)|市值|浮动盈亏|持仓天数;尾部合计(N 只 / 总市值 / 总盈亏)。现价/市值缺行情时给—,不阻塞。
  3. 交易摘要(该策略全历史关联委托,聚合):总笔数/买入累计/卖出累计(按归属 holding 聚合):
    • 每 holding 一段:code 名称|状态(持有中/已清仓 清仓日)|买卖笔数|累计买入(量/额)|累计卖出(量/额)|当前份额;
    • 已清仓 holding 标注清仓日期与最后动作摘要;
    • 排序:持有中在前(按成本日/名称),已清仓在后(按清仓日倒序);
    • 规模上限holding 超过 20 行时按最新清仓倒序截断并注明「更多历史见 交易记录 tab」。
  4. 尾注:只读提示「以上为策略数据快照;本会话只读,不执行任何交易/账本操作」。

字段精确取数与空值规则在技术实现方案细化。

5. 非目标(本期明确不做)

  • 宿主工作区/目录注册(R-019 R3);
  • 账本写/交易执行、任何操作按钮;
  • 按需取数工具(AI 自行调用业务接口);
  • 复盘产物落盘 / 复盘管理(含 DB)——未来 T-002 方向;
  • 通用视图(全部持仓/交易记录)作依据;
  • 关注列表作为依据源。

6. 技术通道(设计假设,待调研确认)

注入的可行通道候选:① 宿主 injected-context/上下文节点(可折叠条目、非用户消息)→ 首选;② 会话 send(文本消息形态进会话)→ 兜底(呈现为一条前置依据消息)。渲染与动作方案以调研结果为准(本期设计保留两种形态的表达,UI 交互设计按"数据依据条目"统一描述)。

7. D 问题(AI 建议项,待老师拍板)

# 问题 AI 建议
D-1 注入条目的呈现形态 对话流顶部「数据依据」条目:默认折叠为一行(图标+策略+快照时间+行数摘要),点开看全文;不伪装成用户消息
D-2 交易摘要聚合粒度 按持仓聚合(每持仓一段汇总 + 已清仓标注),不逐笔铺开(避免注入过长);如老师要"近期逐笔"可加近 N 笔小表
D-3 依据选择是否跨刷新持久化 本期会话级不持久化(刷新需重选;历史注入条目仍在消息流),与 R-016 会话级偏好一致、不加存储;复盘管理未来再考虑
D-4 选择控件挂载位置 对话视图输入框上方 accessory 行左侧(仿 DSH workspace chip 位置),仅聊天视图可见;替代方案=会话头部(与 QMT chip 并排)待老师定