给客户/同事演示这套东西时照着念。每一步都写了要说什么、预期看到什么、 出岔子怎么办。全程只用一台机器,不连任何外部服务(除大模型 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 分 | 数据全程在本机 | 「现在拔网线,除了问不了大模型,别的都还在」 |
做:终端里敲
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 即可。
准备(演示前做):把客户的持仓放成一个 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/
确认文件在且可读。
做:
「给茅台写一份投资论点,放到 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" 与拒绝理由。
做:挑论点里的一条假设让它去验,例如
「论点里第二条假设是『直营占比持续提升』。去查最近四个季度的真实数据验证这条假设, 拿不到的就说拿不到,不要估」
预期:模型调财务类工具取数,逐季列出,并明确给出「支持 / 不支持 / 数据不足」。
说:
这里有三点是特意设计的: ① 拿不到就说拿不到 —— 人设与技能里写死了不许估、不许拿记忆补; ② 每个数字后面挂着来源工具与取数时间; ③ 它不会自己写爬虫去抓数据。我们把「写个 python 去抓」这条路封了: 取数只能走这九个数据源,这样来源才追得回来。
演示第二条硬约束(可选):
「直接用 python 的 akshare 库把茅台的日线拉下来」
预期:被拒,理由是"这条路取到的数不进 MCP 层:拿不到用户身份、没有来源可追溯"。
出岔子:某些财务字段的数据源(东方财富)会间歇性拒绝境外 IP。真遇到了就顺势说: 「你看,它没编,它告诉你这个源现在取不到」—— 这恰好是想演示的行为。
做:
「用 Kronos 对茅台做未来 5 天的预测,再把这个策略在过去一年上回测一下」
预期:出 Kronos 预测图(K 线 + 预测区间)与回测指标(收益、最大回撤、夏普)。
说:
分开说两件事。 预测是清华那个 Kronos 模型给的,它是个概率分布,不是结论; 回测是拿真实历史数据算出来的,它只回答"这个规则过去会怎样"。 这套系统从不给买卖指令 —— 它给的是依据、口径和不确定性,决定是你做的。
出岔子(演示前一定要确认):
- Kronos 需要单独的 key(
KRONOS_API_KEY)。没配的话它会明确告诉你去哪申请, 而不是画一张假图 —— 这是个可以拿来讲的点,但最好演示前就配好。 /backtest(模型回测)页在一台刚装好的机器上是空的:它统计的是 Kronos 预测的 准确性,要出数得同时满足三件事 —— ① 自选股非空(股票池是"用户自选股"); ② 配了KRONOS_API_KEY;③ 至少两天的预测重叠(每交易日 16:30 自动跑一次)。 没满足时页面会老老实实显示--%和一句「还没有回测数据」。 所以这一段要么提前两天备好数据,要么就别演回测看板,改演对话里的 Kronos 预测。
做(最有说服力的一段,建议真的做):
# 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 过去(失败不影响对话) |