很多人以为盯盘就是盯价格,其实盯盘最累的是脑子。我把自己搭的AI投资工作台跑起来之后,最深的一个体会是:终于不用一边开会一边偷偷切行情软件了,也不用在几十个自选股里反复横跳。这个工作台不是一个自动交易系统,我的定位很明确——把“盯盘、筛消息、读公告、写复盘”这些重复劳动全部丢给AI,我只在关键节点做判断,规则由我定义,结果由AI执行。这种模式适合那种交易日不能全职盯盘、又不想被行情软件绑架的人,尤其适合按着自己的节奏做中低频决策的普通投资者。下面把这套工作台的思路、功能和落地步骤完整拆开讲。
1. 先说痛点:我为什么放着现成软件不用,非要自己搭工作台
1.1 盯盘最折磨人的不是行情,而是信息过载
以前我用行情软件的自选列表,涨跌幅一排,红红绿绿看着很直观。但真到了持仓超过十只、又有几个重点观察标的的时候,问题就出来了:每只股票都有公告、新闻、研报、社区讨论,散落在不同平台,你要自己一个个打开看。开盘时间里,行情一分钟变一次,消息一会儿冒一条,眼睛和脑子都在高负荷运转。
这种状态下最容易犯的错,就是“看到某个消息,脑子里立刻弹出一个结论,手比脑子快”。比如某只票突然直线拉升,第一时间不是去查原因,而是先追进去。等晚上复盘才发现,拉升是因为盘中临时传闻,根本没有基本面支撑。类似的操作重复几次后,我意识到:我需要的是把信息先过滤、整理、标注出来,而不是让所有原始信息直接涌到我面前。
1.2 现成软件解决不了的情绪问题和复盘问题
市面上很多行情软件也有预警功能,比如价格提醒、涨跌幅提醒。但我试下来有几个痛点解决不了:
- 预警条件太死板,只能设价格和涨跌幅,不支持跨多个指标组合判断。
- 提醒到了也只是“价格到了”,不会告诉我“为什么到了”“这个位置在历史上意味着什么”。
- 复盘极其依赖手工操作,收盘后我要自己翻一天的分时、消息、成交变化,第二天开盘前还得重新整理一遍。
尤其是复盘。绝大多数人盯盘亏钱,不是因为不知道技术指标,而是因为不知道今天的操作依据是什么、市场当时给了什么信号、自己为什么忽略了这个信号。这种“操作日志”式的复盘,没有现成软件帮我做,也不会有软件帮我做——因为它需要把行情数据和文字信息合并理解,这是大模型的强项。
1.3 我对AI工作台的定义:把“盯”变成“等”
我给自己这个工作台定的目标不是“全自动赚钱”,而是八个字:被动监控,主动提示。AI在后台持续做三件事:扫描异动、读取公告、汇总资讯,然后在值得注意的时候主动找我,而不是我在行情软件里反复刷屏找机会。这意味着我的角色从“信息搬运工”变成“决策者”——信息的采集、分类、初筛全部交给程序,我只负责看AI给出的结论和依据,然后决定信还是不信。
2. 工作台整体框架:数据、模型、推送三件事
2.1 数据层:行情、公告、财务数据怎么接
整个工作台最底下是数据层。我用的是公开的行情数据接口和财经数据接口,包括A股实时行情、历史K线、上市公司公告、财务指标这类公开数据源。选数据源的第一标准不是功能多,而是稳定、免费、够用。我实际用的方案很朴素:实时行情走一个免费的HTTP接口,公告和财务数据走另一个公开数据仓库,所有数据统一落地到本地SQLite数据库。
为什么强调落库?因为大模型不是实时去互联网找数据的,它只能处理你喂给它的东西。我让程序定时把行情拉下来存进数据库,然后AI从数据库里读数据做分析,这样每次分析的数据口径一致,不会出现“AI说涨了1.5%,实际涨了1.2%”这种对不上账的情况。数据表我建了三张:一张存实时行情快照,一张存当日公告列表,一张存财务指标历史。量不大,SQLite完全够用。
2.2 AI层:Agent拆法和模型选型
AI层面我一开始想得很复杂,又是LangChain又是Agent编排,后来实际跑下来发现,自己用根本不需要那么重的框架。我把它拆成几个独立的“小助手”,每个负责一类任务:
- 异动监控助手:定时读行情快照,判断是否有价格、成交量的异常波动。
- 公告解读助手:拉取当天公告,调用大模型生成利好利空判断和解释。
- 财报速读助手:拉取财务指标,让大模型做同比、环比、毛利率变化的分析。
- 复盘报告助手:收盘后把当天所有数据汇总,生成一份带明日关注点的复盘日报。
这些助手不共享状态,各自独立运行,本质上就是几个带不同Prompt的API调用脚本。模型选型上我没有追求最强的模型,而是按任务分档:实时异动播报用响应快的模型,公告解读和复盘报告用便宜但理解力足够的模型。这套组合下来,一天跑几十次调用,成本控制在个位数以内。
2.3 推送层:通知不打扰,结论要带理由
AI分析完结果,必须推到我手机或电脑上才有意义。我用的是企业微信群机器人Webhook和邮件两种通道。为什么不用短信?因为提醒频率其实不高,一天十几条,短信反而不方便回溯。企业微信机器人的好处是可以直接把消息推到手机上,支持Markdown,能把AI生成的表格和结论完整显示出来。
推送规则有一条是我特别坚持的:每条推送必须带理由。只推“XX股票涨了5%”没有意义,我要的是“XX股票涨了5%,放量明显,盘中有一条关于订单落地的传闻,需关注消息真实性”。这句话里既有数值条件,又有上下文解释,我扫一眼就能决定要不要深究。
3. 重点功能拆解:真正解决盯盘痛点的五个功能
3.1 智能异动监控:几十只票不用挨个切屏
这是整个工作台里最实用的功能。我不再需要盯着自选股列表,而是让程序每30秒扫描一次所有持仓和自选股的行情快照,一旦满足我预设的条件就触发提醒。条件可以组合:
- 涨跌幅绝对值超过3%,且成交量比超过1.5倍。
- 盘中快速拉升或跳水,比如5分钟内累计涨幅超过2%。
- 股价突破近20日新高或新低。
- 量比突然放大到2倍以上,同时价格波动幅度增大。
这个功能的代码思路很直白:定时拉行情感列表,计算指标,再把触发条件的结果丢给模型生成一段播报。真正让体验提升的是推送模板,我参考了专业行情终端的分时异动播报风格,让AI生成的内容包括:股票名称、触发原因、盘中相关消息、以及一个风险提示。实际用下来,它帮我抓到了好几次因为某条突发公告导致的快速异动,而过去我只能靠群里消息灵通的人提醒。
3.2 公告解读:把几十条公告压成一张表
A股每天有大量公告,很多是例行公告,比如“关于使用闲置自有资金购买理财产品的公告”,这种看一眼标题就知道没什么信息量。但偶尔会有一条“关于签订重大合同的公告”,影响可能非常大。以前我是一天刷好几遍公告列表,现在让程序每天定时抓取当天发布的公告,去掉重复项,把标题和正文前几千字喂给大模型,让它输出一张结构化表格。
Prompt的核心是让模型做“信息分类”而非“投资建议”。我会限定输出格式:股票简称、公告标题、公告类型(合同/业绩/减持/回购/质押/其他)、利好利空倾向、影响说明、原文关键句。这种约束让AI不会长篇大论,只输出有用的字段。每次看到公告列表后,我只需要扫一眼表格里的“利好利空”列,再去细读那些真正有信息量的原文。这样做最大的好处是,不容易漏掉重要信息,尤其是那种藏在例行公告里的结构化数据变化。
3.3 财报速读:三张表翻译成人话
读财报这件事,对非财务背景的人很不友好。营收涨了15%,但净利润为什么降了?毛利率变化意味着什么?经营现金流为负要不要紧张?以前我需要打开三张报表自己算,现在直接让AI做初读。
我做的事很简单:把财务数据接口拉到的关键指标整理成文本,包括营收、同比、环比、净利润、扣非净利润、毛利率、净利率、经营现金流、资产负债率、存货周转天数等,然后让大模型基于这些数字做“体检式”解读。这里特别重要的一个点是:所有计算在程序里完成,AI只负责“解释数字”,不让AI自己算。比如“营收同比增长15.3%”这个数字由程序算好,AI只分析这个15.3%背后的含义,以及毛利率从20%降到18%可能透露的信号。
生成的速读报告我用来做初筛,如果AI提示“现金流恶化需要关注”或者“毛利率连续三季下滑”,我再去翻原文。省下的是大量机械对比数字的时间。
3.4 情绪面观察:从舆情热点找市场温度
价格是由信息和情绪共同驱动的,但情绪很难量化。我做了个很轻量级的做法:抓取几个主流财经社区和新闻页面当天的高频话题词,然后调用大模型做情绪倾向打分,简单区分“偏多”“偏空”“中性”。我会重点关注两类极端情况:市场对某个板块突然异常乐观,比如标题里全是“重大突破”“拐点”“超预期”;或者突然异常悲观,比如“爆雷”“退市”“风险”。
这个功能不追求精确预测,它的价值在于“早发现”。当某个词突然密集出现在多个不相关信源里,大概率是有事件在发酵。AI把它整理进晨报,我在开盘前就能心里有数。当然,情绪分只能作为参考信号,不能单独作为决策依据,更不会把它放进行情推送里干扰自己。
3.5 每日复盘报告:早晚两篇AI简报
这个功能是我后来觉得最“值”的。以前我每天收盘后要花半小时到一小时整理复盘,现在AI在收盘后自动生成一份日报,内容包括:当日持仓表现回顾、自选股异动小结、重要公告解读汇总、情绪面观察、明日需要关注的时间点。第二天开盘前再生成一份晨报,内容侧重隔夜消息、当天可能的事件催化、需要重点留意的个股。
生成逻辑并不复杂:把所有当天已经分析好的数据重新汇总,再按固定模板让大模型生成叙述性文字。因为素材都是程序整理好的结构化数据,模型输出的幻觉空间被压缩到最小。我拿到报告后只需要补充自己的主观判断,这个功能等于把普通的复盘过程标准化了。
4. 落地实操:从零搭工作台的关键步骤
4.1 基础环境准备
这一套工具全部跑在Python环境下。系统我用的是自己电脑上的Linux服务器,其实Windows也能跑,差别不大。依赖库就几样:requests、pandas、schedule、openai或各云厂商的SDK。数据库直接用SQLite,不需要装MySQL,个人用完全够了。
安装环境建议单独建一个虚拟环境,避免和日常开发环境互相污染。因为我这台机器还跑别的服务,所以把所有定时任务交给系统自带的crontab管理,而不是在代码里写死循环和睡眠,这样保证任务挂掉能自动重启,也方便查日志。定时任务的时间规划:行情扫描每30秒一次,公告抓取每5分钟一次,财务数据每天盘后更新,复盘日报每天下午3点半触发,晨报每天早上8点触发。
4.2 数据采集的代码思路
数据采集是整条链路里最没有技术含量但最容易出问题的地方。以实时行情为例,核心代码非常简单:
import requests import sqlite3 def fetch_quote(code): # 示意接口,实际域名需要替换为可用的公开行情接口 url = f"https://example.com/api/quote?code={code}" resp = requests.get(url, timeout=5).json() return { "code": code, "price": resp["price"], "percent": resp["percent"], "volume_ratio": resp["volume_ratio"], "ts": resp["timestamp"] } def save_quote(conn, quote): conn.execute( "INSERT INTO quotes(code, price, percent, volume_ratio, ts) VALUES(?,?,?,?,?)", (quote["code"], quote["price"], quote["percent"], quote["volume_ratio"], quote["ts"]) ) conn.commit()这段代码本身没有难度,难点在于容错。行情接口偶尔会超时、返回空数据或者字段缺失,所以我在代码里加了重试机制:第一次失败后等3秒重试,连续失败三次就跳过本周期,同时写一条日志。关键是要保证主流程不被某个接口拖死。
公告和财务数据我走的是另一个公开数据接口,逻辑类似:定时拉取公告列表后,先把数据存库,再交给下一步的AI处理。整个过程用SQLite存原始数据还有一个好处,AI出结果后我可以回查原始数据,核对它有没有瞎写。
4.3 三种Prompt模板实操
Prompt是整个工作台效果差异最大的地方。同样的数据,模板写得好不好,输出质量天差地别。我分享三个目前最常用的模板:
第一个是异动播报模板:
你是A股盘中异动播报员。消息只能基于给定的数据,不要编造原因。 数据如下:股票代码、当前价格、涨跌幅、成交量、量比、近5分钟涨幅。 如果可能,简要说明异动类型(放量拉升/缩量回调/突破/跌破等), 最后加一句风险提示。控制在100字以内。第二个是公告解读模板:
你是上市公司公告解读助手。请阅读下面的公告标题和摘要, 输出JSON格式结果,字段包括:stock、title、type、effect、reason、keywords。 effect只能是“利好”“利空”“中性”“未知”之一。 如果公告信息不足,effect填“未知”,不要猜测。第三个是复盘日报模板:
你是一个严谨的投资者复盘助手。请基于以下结构化数据,写一份收盘复盘。 要求分四个部分:今日持仓回顾、异动小结、公告影响、明日关注点。 只使用给定数据,不编造行情和新闻。语气客观中立。全文字数300字左右。这三个模板的共同点是:限定任务角色、限定输出格式、限定信息来源、禁止编造。在对话里明确告诉模型“如果信息不足就写不知道”,能极大减少幻觉。同时温度参数我全部调到接近0,确保输出稳定。
4.4 模型成本控制方案
自己搭工作台,如果不控制成本,AI调用费很容易变成无底洞。我的控制策略有三条:
第一,按任务分档。盘中需要秒级响应的异动播报用性能更强的模型,收盘后的复盘和公告解读用便宜大碗的模型。很多云厂商都提供不同档位的模型,价格差好几倍。
第二,不要一股脑把全量文本丢给模型。公告可能几千字,我通常只取标题加正文前2000字;财务报告则只送关键指标,不送整份报告。把输入压缩掉80%,成本就降下来了。
第三,用缓存和去重。同一只股票的同一个公告,只在第一次出现时调用模型,后续直接复用之前的解读结果。程序里加一个公告ID维度的去重,可以在公告披露高峰期大幅减少调用次数。
我实际使用下来,一天几十次调用,每日成本几块钱,一个月大概几十块。如果主模型换成最贵的那档,成本会翻几倍,但效果提升非常有限。所以说,模型选择是性价比问题,不是越贵越好。
5. 踩坑记录:这些问题我花了不少时间才解决
5.1 数据源不稳定怎么办
免费数据源最大的问题就是不稳定。我遇到过接口突然改字段名、返回数据延迟几十秒、甚至连续几个小时拉不到数据的情况。这些坑不会出现在文档里,只有实际跑才知道。
我的应对方案是“多源备份+失败降级”。主力行情接口挂了,就自动切换备用接口;备用也挂了,就不推送异动,只在日报里标注“今日行情数据不完整”。同时每半小时做一次自检,发现连续失败就推一条提醒给我,免得工作台静默失效我还不知道。这个自检逻辑很重要,工具只有可信才有价值,失联的工具比没有工具更危险。
5.2 AI瞎编数据的幻觉问题
大模型在数字上特别容易一本正经地胡说八道。我刚开始测试时,让AI自己计算某只股票的区间涨跌幅,结果它算出一个看起来合理但完全错误的数字。从那以后,我定了一条铁律:所有数值计算一律在代码里完成,模型只负责对计算结果做文字性解读,并且明确告诉它不要做任何数值计算。
另一个坑是模型会把“可能的原因”描述成“确定的原因”。比如数据里只有价格异动,没有消息面信息,AI却说“可能是由于该公司发布超预期财报”。这是编造。我后来在公告模板里专门加了一句“如果数据中没有提到,禁止推断消息来源”,并用“未知”兜底。跑了一段时间后,我发现大部分幻觉都是这两类:数值错误和归因错误,基本都能用规则限制住。
5.3 推送太频繁沦为垃圾消息
工作台刚跑起来时,我恨不得每条异动都推给自己,结果一天能收上百条消息。开盘半小时内,涨跌超过3%的票可能同时触发好几条提醒,群机器人疯狂震动,我反而一条都不想看。
后来我加了三个限制条件:同一只股票在5分钟内只能触发一次推送;同类型异动(比如“放量突破”)每天最多推送两次;每天总推送上限设为20条,超过后当天不再推送,只留到晚报里汇总。限流之后,消息质量明显提升,每条推送我基本都会打开看一遍。这才回归了“AI工作台”的本意——做减法。
5.4 合规底线:工具可以自动,决策必须人定
用AI辅助投资,首先要明确一条底线:这套工具是用来辅助信息处理和分析的,不是用来替代投资决策的。我不做全自动下单,也不基于AI输出做无脑操作。每次看到AI推送,我都会问一个问题:这个结论的依据是什么?数据来源是否可靠?消息面是否已经反映在价格里?这些问题AI帮不了我,必须我自己回答。
另外,这套工具只给我自己用,我不会把AI生成的异动播报和解读直接转发给朋友作为“操作建议”。涉及合规的事,最好的处理方式就是不要越界。给自己一个省心、合规的状态,比多赚一波行情重要得多。
最后再分享一点我自己的体会。搭这个工作台的过程中,真正花时间的不是代码,而是想清楚“我要让AI帮我盯什么、忽略什么”。AI只是个执行者,规则越明确,它干得越漂亮。如果只是把各种数据一股脑堆给它,得到的只会是一堆同样让人焦虑的信息。盯盘这件事,本质上不是盯得越多越好,而是盯得准才有意义。对我来说,这套工作台最大的价值,是把我从“一分钟看一次手机”的状态里解放了出来,让我有更多精力去思考真正重要的事。