92 lines
6.7 KiB
Markdown
92 lines
6.7 KiB
Markdown
# 迭代 17 产品逻辑设计:策略会话
|
||
|
||
> 依据:R-019(已定稿)| 日期:2026-09-08 | 状态:**设计稿(D 问题待老师拍板后定稿)**
|
||
|
||
## 0. 一句话逻辑
|
||
|
||
> 会话 = 用户选定「讨论策略」→ 系统把该策略**当前数据**(当前持仓 + 全历史关联交易摘要)作为会话依据注入 → 之后人机围绕该数据复盘/分析;依据可随时更换/刷新;只读。
|
||
|
||
## 1. 概念与数据域
|
||
|
||
| 概念 | 定义 | 数据来源 |
|
||
|---|---|---|
|
||
| 策略 | settings 中的策略定义(id/name,做T、网格超市…) | settings.strategies(现有) |
|
||
| 策略当前持仓(活动行) | 该策略账本中未清仓的 holding(shares>0 活动) | SqliteStore strategy_holdings(R-018 数据域:账本为唯一权威) |
|
||
| 行情现价/涨跌 | holding code 的实时价格 | QuoteHub 内存快照(读穿透;不可得=—) |
|
||
| 关联交易记录 | 归属该策略/持仓的委托(含已清仓历史,trade_orders 归属列 + 历史库) | SqliteStore trade_orders/trade_fills(R-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 并排)待老师定 |
|