Skip to content

Latest commit

 

History

History
216 lines (147 loc) · 9.96 KB

File metadata and controls

216 lines (147 loc) · 9.96 KB

15 分钟演示脚本

给客户/同事演示这套东西时照着念。每一步都写了要说什么预期看到什么出岔子怎么办。全程只用一台机器,不连任何外部服务(除大模型 API)。

演示前一定要做的两件事:①提前把栈拉起来并 bash deploy/up.sh --status 确认 9/9 MCP;②提前准备好 holdings/positions.csv(见 §2),别在客户面前现编数据。

时间分配

时间 内容 想让对方记住的一句话
0 1 分 本地启动 「这套东西只有一台机器,没有云」
1 2 分 导入持仓 「数据是你放进去的文件,不是上传给我们」
2 3 分 写投资论点 「它会把结论落成文档,而不是聊完就没了」
3 4 分 验证假设 「每个数字都能点开看是哪个工具、什么时候取的」
4 3 分 Kronos 预测与回测 「预测是模型给的,回测是历史算的,两件事分开说」
5 2 分 数据全程在本机 「现在拔网线,除了问不了大模型,别的都还在」

第 0 段 · 本地启动(1 分钟)

:终端里敲

cd <安装目录>
bash deploy/up.sh --status

这是一台普通的 Linux 机器。六个容器:网页、接口、对话内核、协议适配、 一个数据库、一个缓存。只有网页那个端口是对外的,其余四个连宿主端口都不开。 下面这行是刚刚真查出来的 —— 九个数据源全部连上,二十八个工具,六个投研技能。

预期

  GET /mcp/status: 9/9 connected,工具 28 个,trusted=True,blocked=[]
  GET /skills   : 6 个: skills:deep_analysis … skills:uzi
  web→daemon     : model=hunter/hunter-chat

出岔子:任何一行是 就别往下演了,先 bash deploy/up.sh(可重复执行)。 MCP 少于 9 个通常是机器忙,重启一次 daemon 即可。


第 1 段 · 导入持仓(2 分钟)

准备(演示前做):把客户的持仓放成一个 CSV,扔进工作区的 holdings/

cat > /tmp/positions.csv <<'CSV'
代码,名称,数量,成本价,买入日期
600519,贵州茅台,100,1680.00,2026-03-14
000858,五粮液,300,142.50,2026-05-06
601318,中国平安,1000,46.20,2026-01-22
CSV
docker cp /tmp/positions.csv hca-daemon:/workspace/holdings/positions.csv

持仓就是一个文件,放在这台机器的磁盘上。没有"上传到我们服务器"这一步, 因为没有我们的服务器。

:在网页里问

「看一下我的持仓文件,说说这三只的仓位结构和主要风险敞口」

预期:模型读 holdings/positions.csv,列出三只、算出权重,并去调行情工具 拿现价算浮盈浮亏。左边会出现工具调用卡片。

(指着工具卡片):

注意它不是凭记忆说的。每一次取数都是一次工具调用,卡片上是工具名、参数和返回。 这一条也落在审计日志里,事后能查谁在什么时候取了什么。

出岔子:如果模型说读不到文件,docker exec hca-daemon ls -l /workspace/holdings/ 确认文件在且可读。


第 2 段 · 写投资论点(3 分钟)

「给茅台写一份投资论点,放到 theses/ 下面。要有:核心逻辑三条、 关键假设(每条写清可验证的口径)、什么情况下证伪、现在的估值位置」

预期:模型产出一篇结构化的论点,然后调 write_file 写进 theses/600519.md

两件事值得注意。 第一,它只能往两个目录写东西reports/theses/。 持仓、因子定义、脚本目录,它一个字都改不了 —— 这不是靠提示词客气地约束, 是一条 hook 硬拦,连最宽松的权限档都压得住。 第二,论点里的「关键假设」是刻意要求的。下一段我们就来验它。

演示硬约束(可选,30 秒,很有说服力)

「把我的持仓文件里的茅台数量改成 200 股」

预期:模型拒绝,并说明持仓文件是用户资产、它只能读不能改, 建议你自己改文件。事后可以看:

docker exec hca-daemon sh -c 'tail -3 /workspace/.atomcode/guard.jsonl' | python3 -m json.tool

会看到一条 "decision": "deny" 与拒绝理由。


第 3 段 · 验证假设(4 分钟)

:挑论点里的一条假设让它去验,例如

「论点里第二条假设是『直营占比持续提升』。去查最近四个季度的真实数据验证这条假设, 拿不到的就说拿不到,不要估」

预期:模型调财务类工具取数,逐季列出,并明确给出「支持 / 不支持 / 数据不足」。

这里有三点是特意设计的: ① 拿不到就说拿不到 —— 人设与技能里写死了不许估、不许拿记忆补; ② 每个数字后面挂着来源工具与取数时间; ③ 它不会自己写爬虫去抓数据。我们把「写个 python 去抓」这条路封了: 取数只能走这九个数据源,这样来源才追得回来。

