
1. 为什么我要把投资逻辑拆成一套AI智能体框架我做量化投研这些年最头疼的从来不是“找不到数据”而是“数据太多、逻辑太散、执行太慢”。一只股票从发现异动到形成可执行结论中间要过财报、公告、行业景气、资金面、技术形态、舆情这几道关每一道关都得换一套工具、换一种思维。人脑串行处理一天能盯住的票不超过二十只还容易受情绪干扰。去年我开始认真琢磨一件事能不能把“从逻辑到个股”这条链路交给一组分工明确的AI智能体去跑我只看它们汇总上来的结论这个想法落地之后就是我现在这套完整AI智能体投资框架。它不是某个单一的大模型问答也不是简单的“让GPT帮我看看K线”而是一套由多个智能体协作、各司其职、互相校验的流水线。核心思路是把投资决策拆成“宏观逻辑—行业筛选—个股定位—风险校验—执行建议”五个阶段每个阶段配一个专门的智能体用大模型做推理内核用算力和数据做支撑最后输出一份带置信度的个股清单。这套框架适合谁如果你是有一定投研基础、想用AI放大自己判断力的个人投资者它能帮你把重复劳动压缩掉八成如果你是做量化或金融科技的产品、开发它能给你一套可复用的智能体编排范式哪怕你只是对大模型智能体感兴趣这里面的工作流搭建、提示词工程、算力取舍也能直接抄作业。我下面会把整套东西掰开揉碎讲清楚包括我踩过的坑和实测下来的参数选择。2. 框架整体设计与智能体分工拆解2.1 为什么是“多智能体”而不是“一个大模型”一开始我也想过偷懒直接写一个超长提示词让一个大模型从头到尾把逻辑、选股、风险全包了。实测下来问题很明显上下文一长模型注意力就涣散前面定的行业逻辑到后面选股时已经被忘得差不多而且不同阶段需要的“性格”完全不一样——宏观逻辑要发散、要联想个股定位要收敛、要抠数字风险校验要挑剔、要唱反调。一个模型很难同时扮演好这三种角色。多智能体的本质是职责隔离加信息传递。每个智能体只关心自己那一段输入输出格式固定这样既降低了单次推理的复杂度又让每一步都可追溯、可替换。比如宏观智能体判断“当前算力产业链景气度上行”这个结论会作为结构化字段传给行业智能体行业智能体再去匹配具体的细分方向而不是让模型重新从零推理一遍宏观。从工程角度看多智能体还有个隐性好处算力可以分级配置。宏观推理用大参数模型跑一次就够个股定位需要反复调用、对延迟敏感就可以换成小参数模型或者量化后的版本。这一点在算力约束下特别关键后面我会专门讲。2.2 五个智能体的职责边界与数据流我把框架拆成五个核心智能体外加一个协调器。协调器不参与推理只负责按顺序调度、传递上下文、做格式校验。智能体核心职责输入输出推荐模型规模宏观逻辑体判断市场主线、政策方向、资金偏好新闻摘要、指数数据、板块涨跌主线逻辑标签置信度大参数70B级行业筛选体把主线映射到具体行业与细分赛道主线标签、行业数据候选行业列表排序中大参数32B级个股定位体在行业内选出具体标的并给理由候选行业、个股财务与技术数据个股清单逻辑链中参数14B级风险校验体对个股清单做反向质疑与排雷个股清单、公告、舆情风险标记剔除建议中大参数32B级执行建议体给出仓位、节奏、观察点校验后清单、波动率数据执行方案小参数7B级这个分工不是拍脑袋定的。宏观和风险校验需要最强的推理能力因为一个要抓主线、一个要挑毛病都属于“高认知负荷”任务个股定位虽然重要但它是模式化程度最高的小模型微调后完全够用执行建议体更多是规则加轻推理7B级别足矣。这样分配下来整体算力开销比“全用大模型”省了大概六成。2.3 数据层与算力层的支撑设计智能体再聪明没有数据喂就是空转。我的数据层分三块行情与财务数据走本地数据库每天收盘后增量更新公告与新闻走定时抓取加摘要摘要这一步本身也是个小模型任务舆情与研报做向量化存储供检索增强用。算力层是我重点优化过的地方。个人电脑跑这套东西显卡是绕不开的坎。我实测过RTX 309024G显存的配置宏观逻辑体用70B模型做4bit量化单次推理大概占用18G显存能跑但慢行业和风险校验用32B的int8量化占用约16G个股定位和执行建议用14B和7B的fp16占用很小。如果显存不够可以把大模型放到CPU加内存上跑速度会掉到原来的三分之一左右但作为盘后分析完全能接受。这里要提一句精度格式的选择。fp32最准但最吃显存fp16是性价比甜点int8在多数推理任务上损失很小4bit量化在逻辑推理上会有可感知的下降。我的经验是需要发散联想的智能体用fp16或int8需要严格格式输出的用int8纯规则执行的用4bit都行。这个取舍直接决定了你一张卡能同时挂几个智能体。3. 核心智能体的提示词工程与实操要点3.1 宏观逻辑体怎么让模型“抓主线”而不是“报新闻”宏观逻辑体最容易犯的毛病是把新闻复述一遍然后说“市场情绪谨慎”。这不是逻辑这是废话。我在提示词里做了三件事来逼它输出真正的判断。第一强制结构化输出。我要求它必须输出“主线名称、驱动因素、持续时间预估、置信度0-1、反向风险”五个字段缺一不可。格式约束一上模型就没法用模糊语言糊弄。第二给参照系。我会在提示词里塞进最近三天的板块涨跌排名和资金流向让它基于事实推理而不是凭训练数据里的旧印象。这一步很关键大模型的训练数据有滞后性不给实时参照它可能拿半年前的逻辑来套今天的市场。第三要求给出反向证据。我让它必须列出“如果这个主线判断错了最可能的原因是什么”。这一条逼着模型做自我质疑实测下来能显著降低那种“什么都看好”的墙头草输出。提示词的核心片段大概是这样你是宏观策略分析师。基于以下实时数据 {板块涨跌数据} {资金流向数据} {新闻摘要} 请判断当前市场主线严格按JSON输出 { main_line: 主线名称, drivers: [驱动1, 驱动2], duration_estimate: 预计持续时间, confidence: 0.0-1.0, reverse_risk: 判断错误的最可能原因 } 不要输出任何JSON以外的内容。注意置信度这个字段一定要让模型自己填不要你来定阈值。我一开始自己设“大于0.7才采纳”结果发现模型给的置信度分布很集中基本都在0.6到0.8之间阈值形同虚设。后来改成让模型在输出里解释“为什么是这个置信度”反而更有参考价值。3.2 行业筛选体把主线翻译成可交易的赛道宏观逻辑体给出“算力产业链景气上行”这种结论行业筛选体要做的是把它落到“光模块、液冷、PCB、电源”这些具体赛道上。这一步的难点在于避免过度发散。模型很容易从算力联想到AI应用、再联想到传媒、再联想到消费最后给你列二十个行业等于没筛。我的做法是加两道约束。一是数量约束最多输出五个候选行业按优先级排序。二是关联度打分要求模型对每个行业给出与主线的关联度0-1低于0.5的直接不输出。这样逼着它做取舍。另外我会在提示词里注入一份“行业映射表”把常见主线与细分行业的对应关系预先写进去。这不是限制模型而是给它一个锚点避免它在宽泛的行业分类里乱跳。映射表不用很全覆盖主流方向就行剩下的让模型自己补。实测下来加了映射表之后行业筛选体的输出稳定性提升很明显。同样的输入跑十次前三个行业的重合度从原来的六成提升到九成以上。对于要形成固定工作流的框架来说稳定性比偶尔的灵光一现重要得多。3.3 个股定位体小模型微调才是性价比之王个股定位是整条链路里调用最频繁的一环。每个候选行业都要跑一遍还要对行业内几十只票做初筛。如果这一步用大模型算力根本扛不住。我的方案是用14B级别的模型做微调专门训练它“看财务和技术指标选股”这个任务。微调数据从哪来我用历史数据构造取过去几年的行业截面把当时的财务指标、技术形态作为输入把后续一段时间的相对表现作为标签让模型学习“什么样的组合更可能跑赢”。这里要注意标签不能用绝对涨跌要用行业内相对排名否则模型会学到市场整体涨跌的偏见。微调之后的个股定位体输出格式我固定成“股票代码、入选理由、关键指标、逻辑链”四段。逻辑链要求它写成“因为A所以B”的因果句式而不是罗列指标。这个要求看着简单但能有效过滤掉那些“指标好看但说不出所以然”的票。实操心得微调的时候学习率别设太大我试过3e-4模型很快就过拟合到训练集的具体股票代码上换一批数据就废。后来降到5e-5配合早停泛化能力好很多。另外训练数据里一定要混入“负样本”也就是那些指标好看但后续表现差的票否则模型会形成“指标好就买”的简单映射。3.4 风险校验体专门唱反调的“魔鬼代言人”风险校验体的定位很特殊它不负责选股只负责挑刺。我会在提示词里明确告诉它“你的任务是找出这份个股清单里最可能出问题的地方而不是确认它们有多好。”这个角色设定很重要如果不明确模型会习惯性地附和前面的结论。它要检查的东西包括财务是否有异常比如应收账款激增、现金流与利润背离、公告是否有风险提示、舆情是否有负面发酵、技术形态是否处于高位。每一项都要给出“有/无/不确定”三态判断而不是简单的“是/否”。三态设计是为了处理信息不足的情况避免模型在没数据的时候硬编一个结论。风险校验体的输出会直接决定个股清单的最终形态。我的规则是被标记为“有”重大风险的直接剔除“不确定”的降权处理“无”的正常保留。这套规则跑下来能过滤掉大部分明显的雷但也会误伤一些其实没问题的票。所以我在执行建议体里留了一个“观察池”把被降权的票放进去让时间来做二次验证。3.5 执行建议体把结论翻译成可执行的动作前面四个智能体输出的都是“判断”执行建议体要输出的是“动作”。这一步我刻意压低了模型的自由度更多用规则来约束。比如仓位建议我不让模型自由发挥而是给它一个映射表置信度0.8以上对应多少仓位0.6到0.8对应多少再低就只观察。波动率高的票自动降一档仓位。节奏建议也是类似。模型要输出“建仓节奏”和“观察点”观察点必须是可验证的具体条件比如“跌破某均线”“财报公布后”。这种可验证的观察点比“注意风险”这种空话有用一百倍。执行建议体用7B小模型就够因为它的任务本质是“查表加轻推理”。我甚至试过用纯规则引擎替代它效果差不多但少了点灵活性。最后还是保留小模型让它处理一些规则覆盖不到的边缘情况。4. 工作流搭建与算力配置实战4.1 智能体编排串行还是并行五个智能体宏观到行业到个股是串行的因为后一个依赖前一个的输出。但风险校验和执行建议可以并行因为它们都只依赖个股清单。这个并行设计能省下大概三成的总耗时。编排工具我用的是支持工作流定义的框架核心是把每个智能体封装成一个节点节点之间用结构化数据传递。这里有个坑节点之间的数据格式一定要严格校验。我一开始没做校验宏观逻辑体偶尔输出个格式不对的JSON后面全链路就崩了。后来加了一层校验格式不对就重试重试两次还不行就跳过这个节点用默认值兜底。重试机制也有讲究。不是所有错误都值得重试。格式错误可以重试因为模型有随机性重跑一次可能就对了但如果是数据缺失导致的错误重试多少次都没用这时候应该直接降级处理。我在编排层做了个简单的错误分类区分“可重试”和“不可重试”省了不少无效算力。4.2 算力约束下的模型选型与量化策略算力是这套框架最现实的约束。我按“显存占用”和“推理延迟”两个维度做过一轮实测结论如下表模型规模精度显存占用单次推理延迟适用智能体70B4bit约18G8-15秒宏观逻辑体32Bint8约16G3-6秒行业筛选、风险校验14Bfp16约10G1-3秒个股定位7Bfp16约6G0.5-1.5秒执行建议如果只有一张24G的卡同一时间只能挂一个大模型。我的做法是分时复用盘后先跑宏观逻辑体跑完释放显存再加载行业和风险校验体最后加载小模型跑个股和执行。这样虽然总耗时长一点但一张卡就能撑起整套框架。如果有多张卡或者有分布式算力就可以把不同智能体分配到不同卡上实现真正的并行。分布式算力这块个人电脑共享算力出租是个思路但要注意数据安全和延迟问题。我的建议是涉及具体持仓和策略的数据尽量本地跑纯公开数据的处理可以考虑用外部算力。这个边界要划清楚。4.3 从零搭建的完整操作步骤我把搭建过程拆成可复现的步骤你照着做就能跑起来。第一步环境准备。装好推理框架和向量数据库确认显卡驱动和CUDA版本匹配。这一步的坑主要在版本兼容上我建议用容器化部署把依赖锁死省得后面各种版本冲突。第二步数据管道搭建。行情和财务数据接本地数据库公告和新闻写抓取脚本舆情做向量化入库。抓取频率别太高公告一天两次足够新闻可以每小时一次。频率太高容易被限流也没必要。第三步智能体逐个调试。不要一上来就把五个全串起来先单独调每个智能体的提示词用固定输入测输出稳定性。每个智能体至少跑二十次看输出格式和内容的波动范围。波动太大的回去改提示词。第四步编排与联调。把调好的智能体按数据流串起来加格式校验和重试机制。联调阶段重点看两件事一是全链路跑通不报错二是最终输出的个股清单是否符合常识。如果清单里出现明显不合理的票回溯是哪个环节出的问题。第五步回测与参数调优。用历史数据跑一遍看这套框架选出的票在后续一段时间的表现。回测不是为了证明框架多厉害而是为了找出哪个环节的过滤太松或太紧。我第一轮回测发现风险校验体剔除了太多票导致最终清单只剩两三只后来放宽了“不确定”的处理规则清单数量才回到合理区间。4.4 提示词工程与上下文工程的关键细节提示词工程这块我最大的体会是约束比指令更重要。你告诉模型“要严谨”它不知道该怎么做你告诉它“必须输出五个字段缺一个就重来”它立刻就严谨了。所有抽象的要求都要翻译成具体的格式约束或数量约束。上下文工程则是另一回事。多智能体框架里上下文不是越长越好。每个智能体只需要它那一段的相关信息塞太多无关内容反而干扰判断。我的做法是给每个智能体定义“最小必要上下文”只传它完成任务必需的数据。比如个股定位体不需要知道宏观主线的推导过程只需要知道主线标签和候选行业就行。还有一个细节是上下文的时效性。行情数据要带时间戳新闻要带发布时间让模型知道信息的“新鲜度”。我试过不带时间戳模型会把一周前的新闻当成今天的来用结论就偏了。带上时间戳之后模型自己会在推理时考虑信息的时效权重。5. 常见问题与排查技巧实录5.1 智能体输出不稳定怎么办输出不稳定是多智能体框架最常见的毛病。同样的输入跑两次结果差很多。排查思路按这个顺序来先看提示词有没有模糊表述再看温度参数是不是设太高最后看输入数据本身是不是有噪声。温度参数我一般设0.3到0.5之间。太低会死板太高会发散。宏观逻辑体可以到0.6因为它需要一点联想个股定位体压到0.2因为它需要稳定复现。这个参数不是固定的要按智能体的角色来调。如果提示词和数据都没问题输出还是飘那可能是模型本身的能力边界到了。这时候要么换更大的模型要么接受这种波动在编排层加一层“多次采样取共识”的机制。我對宏观逻辑体就用了三次采样取置信度最高的那个结论稳定性提升明显。5.2 数据延迟与脏数据怎么处理数据延迟在盘后分析里问题不大但如果你想做盘中辅助延迟就是致命的。我的建议是明确框架的定位它是盘后分析工具不是盘中交易信号。定位清楚了数据延迟就不是问题收盘后跑一遍第二天开盘前看结论节奏刚好。脏数据更麻烦。财务数据里的空值、新闻里的重复条目、舆情里的水军内容都会干扰判断。我的处理方式是加一层数据清洗空值用行业均值填充并标记重复条目去重舆情做来源可信度加权。清洗规则不用很复杂覆盖常见情况就行剩下的让风险校验体去兜底。注意清洗规则一定要记录日志。我遇到过清洗把某只票的关键财务数据误删的情况没有日志根本查不出来。后来每次清洗都写日志出问题能快速定位。5.3 算力不够时的降级方案算力不够是常态得有降级方案。我的降级顺序是先降精度fp16到int8再降模型规模70B到32B最后降功能砍掉风险校验体的深度分析只做规则检查。降级不是无脑降要看影响。精度从fp16降到int8多数任务损失很小可以放心降模型规模从70B降到32B宏观逻辑体的发散能力会下降但行业筛选和风险校验影响不大砍功能是最后手段不到万不得已不用。还有一个思路是错峰运行。把不着急的智能体放到夜间跑白天只跑需要快速响应的。这样一张卡也能撑起整套框架只是总时长拉长了。5.4 常见问题速查表问题现象可能原因排查方向解决方法输出格式错误提示词约束不够检查格式要求是否明确加强格式约束加重试结论前后矛盾上下文传递有误检查节点间数据流校验传递字段去冗余选股结果偏离常识数据脏或模型过拟合检查输入数据质量清洗数据重训模型推理速度过慢模型太大或精度太高看显存占用和延迟降精度或降模型规模风险校验漏报提示词角色不明确检查是否强调挑刺强化魔鬼代言人设定置信度分布异常模型校准有问题看置信度与实际表现加解释字段人工校准6. 我在这套框架上踩过的坑和真实体会先说一个最大的坑我一开始太迷信“全自动”。想着五个智能体串起来我什么都不用管每天看结论就行。结果跑了两周发现模型在某些环节的判断明显偏离我的投资逻辑但我因为没参与中间过程根本不知道它为什么这么选。后来我改成“半自动”每个智能体的输出我都会扫一眼发现异常就回溯。这样虽然多花点时间但框架的可信度上来了。第二个坑是过度优化提示词。有段时间我天天改提示词想让输出更完美结果改来改去稳定性反而下降了。后来我定了个规矩提示词改一次至少跑五十次测试确认稳定了再改下一次。频繁改动是提示词工程的大忌。第三个体会是小模型微调的价值被低估了。很多人一上来就想用最大的模型觉得越大越好。但在个股定位这种模式化任务上一个微调好的14B模型表现比没微调的70B模型更稳定、更快、更省算力。微调的数据质量和任务定义比模型规模重要得多。最后一个真实感受这套框架不会让你变成投资高手它只是把你从重复劳动里解放出来让你有更多时间思考真正重要的判断。它输出的结论最终还是要你自己拍板。把它当成一个不知疲倦的研究助理而不是一个替你决策的黑箱心态就对了。这套东西我还在持续迭代下一步想试试把多模态能力接进来让它能直接读K线图和财报图表。不过那是另一个话题了等跑通了再分享。