
简介《2025金融大模型应用与智能体建设案例集》是一份面向银行、保险、证券、信托等金融机构从业者的大模型落地实践参考PDF聚焦金融行业智能化转型中的技术选型与场景落地难题。资源从近两年“鑫智奖”评选积累的案例中精选50余个标杆实践覆盖智能客服与营销、智能风控与合规管理、知识管理与智能问答、运维安全与测试智能化、投顾与业务管理、创新技术与平台建设六大核心场景包括广西北部湾银行虚拟数字人系统、天津银行“AI合规官”、北京银行“京信妙笔”智慧创作平台等生动案例可为读者提供从数据安全、合规监管到模型可解释性、业务适配性的完整应对思路。压缩包仅含1个PDF文件大小7.75MB便于携带与扫读。已有71人学习下载适合正在规划或推进大模型落地的金融科技、AI算法及数字化条线人员参考借鉴。1. 金融大模型与智能体案例集这批案例到底想解决什么一家券商投顾团队想把几千份研报和监管问答做成内部知识库让客户经理在几秒内拿到带出处的答案。另一个资管小组想用智能体自动整理持仓报告的异常波动。这些需求听起来都能用“大模型”解决但真放进生产环境就会发现通用模型不会按金融口径说话也不会在拿不准时主动拒答。2025金融大模型应用与智能体建设案例集这类资料的价值正在于它给了从业者一批“从模型到业务系统”的完整落地方案如何做知识问答、如何编排工具调用、如何过合规审。适合看的人群是金融IT负责人、算法工程师、智能体产品经理。下面直接从选型拆到上线评测。2. 通往金融大模型与智能体的三条路线从RAG到微调怎么选型2.1 为什么通用大模型在金融场景会“失手”金融场景的第一个特殊点是数值敏感。研报里写着“归母净利润同比增长12.84%”模型在回答时可能顺手改成“约13%”或者把“万元”和“亿元”的单位弄混。业务人员一看就知道这不能用。第二个特殊点是知识保鲜度。年报、基金费率、监管问答、产品公告每个月都在更新模型训练数据的截止日期永远赶不上业务需求。第三个特殊点是可解释性。银行信贷审批、投顾建议这类场景回答必须能追溯到原始材料或数据接口业务人员不接受“模型说就是这样”。这三个特殊性决定了金融大模型应用不能直接拿通用大模型裸跑而是要在外面套两层约束一层是知识约束把模型回答范围限定在给定材料内一层是行为约束让模型只能调用被允许的工具、只能说被允许的话。案例集里跑通的项目绝大多数都不是在比哪个基座模型更强而是在比谁把这两层约束做得更严密。2.2 RAG、微调与纯提示词一张对比表和一个选型流程三条路线各管一段。纯提示词工程适合低风险场景比如把一段口语化描述整理成标准格式、做简单分类RAG检索增强适合知识密集型任务比如研报问答、制度查询、贷前材料抽取它的最大优点在于知识更新成本低换一批文档重建索引就能跟上业务变化模型微调适合输出格式和术语表达都需要高度稳定的场景比如合同要素抽取要求固定输出JSON结构但微调对新增知识的吸收能力弱不能指望它回答训练之后才出现的新规。路线适用场景落地成本知识更新方式主要风险纯提示词工程格式整理、简单分类、摘要低改提示词数值易错、口径不稳定RAG检索增强知识问答、材料抽取、归因查询中换文档重建索引召回不准导致答案断链模型微调固定输出结构、专业术语体系高重新训练过拟合、知识固化难更新选型流程我一般这样走。先把业务问题拆成两类业务要的是“知识”还是“格式”。如果核心诉求是从一堆材料里找答案直接走RAG如果业务最痛的是每个回答都必须按固定八股文输出再考虑微调如果两者都有常见做法是以RAG为主微调只作用于输出层让模型把检索到的内容按约定模板重新组织语言。这个组合在案例集里出现频率最高也是投入产出比最稳的一条路。想通过微调提升模型本身专业能力的团队需要想清楚一个问题金融业务语言变化太快微调数据集跟不上新规节奏反而容易让模型在旧知识上过拟合。2.3 智能体框架怎么挑LangGraph、Dify这类平台和自研循环的取舍智能体应用在金融案例里反复出现的工程问题有三个工具调用怎么组织、流程状态怎么跟踪、外部系统凭证怎么管理。工具调用的组织方式上轻量场景自己写一个任务循环就能跑但工具一旦超过三个状态管理就容易失控。LangGraph这类带状态机的框架可以把每一步的流转和工具返回值显式建模适合需要精细控制、要长期迭代的团队。Dify、Coze这类可视化平台则更擅长快速验证内置知识库接入和工具编排适合算法和业务一起在原型阶段快速对齐口径。这三个维度的取舍比选哪个模型更重要。状态相同的情况下平台的优势是省掉开发工作量代价是自定义评测逻辑和特殊的审计日志往往要绕开平台做外挂。代码框架的优势是可控代价是全部流程要自己写。案例集里做得扎实的项目普遍会提前定义好“智能体技能”的敏感变量——数据库口令、外部接口的私有Key、内部文档路径——这些不让模型感知而是放在编排层的变量里只在工具调用时注入请求头。这是很多项目上线后翻车又重新补回来的设计早期不隔离后期就得从头重构权限模型。3. 搭一个最小可跑的金融智能体架构步骤与Python代码3.1 搭建前的准备先定义Agent的边界比写代码更重要真正动手写代码前先把Agent能做什么、不能做什么写进配置文件。金融场景里Agent默认能做的是查询已授权文档、调用只读指标接口、生成格式化报告默认不能做的是访问交易系统、发起转账类指令、读取未经脱敏的个人客户明细。这些边界不要只写在提示词里提示词可以被改写和覆盖必须落到编排层的配置文件中。# agent_boundary.yaml allowed_tools: - document_search - financial_indicator_query - report_draft forbidden_actions: - transaction_execute - customer_private_data_read max_steps: 6 sensitive_variables: - db_password - api_key_private这个文件的作用有两个。一是启动时加载为白名单每次模型请求调用工具前编排层先查一遍动作是否在allowed_tools里不在就直接拒答或转人工二是作为审计依据上线后任何一次越界调用都能通过日志定位到具体是哪个请求、哪一轮对话触发的。sensitive_variables里的密钥不进入提示词、不进入对话历史只存在于编排层的内存变量里在发起HTTP请求时以请求头方式注入。这个设计能挡住大部分“提示词泄漏密钥”的低级事故。3.2 主流程代码工具调用与循环控制下面这段代码是一个最小业务循环的骨架。它的核心思想是让大模型当“决策器”而不是“回答器”模型先判断该调用哪个工具拿到工具结果后再生成最终回复。# minimal_finance_agent.py def run_single_turn(user_query: str, history: list[str]) - str: # step 1: 让模型输出结构化的工具决策 decision llm_complete( system_promptSYSTEM_PROMPT, user_queryuser_query, historyhistory, # 金融场景必须用JSON约束输出避免模型自由发挥 response_format{type: json_object}, ) if decision[action] direct_reply: return decision[reply] if decision[action] not in ALLOWED_TOOLS: # 超出边界不报错走拒答分支 return 该问题超出我能处理的范围建议转人工。 # step 2: 执行工具结果必须是结构化数据 tool_result EXECUTOR.call(decision[tool], decision[args]) if tool_result[status] ! ok: return f查询失败{tool_result[message]} # step 3: 把工具结果和原始问题一起交给模型生成最终答复 final_reply llm_complete( system_promptSYSTEM_PROMPT, user_queryuser_query, historyhistory, tool_resulttool_result[data], ) return final_reply这段代码的关键在第一步。如果允许模型自由输出自然语言来描述工具动作模型可能把参数拆错比如把“查询2024Q3的ROE”写成“查一下最近三个季度的净资产收益率”工具层拿到模糊参数就没法执行。用JSON约束后工具名和参数都变成结构化字段解析和校验都在本地完成参数类型不对会在调用前被拦截。对于max_steps这里要做一个外层循环的限制防止模型在异常情况下反复进入工具调用分支。金融场景的常见配置是单次会话最多6步超过就直接返回“查询步骤过多请简化问题”。这个参数如果设得太大模型会在一个复杂问题上反复尝试不同工具组合既烧token又拖慢响应。接入的模型服务如果是OpenAI兼容接口response_format传json_object即可如果用的是DeepSeek、Qwen这类同样兼容该协议的服务参数保持不变。自建模型没有这个参数时就在系统提示词里写死“只输出JSON不要输出任何解释性文字”效果接近但稳定性要靠评测集把关。3.3 加入本地检索让Agent能查内部文档金融场景的RAG有个普遍痛点文档格式杂、更新快PDF表格、公告原文、邮件正文全混在一起。生产环境最稳的路径是先把所有文档统一转成纯文本或Markdown再做分段和索引。下面给一个能几分钟跑通的最小检索实现。# simple_rag.py import sqlite3 def build_fts_index(doc_dir: str, db_path: str) - None: conn sqlite3.connect(db_path) conn.execute( CREATE VIRTUAL TABLE IF NOT EXISTS docs USING fts5(title, content) ) for path in list_markdown_files(doc_dir): title, content read_and_chunk(path) conn.execute( INSERT INTO docs(title, content) VALUES (?, ?), (title, content), ) conn.commit() conn.close() def retrieve(query: str, top_k: int 5) - list[str]: conn sqlite3.connect(DB_PATH) rows conn.execute( SELECT title, content FROM docs WHERE docs MATCH ? LIMIT ?, (quote_query(query), top_k), ).fetchall() return [f[{title}] {content} for title, content in rows]这段代码定位是“跑通流程”。SQLite自带的FTS5全文检索不需要额外部署服务适合验证RAG链路是否完整。但它对同义词无能为力“净利润”和“归母净利润”这种表达差异会直接漏召回。生产环境我一般换成本地向量化加embedding模型做混合检索——关键词召回负责精确匹配数字和专有名词向量召回负责语义扩展。检索参数里最值得调的是top_k和分段长度。top_k在金融场景我一般取5到8太少容易漏关键段落太多会把不相关的内容塞进上下文模型容易被噪音带偏。分段长度建议按语义边界切先按标题分块每块里如果超过800字再按句子边界二次切开。不要只用固定字符数切那样会把“公司名称指标单位”的完整信息拦腰截断导致模型抽不出完整数值。3.4 接入金融数据工具的接口约定金融智能体最常接的不是文档而是指标查询类接口。这部分的设计直接决定后期排查成本。我强烈建议所有外部数据工具都返回统一JSON结构不允许直接返回原始页面HTML或数据库裸数据让模型自己猜。{ tool: financial_indicator_query, status: ok, data: { company: 示例股份, indicator: roe, period: 2024Q3, value: 11.24, unit: % } }这个结构的价值在于单位、期间、数值类型都明确标注。模型拿到的不是一段叙述文字而是一个可以直接引用的键值对。如果工具查不到数据status返回“no_data”而不是空列表这样模型才会走拒答分支而不是瞎编一个数字。实际项目中常见的翻车是把原始JSON直接塞给模型字段名是英文缩写模型不理解含义回答时把period当成年份、把value当成百分比就错了。这里的另一个约定是工具执行失败时不要返回自然语言描述的错误要返回结构化的错误码和可读消息。这样模型可以明确告诉用户“查询失败接口超时”而不是对着一段堆栈自己猜。4. 金融场景部署的边界条件私有化、数据分级与上线合规检查4.1 数据分级不同敏感级别的数据能进哪层金融场景里大模型和数据的关系不是“能不能访问”而是“数据能不能出域”。很多团队早期没有做过数据分级直接把内部研报、客户资料全量灌进RAG索引等合规审查时才发现问题。案例集里跑通的项目基本都先画了一张数据分级表。我一般按三层来分。数据级别典型内容能放进哪层关键控制点L1 公开数据上市公司公告、监管公开文件、宏观统计公网模型或私有化均可抓取源更新时效L2 内部脱敏数据脱敏后的客户持仓、内部研报只能进私有化模型或内网RAG索引脱敏字段复核防止员工号泄漏L3 敏感数据个人客户明细、交易流水、未发布策略不进模型上下文只走规则和工具调用工具只返回聚合结果不返回明细L3是最容易翻车的一层。很多团队认为模型已经私有化部署就安全了但私有化部署不等于数据隔离——推理服务的日志可能回传供应商统计接口Embedding索引文件本身也可能被反查还原原文。案例集里稳妥的做法是L3数据不进入模型上下文业务需要时由工具在沙箱里聚合计算只把结果数字返回给模型做转述。业界现在普遍有一个判断2026年是工业智能体从概念演示走向工程化落地的分水岭。金融作为最早被合规压力驱动的行业之一数据分级这一步做得越早后面越省事。现在业务部门提出“想用大模型看某个报表”不要急着接数据先问数据落在哪一级、能不能进RAG、工具返回值会不会暴露明细。4.2 私有化部署的落地路径部署层要分清两个角色模型推理服务和Agent编排服务。模型推理服务负责处理大模型请求Agent编排服务负责调度工具、管理会话、做边界检查。两者可以都放在内网但面向业务前端还需要一层网关做统一身份校验和限流。落地顺序我一般从开发环境开始。先用开源权重模型本地推理跑通流程比如Qwen这类已经可以在普通GPU服务器上运行的模型确认提示词和工具调用链路稳定后再按生产要求切换最终推理服务。这个顺序很重要——Agent的代码缺陷在开发期就能暴露不必一上来就烧付费接口费用。链路稳定后再根据并发规划部署形态金融场景普遍要求双副本加故障切换推理服务挂了不能影响交易类操作超时阈值要比通用场景更短交易员不会等一个Agent回答30秒20秒没出结果就应该触发降级提示。部署时的另一个要点是日志路径。推理服务日志、编排层日志、业务网关日志应该三个系统分开存。排查问题时顺序是先看编排层日志定位到具体是哪一步工具调用失败再回看推理服务的模型决策原文最后到业务网关看用户实际收到什么。很多团队把日志全塞进一个文件里问题出现时定位成本极高。4.3 上线前合规审查清单四个必查项金融智能体上线前算法、业务、合规要一起过一遍检查清单。清单的核心不是技术参数而是每类交互的追溯性。四个必查项如下输入输出留痕每次问答、每次工具调用、模型每个决策步骤的原始请求与响应都进审计日志保存时长不低于三个月。拒答覆盖所有涉及个人客户信息、交易建议、监管未允许口径的询问必须能走到拒答或转人工分支且不能因为模型置信度低就漏触发。数值复核自动生成报告里的数字必须能定位到原文档或数据接口输出模板不允许出现未经检索确认的数值。权限隔离Agent使用的数据库账号遵循最小权限原则只能读业务需要的表和文件不用全库只读账号糊弄。注意这个清单跑完一遍必须和边界配置、统一返回值、审计日志全部串起来验证。如果第3章代码里没有日志中间件此时就得补上不要以“上线后再加”为由拖。日志记录格式我一般用JSON每条包含session_id、步骤名、工具名、输入摘要、输出摘要、耗时、模型决策原文。这些字段在排查数值幻觉时是救命线索。合规审查不看你写了多少安全方案只问一个问题某条具体输出是怎么来的能回答就放行不能回答就无条件打回。5. 金融智能体的常见翻车点从数值幻觉到工具断链的排查记录5.1 现象金额单位被“润色”掉了客户问某基金的管理费率是多少Agent回答“1.5%”但原文写的是“1.50%”。还有更严重的把“年化收益率3.85%”回答成“收益率3.85%”把时间口径给丢了。这类问题的根源在于模型生成回答时会按自己的语言习惯“顺”数字把专业技术表达转换成它觉得更自然的说法而金融场景里精度就是红线。解决要两层。第一层在提示词里强约束凡是引用数字必须从检索结果中直接复制不得改写、不得四舍五入、不得省略单位。第二层在输出后处理里加自动化校验把答案中出现的所有数字与检索原文的数字集合比对凡是原文中找不到完全一致的数字就把该句标记为“待人工复核”。第二层必须用脚本做不能靠人工盯长答案里找数字误差盯十分钟就会疲劳。5.2 现象工具返回值不规范Agent开始“编”工具返回了一个原始HTML页面页面上有导航栏、侧边栏、广告位模型没找到关键数据于是根据标题猜测了一个数值填进回答。这是典型的工具接口设计问题——工具返回值没有经过结构化清洗就直接进了模型上下文。根源在接口约定没落地。解决方式是给每个工具加一层“返回清洗器”输出必须是3.4约定的JSON结构字段名固定、单位固定、状态码固定。清洗失败的场景宁可返回no_data也不能返回脏数据。排查工具断链时先看清洗器日志定位是哪一步解析失败再修上游接口映射。5.3 现象RAG检索命中率看着高一问“多条件聚合”就露馅用户问“去年营收增长超过10%且毛利率低于行业平均的上市公司有哪些”检索出的段落各说各的模型拼不出一份完整名单。原因是分段逻辑按固定字数切块跨段落的信息被割裂单块检索解决不了跨文档聚合。解决方向有两个。一是调整分段策略让段落按“公司期间指标”语义边界切而不是纯按字符数切二是增加多路召回再重排先用关键词召回20到30个候选段再让模型对候选段做一次相关性判断只取前几段进上下文。候选数太少漏召回太多则噪音干扰20到50是常见可调区间。5.4 现象一次上游接口超时把整个Agent卡死指标查询接口响应了30秒Agent一直等最终整条链路超时。原因是编排层没设单步工具调用的超时阈值也没有重试和降级策略。金融场景里上游接口超时比回答错误更容易引发投诉因为业务人员无法区分你是系统故障还是数据泄漏。解决方式是设齐三类阈值单步工具调用超时5秒、重试次数2次、总链路超时30秒。超过总链路超时就返回“查询超时请稍后再试”模型不需要补充解释。这个配置在金融场景里也可以作为默认模板复用不同业务按实际接口延迟微调。5.5 现象评测集只有主观评分审计复查被打回上线前测试团队给了几十条问答人工打了一堆“内容准确”“表述自然”的主观分但合规复查时拿一条“某策略收益排序”来问系统答错了没人发现。原因是评测集里缺少数值型任务和交叉验证任务主观评分覆盖不了数值幻觉。解决方式是给评测集增加两类题。第一类是精确数值题答案必须是文档或工具接口里存在的原值不允许任何形式改写第二类是矛盾检测题当两个来源说法不一致时模型必须指出不一致而不是自己选一个可信的答案。这两类题补进去后评测指标就从主观评分变成了可量化的通过率上会审才有数据支撑。6. 上线前最后一步用评测集给金融智能体设一道闸门6.1 先给四维评测指标立个分数基线金融智能体的评测维度我建议固定在四个维度。数值正确率要求所有涉及数值的回答不得出现数据源中不存在的数字这一项必须接近100%逻辑一致性要求回答不能自相矛盾前面说“不建议配置”后面又说“可以考虑配置”直接判失败引用可溯性要求每个结论都能回指到具体检索段落或工具返回键值拒答正确率要求该拒的场景不能强答不该拒的场景不能误拒。阈值设置上数值正确率低于98%不允许上线。其他三项以当前基线为准新版迭代导致任一项下降超过3个百分点需要回滚线上配置。这个3个百分点不是拍脑袋定的而是模型在真实流量下的波动通常比评测集高两个点评测降3%意味着线上可能接近5%劣化。6.2 回放验证脚本用一份离线记录复现每一条会话上线前我把所有测试问答做成JSONLines文件每行包含query、参考答案、期望工具调用序列、期望出处文档ID。回放脚本逐条调用Agent自动比对数值字段和引用ID。# replay_eval.py import json def run_replay(test_set: list[dict], agent) - dict: total len(test_set) num_ok 0 failures [] for case in test_set: result agent.invoke(case[query]) # 数值校验答案中每个数字必须出现在参考资料里 numbers_in_answer extract_numbers(result[answer]) numbers_in_ref set(extract_numbers(case[reference])) missing [n for n in numbers_in_answer if n not in numbers_in_ref] if missing: failures.append({ case: case[query], reason: 数值不一致, detail: missing, }) continue # 引用校验模型返回的引用ID必须命中参考资料ID集合 if set(result[citations]) ! set(case[expected_citations]): failures.append({ case: case[query], reason: 引用ID不符, detail: result[citations], }) continue num_ok 1 return {pass_rate: num_ok / total, failures: failures[:20]}参数说明数值校验是这里最狠的一项它把回答里出现的所有数字和参考材料的数字集合比对只要答出来的数字参考材料里没有直接判失败能拦掉所有模型自己推断出的数字。引用校验确保回答必须有出处且出处必须是预期文档防止模型拿无关文档凑数。test_set建议至少覆盖三个子集常规知识问答、带精确数值的材料抽取、多条件交叉检索每类30条以上。6.3 上线后第一周你真正该盯的三个数上线不是终点前七天盯三个指标。数值召回命中率所有回答中数值能从数据源回溯的比例工具调用失败率上游接口和清洗器的失败占比拒答触发比例拒答过低说明模型在强答突增说明提示词改过头把正常问题挡住了。第一个数下降说明RAG索引或数据源有问题第二个数升高说明上游接口变了第三个数异常说明行为约束需要重新调。我现在的一个习惯是所有金融Agent改版都先离线回放一遍评测集再切10%流量灰度观察三天最后全量。这个流程看似慢但省掉的是上线后半夜被人叫起来排查数值事故的折腾。做金融场景慢一点不是坏事稳比快更重要。希望这篇笔记能帮你把案例集里的方案真正落进自己的业务流程里。本文还有配套的精品资源点击获取