5.6 KiB
5.6 KiB
决策优化讨论记录
核心目标
- 在
app/agents现有规则型与部门 LLM 协同框架上,定义“收益最大化 + 风险约束”的统一指标,用于评估提示词、温度、多智能体博弈和调用策略的优劣。 - 借助
app/backtest/engine.py的日频回测环境,构建可重复的仿真闭环,为强化学习或策略搜索提供离线训练与验证数据。 - 通过优化高层策略(Prompt 模板、对话轮次、function 调用模式),而不是直接干预底层行情预测,使 RL 学习关注“决策流程调度”。
关键挑战
- 状态空间:每轮博弈涉及市场因子、代理信号、历史行为与日志状态(
app/data/logs);需压缩为 RL 训练可用的紧凑向量或摘要。 - 奖励设计:直接使用策略收益会导致梯度稀疏,可考虑收益、回撤、成交约束、信心一致性等多目标加权。
- 数据效率:真实交易可探索次数有限,必须依赖离线仿真 + 反事实评估,或引入模型驱动的世界模型缓解分布偏移。
- 多智能体非定常性:规则代理 + LLM 的组合策略随参数调整而漂移,需要稳定 Nash 聚合或引入对手建模。
建议路径
- 数据记录:扩展
app/agent_utils写入 Prompt 版本、温度、function 调用次数、部门信号等元数据,形成 RL 可用轨迹;同时让日志文件(如app/data/logs/agent_20250929_0754.log)对齐这些字段。 - 环境封装:在
app/backtest/engine.py外层定义DecisionEnv,让“动作”映射到策略配置(Prompt 选择、温度、投票权重),step()调用现有引擎完成一日博弈并返回奖励。 - 层级策略:先做 Bandit 或 CMA-ES 等黑箱优化调参(温度、权重)建立基线,再过渡到 PPO/SAC 等连续动作 RL;提示词可以编码成可学习 embedding 或有限候选集合。
- 博弈协同:针对部门间权重、否决策略,引入 centralized training, decentralized execution (CTDE) 思路,共享一个 critic 评估全局奖励,actor 负责单部门参数。
- 安全约束:用 penalty 方法或 Lagrangian 处理仓位/风控约束,确保训练过程中遵守
A_risk设定的停牌、涨跌停逻辑。
强化学习框架
- 状态构建:拼接市场特征(因子矩阵降维)、历史动作、日志中 LLM 置信度;必要时用 LSTM/Transformer 编码。
- 动作定义:连续动作控制
temperature/top_p/投票权重,离散动作选择 Prompt 模板/协作模式(majority vs leader);组合动作可分解成参数化策略。 - 奖励函数:
收益净值提升 - λ1*回撤 - λ2*成交成本 - λ3*冲突次数,可把 LLM 置信度一致性或 function 调用成本作为正负项。 - 训练流程:循环“采样配置 → 回放到 BacktestEngine → 记入 Replay Buffer → 更新策略”,必要时采用离线 RL(CQL、IQL)以利用历史轨迹。
- 评估:对比默认提示/温度设定的收益分布,统计策略稳定性、反事实收益差,并在
app/ui/streamlit_app.py加入实验版本切换和可视化。
下一步
- 先补齐日志与数据库字段,确保能完整记录提示参数与决策结果。
- 搭建轻量 Bandit 调参实验,验证不同提示与温度组合对回测收益的影响。
- 设计 RL 环境接口,与现有 BacktestEngine 集成,规划训练与评估脚本。
已完成的日志改进
agent_utils表新增_telemetry与_department_telemetryJSON 字段(存于utils列内部),记录每个部门的 provider、模型、温度、回合数、工具调用列表与 token 统计,可在 Streamlit “部门意见”详情页展开查看。app/data/logs/agent_*.log会追加telemetry行,保存每轮函数调用的摘要,方便离线分析提示版本与 LLM 配置对决策的影响。- Streamlit 侧边栏监听
llm.metrics的实时事件,并使用原位组件刷新“系统监控”,避免增量追加或节流导致的失效,同时确保实时数据推送稳定。 - 新增投资管理数据层:SQLite 中创建
investment_pool、portfolio_positions、portfolio_trades、portfolio_snapshots四张表;app/utils/portfolio.py提供访问接口,今日计划页可实时展示候选池、持仓与成交。 - 回测引擎
record_agent_state()现同步写入investment_pool,将每日全局决策的置信度、部门标签与目标权重落库,作为后续提示参数调优与候选池管理的基础数据。 app/backtest/decision_env.py引入DecisionEnv,用单步 RL/Gym 风格接口封装回测:动作 → 权重映射 → 回测 → 奖励(收益 - 0.5×回撤),同时输出 NAV、交易与行动权重,方便与 Bandit/PPO 等算法对接。- Streamlit “回测与复盘” 页新增离线调参模块,可即点即用 DecisionEnv 对代理权重进行实验,并可视化收益、回撤、成交与权重结果,支持一键写入
config.json成为新的默认权重。 - 所有离线调参实验(单次/批量)都会存入 SQLite
tuning_results,包含实验 ID、动作、奖励、指标与权重,便于后续分析与对比。
下一阶段路线图
- 在
DecisionEnv中扩展动作映射(Prompt 版本、部门温度、function 调用策略等),把当前权重型动作升级为多参数协同调整。 - 接入 Bandit/贝叶斯优化,对动作空间进行探索,并把
portfolio_snapshots、portfolio_trades输出纳入奖励约束(收益、回撤、换手率)。 - 构建持仓/成交写入流程的实时入口,使线上监控与离线调参共用同一数据源,支撑增量训练与策略回放。