Skip to content

00. 课程设计:我们到底要做一个什么样的 PA 复盘教练

先说边界。

这套教程里的 PA,是 Price Action 训练语境里的 PA。我们不做实盘喊单,不预测未来涨跌,也不告诉用户现在该买还是该卖。我们做的是训练复盘:拿一笔已经发生的训练交易,分析计划、入场、止损、止盈、K 线上下文和执行动作是否一致。

这个边界非常重要。因为只要你把它做成“交易建议机器人”,后面所有工程设计都会变形:提示词会鼓励它猜方向,知识库会被拿去拼观点,搜索会被拿去查最新行情,用户也会不断诱导它回答“现在能不能买”。这不是训练教练,这是风险入口。

所以课程第一条规则是:复盘只处理过去发生的训练样本。

伴生工程先长什么样

伴生工程是一个 Spring Boot 小项目,先不强依赖真实 LLM Key。原因很现实:教程要保证读者能跑起来。真正接 Spring AI Alibaba 的位置,会在 Agent、Tool、Graph、Routing 这些章节讲清楚;本地工程用确定性代码把同一套业务边界跑出来。

项目结构如下:

text
pa-review-coach-tutorial/
  pom.xml
  src/main/resources/application.yml
  src/main/java/com/example/pareview/
    PaReviewCoachApplication.java
    api/
      ReviewCoachController.java
      ReviewRequestBody.java
      ReviewReportResponse.java
    coach/
      ReviewCoachService.java
      ReviewRequest.java
      ReviewReport.java
      ReviewStatus.java
      TradeRecord.java
      RiskMetrics.java
      RiskCalculator.java
      GuardrailService.java
      TrainingMemory.java
      KnowledgeBase.java
      TradeRepository.java
      KlineWindowRepository.java
      KlineBar.java
      ReviewCoachFixture.java
    data/
      InMemoryTradeRepository.java
      InMemoryKlineWindowRepository.java
  src/test/java/com/example/pareview/
    api/ReviewCoachControllerTest.java
    coach/ReviewCoachServiceTest.java

先把它跑起来:

powershell
cd D:\idea_space\pa-review-coach-tutorial
mvn.cmd test
mvn.cmd spring-boot:run -Dspring-boot.run.jvmArguments=-Dfile.encoding=UTF-8

启动后调用:

powershell
Invoke-RestMethod `
  -Uri "http://127.0.0.1:18091/api/pa-review/reviews" `
  -Method Post `
  -ContentType "application/json; charset=utf-8" `
  -Body '{"tradeId":"T-1001","includeKline":true,"question":"复盘这笔训练交易"}'

你应该看到 status=REVIEWED,并且有 riskReward=2.0realizedR=-0.8primaryProblemnextTrainingTask 这些字段。

为什么不是一上来就接大模型

因为工程教程最怕两件事。

第一,读者还没理解业务边界,就先被模型 Key、网络、依赖版本、提示词细节卡住。卡住之后,他分不清是自己代码错了,还是模型输出飘了。

第二,教程用 LLM 输出当唯一效果,读者看不出来哪些部分是业务代码保证的,哪些部分只是模型这次刚好说对了。

所以我们先把复盘系统拆成稳定部件:

  • Controller 负责接收请求。
  • Service 负责编排复盘。
  • Repository 负责拿交易和 K 线。
  • RiskCalculator 负责算风险收益。
  • GuardrailService 负责拦截越界问题。
  • TrainingMemory 负责训练者历史摘要。
  • KnowledgeBase 负责提供 PA 训练知识。

等这些边界清楚之后,再把其中某些节点换成 Spring AI Alibaba 的 ChatClient、ToolCallback、Advisor、Graph 节点或 Routing 节点,读者就知道自己到底在替换什么。

课程主线

我们会从一个产品经理提的小需求开始:

“能不能做个复盘教练?用户做完训练交易,把 tradeId 发过来,系统给他一个复盘报告。”

第一版很好做,甚至不用消息队列、不用数据库、不用 LLM 都能模拟。但产品很快会继续追问:

只给 tradeId 够吗?如果没有止损和止盈,能不能评价交易质量?如果用户发来的是“我这笔亏了,下一笔能不能买回来”,系统该不该答?如果用户想看长期问题,单笔报告够不够?如果教练要同时看 PA、风险、心理、数据,Service 里是不是会越写越乱?

这些追问,就是整套课的推动力。

学完后的判断标准

学完这套课,你应该能判断三件事:

  1. 一个 AI 复盘产品的边界在哪里,哪些问题不能答。
  2. 一个训练复盘工程应该有哪些稳定模块,哪些地方适合接入大模型。
  3. 当业务增长时,应该引入 Tool、Memory、RAG、Guardrail、Graph、Interrupt、Multi-Agent、Routing 中的哪一个,而不是看到概念就乱用。

Built with VitePress. Deployed on Cloudflare Pages.