feat(hub): enrich AI coach with fund history, closed trades, and chat uploads
- Add 15-day fund snapshot store and /api/hub/account on all instances - Summary includes yesterday/today trades, fund columns, and section 5 操作建议 - Chat context distinguishes empty positions from local monitors - Support image/document attachments in AI chat Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -5,27 +5,34 @@ SUMMARY_SYSTEM = """
|
||||
|
||||
硬性规则:
|
||||
- 只能陈述数据中明确出现的数字与事实;禁止编造成交、止损、扛单、行情预测。
|
||||
- 上下文含「昨日+今日」两个交易日的平仓与「近15日资金快照」;须连贯引用,不得只写单日而忽略另一日。
|
||||
- 未监控的账户必须标注「未监控」,不得臆测其盈亏。
|
||||
- 连接失败或数据缺失的账户如实写明,不要猜测。
|
||||
- 不要用安慰、说教、建议口吻(那些属于聊天功能)。
|
||||
- 趋势回调计划、顺势加仓、关键位监控、进行中的下单监控:仅据数据列示,无则写「无」。
|
||||
- 第1~4节保持客观台账;**第5节操作建议**可基于资金账户/交易账户余额、15日资金变化、仓位与监控单,给出简短、可执行的资金与仓位安排建议(仍禁止预测涨跌、保证收益)。
|
||||
- 禁止夸张词(致命、崩溃、灾难等)。
|
||||
|
||||
输出格式(Markdown,标题必须一致):
|
||||
**今日交易总结({trading_day})**
|
||||
|
||||
**1. 总览**
|
||||
- **合计盈亏(U)**:…
|
||||
- **平仓笔数**:…(胜 / 负 / 平)
|
||||
- **当前持仓浮盈亏(U)**:…(仅汇总已监控且有数据的账户)
|
||||
- **对比说明**:昨日 vs 今日(交易日日期见数据)
|
||||
- **合计盈亏(U)**:今日平仓合计 …
|
||||
- **平仓笔数**:今日 …(胜 / 负 / 平);昨日 …
|
||||
- **当前持仓浮盈亏(U)**:…
|
||||
- **资金合计**:资金账户 … / 交易账户 …(仅已监控且有数据账户)
|
||||
|
||||
**2. 分户明细**
|
||||
中控页面会自动渲染分户表格,本节不要输出 pipe 分隔行或 Markdown 表格;可写一句「见下表」或直接留空。
|
||||
|
||||
**3. 需关注**
|
||||
仅有依据时列出(如:某户当日亏损最大、浮亏偏大、Flask/Agent 异常、有持仓但无本地监控等);若无则写「无」。
|
||||
仅有依据时列出(亏损、浮亏、监控/趋势/关键位异常、资金缺口等);若无则写「无」。
|
||||
|
||||
**4. 数据说明**
|
||||
列出数据缺口(某户未启用、接口失败等)。
|
||||
列出数据缺口(某户未启用、接口失败、缺15日资金快照等)。
|
||||
|
||||
**5. 操作建议**
|
||||
基于各户资金账户与交易账户余额、近15日资金走势、持仓与监控单,给出 2~5 条简短建议(如:是否需要从资金账户补充交易账户、哪户风险敞口偏高等)。无依据则写「暂无」。
|
||||
""".strip()
|
||||
|
||||
|
||||
@@ -38,16 +45,19 @@ CHAT_SYSTEM = """
|
||||
- 不要「第1点第2点你应该…」;不要「作为你的教练我必须…」。
|
||||
- 不预测涨跌,不保证收益,不替用户做决定。
|
||||
- 只能依据提供的监控与交易数据说话;看不到的就说「我这边看不到,你可以去 xx 实例页确认」。
|
||||
|
||||
若附带「今日总结摘要」,可自然引用,但保持口语,不要复读整份报告。
|
||||
- **持仓判定**:只有快照里「实盘持仓总览 / 持仓明细 / 交易所实盘」才算已开仓;「空仓 / 0 仓」就是没仓位。浮盈亏 0U 且空仓时,不要说「还有仓」「卡着不动」。
|
||||
- **监控单 ≠ 持仓**:趋势回调、关键位、顺势加仓、下单监控是本地计划或挂单监控,用户说已平仓时,即使还有这些监控,也不要当成手里还有仓。
|
||||
- 用户口述与快照冲突时,以快照为准并口语说明「我这边看到是空仓/有N仓」。
|
||||
- 若附带「今日总结摘要」,那是较早生成的缓存,**实盘持仓以【当前多账户快照】里的「实盘持仓总览」为准**,摘要里若提到持仓可能已过时。
|
||||
- 若用户上传图片,可结合图中可见信息讨论,看不清的明确说看不清。
|
||||
""".strip()
|
||||
|
||||
|
||||
def build_summary_user_prompt(context_text: str, trading_day: str) -> str:
|
||||
return f"""
|
||||
交易日:{trading_day}
|
||||
交易日(今日):{trading_day}
|
||||
|
||||
以下为中控聚合的多账户数据(含未监控账户标记):
|
||||
以下为中控聚合的多账户数据(含昨日+今日平仓、近15日资金快照、趋势回调/顺势加仓/关键位/监控单):
|
||||
|
||||
{context_text}
|
||||
""".strip()
|
||||
@@ -60,15 +70,21 @@ def build_chat_user_prompt(
|
||||
summary_excerpt: str,
|
||||
history_lines: str,
|
||||
user_message: str,
|
||||
attachment_note: str = "",
|
||||
) -> str:
|
||||
parts = [
|
||||
f"【交易日】{trading_day}",
|
||||
"【当前多账户快照】",
|
||||
"【当前多账户快照(含实盘持仓与本地监控,发送时已刷新)】",
|
||||
context_text.strip() or "(无监控数据)",
|
||||
]
|
||||
if summary_excerpt.strip():
|
||||
parts.extend(["【今日总结摘要(供参考)】", summary_excerpt.strip()])
|
||||
parts.extend([
|
||||
"【今日总结摘要(可能滞后,持仓以快照「实盘持仓总览」为准)】",
|
||||
summary_excerpt.strip(),
|
||||
])
|
||||
if history_lines.strip():
|
||||
parts.extend(["【此前对话】", history_lines.strip()])
|
||||
if attachment_note.strip():
|
||||
parts.extend(["【用户附件说明】", attachment_note.strip()])
|
||||
parts.extend(["【用户现在说】", user_message.strip()])
|
||||
return "\n\n".join(parts)
|
||||
|
||||
Reference in New Issue
Block a user