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

92 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 迭代 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 并排)待老师定 |