演示第二条硬约束(可选)

「直接用 python 的 akshare 库把茅台的日线拉下来」

预期:被拒,理由是"这条路取到的数不进 MCP 层:拿不到用户身份、没有来源可追溯"。

出岔子:某些财务字段的数据源(东方财富)会间歇性拒绝境外 IP。真遇到了就顺势说: 「你看,它没编,它告诉你这个源现在取不到」—— 这恰好是想演示的行为。


第 4 段 · Kronos 预测与回测(3 分钟)

「用 Kronos 对茅台做未来 5 天的预测,再把这个策略在过去一年上回测一下」

预期:出 Kronos 预测图(K 线 + 预测区间)与回测指标(收益、最大回撤、夏普)。

分开说两件事。 预测是清华那个 Kronos 模型给的,它是个概率分布,不是结论; 回测是拿真实历史数据算出来的,它只回答"这个规则过去会怎样"。 这套系统从不给买卖指令 —— 它给的是依据、口径和不确定性,决定是你做的。

出岔子(演示前一定要确认)

  • Kronos 需要单独的 keyKRONOS_API_KEY)。没配的话它会明确告诉你去哪申请, 而不是画一张假图 —— 这是个可以拿来讲的点,但最好演示前就配好。
  • /backtest(模型回测)页在一台刚装好的机器上是空的:它统计的是 Kronos 预测的 准确性,要出数得同时满足三件事 —— ① 自选股非空(股票池是"用户自选股"); ② 配了 KRONOS_API_KEY;③ 至少两天的预测重叠(每交易日 16:30 自动跑一次)。 没满足时页面会老老实实显示 --% 和一句「还没有回测数据」。 所以这一段要么提前两天备好数据,要么就别演回测看板,改演对话里的 Kronos 预测。

第 5 段 · 数据全程在本机(2 分钟)

(最有说服力的一段,建议真的做):

# 1) 这些是刚才产生的东西,全在本机磁盘上
docker exec hca-daemon ls -l /workspace/theses /workspace/reports
docker exec hca-daemon sh -c 'wc -l /workspace/.atomcode/audit.jsonl'

# 2) 除了 web,没有任何端口对外
ss -lntp | grep -E '3200|8200|13456|5432|6379'

# 3) 出网的只有大模型这一跳
grep -E '^HCA_LLM_UPSTREAM_URL=' <安装目录>/deploy/.env

三句话: ① 你刚才看到的持仓、论点、报告、审计日志,全部在这台机器的磁盘上docker volume 里,你随时能打包带走; ② 除了网页那个端口,其余服务连宿主端口都不开,内核只在容器内网上听; ③ 唯一出网的是大模型调用这一跳。这一跳也可以断 —— 把模型指向机器上自己跑的 Ollama,整套系统完全离网, 代价是模型能力弱一些,工具调用要挑支持的模型。

收尾一句

所以这套东西的定位很清楚:投研助手,不是投顾。 它帮你把"查数据、算口径、写论点、留证据"这一串琐事做掉, 每一步都留痕、每个数字都能追到源头,而数据不离开你的机房。


附:现场问答准备

客户会问 怎么答(都是实测事实,别夸大)
「它会不会瞎编数字?」 会有风险,所以我们做了三道:取数只能走 MCP(写爬虫被 hook 拦)、人设要求拿不到就说拿不到、每次工具调用都留审计。另外有一个内核层面的已知限制:工具返回超过 16 KB 会被 AtomCode 砍成头尾各 4 KB、而且剩下的 JSON 是断的,模型可能拿记忆补中间那段。v0.1.1 起我们在数据源那一侧先把返回压到阈值以内,并且明说裁了多少条,模型知道自己少看了什么就不会去补;但内核那一侧我们改不了,已提给上游(待办池 P0-11)
「多人用会串数据吗?」 当前版本一个工作区,多人共用同一份持仓账本。用户身份会传给数据类工具(自选、组合走各自账号),但研究工作区的文件是共享的。多用户隔离要多开 daemon,在后续版本
「模型换成我们自己的行不行?」 行,三种通道:我们的网关、你自己的官方 key、本机 Ollama。装的时候选,装完改一行配置再重启 daemon
「升级会不会把数据搞坏?」 升级只换代码与镜像,数据卷不动;升级前自动存回滚点,一条命令回退。回滚不回退库结构,我们的迁移都是加表加列
「多久出一版?」 当前是 v0.1.1 预发布版。功能边界、已知缺陷与待办全部公开在仓库里(docs/开发文档/待办池.md),不藏问题
「审计能对接我们的日志平台吗?」 能。配一个 webhook 地址,每条工具调用记录会异步 POST 过去(失败不影响对话)