生产应用使用函数调用
声明一个边界清晰的函数,例如 get_stock_quote。Gemini 返回结构化参数;后端校验股票代码、调用数据源,再把函数结果发回模型生成最终回答。Google 官方流程明确指出,函数由应用代码执行,而不是由模型直接执行。
金融与市场数据
围绕时间戳、市场覆盖、数据时效和故障处理,为 Gemini 构建可靠的实时股票数据工作流。
发布日期:2026年4月18日 · QVeris团队制作


两条路径对应不同的部署场景。只有产品同时包含 API 应用和交互式开发工作流时,才需要同时采用。
声明一个边界清晰的函数,例如 get_stock_quote。Gemini 返回结构化参数;后端校验股票代码、调用数据源,再把函数结果发回模型生成最终回答。Google 官方流程明确指出,函数由应用代码执行,而不是由模型直接执行。
在 Gemini CLI 中注册市场数据 MCP Server。CLI 会发现工具并把 Schema 提供给 Gemini。检查完成前不要授予信任;密钥通过环境变量传入,并且只开放研究需要的只读工具。
按照 Gemini CLI 官方 MCP 教程配置Gemini 接入的关键是函数调用往返:第一轮由模型请求函数,第二轮接收经过校验的结果。绝不能让模型自行编造执行结果。
{
"type": "function",
"name": "get_stock_quote",
"description": "Get a current read-only stock quote",
"parameters": {
"type": "object",
"properties": {
"symbol": {"type": "string"},
"exchange": {"type": "string"}
},
"required": ["symbol"]
}
}Gemini CLI 会在设置中保存 MCP 定义,并可通过 MCP 命令验证连接。接入 QVeris 时,应先查看当前 Server 文档,不要从旧页面复制未经验证的软件包命令。
gemini mcp list 或 /mcp list,确认连接成功。“查找可查询 AAPL 当前行情的只读工具。调用前先显示所选工具和必需参数。返回交易所、币种、交易时段、来源、延迟状态和数据源时间戳。不要执行交易。”
只有价格不足以支撑当前行情回答。数据进入模型上下文前,应先规范化数据源载荷。
| 字段 | Gemini 为什么需要 | 需要避免的问题 |
|---|---|---|
symbol + exchange | 明确标的身份。 | 回答了错误市场的标的。 |
price + currency | 同时保留数值与单位。 | 误把所有价格当成美元。 |
as_of + timezone | 说明数据源观测行情的时间。 | 把旧数据说成当前数据。 |
session | 区分正常交易、盘前、盘后与休市。 | 比较不同时段的不可比价格。 |
source + delay_status | 明确来源与新鲜度。 | 把延迟行情称为实时行情。 |
需要核查交易所、Feed、账户套餐、端点与展示权利。能够调用 API,并不代表返回数据一定实时或允许再分发。Alpaca 官方文档就是数据源说明 Feed 与订阅差异的一个例子。 查看官方实时 Feed 说明
“Gemini 实时股票市场数据”可能对应三类完全不同的工作负载。选错模式,要么浪费数据源调用,要么向模型塞入超出其可靠处理范围的数据。
当用户查询少量股票的当前价格、日内区间、成交量或市场状态时,使用 REST 风格的报价函数。这是 Gemini 对话体验的默认模式,因为工具结果紧凑、可审计,也容易与单次回答对应。
对于开盘、收盘或组合简报,应由调度器先查询批准的股票集合并规范化结果,再交给 Gemini。模型负责总结已完成的批次,而不是悄悄把一个提示词扩展为数百次付费请求。
对于 WebSocket Feed,应由确定性服务维护状态、计算阈值、去重事件,只输出有意义的告警。触发后再调用 Gemini 解释背景或撰写通知。高频数据流中的每次价格变化不应交给 LLM 计算。
可靠接入是有状态的应用工作流,而不是一段巧妙的 Prompt。每个边界都有不同的责任方和失败处理方式。
区分“解释市盈率”和“现在股价是多少”。当前、最新、今天、盘前、盘后、开盘、收盘和市场状态等表达应触发行情函数;历史知识类问题未必需要实时调用。
如果已知市场范围,应使用枚举和边界清晰的描述。Gemini 生成的函数参数仍是不可信输入:调用数据源前要清理代码、限制列表数量、解析市场标识并拒绝异常字段。
后端决定凭据、端点、超时、缓存、重试次数和降级策略,这些决策不应交给自然语言推理。还要记录具体数据源和授权层级。
只把回答所需字段和追踪元数据发给 Gemini。在许可范围内,把原始数据源载荷保存在应用日志中。庞大的成交历史、完整订单簿和冗余字段会增加成本,也更容易掩盖关键缺失。
要求回答展示已解析标的、数值、币种、带时区时间戳、交易时段、来源和延迟标签。如果关键证据缺失,Gemini 应说明无法验证的部分,而不是用模型知识补齐空白。
关联用户请求、Gemini 函数调用、校验后参数、数据源响应 ID、获取时间、最终回答和错误状态;同时隐藏密钥和敏感持仓信息。这条轨迹使运维人员日后可以解释有争议的行情。
| 控制项 | 实现方式 | 需要记录的决策 |
|---|---|---|
| 新鲜度 | 按意图和交易时段设置最大可接受数据年龄。 | 何时允许使用缓存,怎样披露缓存年龄? |
| 延迟 | 设置明确超时,对暂时性故障只进行有限重试。 | Gemini 应等待、返回部分证据,还是明确失败? |
| 成本 | 限制股票数量、去重调用、安全批处理并监控每次对话的调用数。 | 哪些大范围扫描必须先获得确认? |
| 降级 | 规范化备用数据源,同时保留其身份与延迟类别。 | 哪些差异意味着两个 Feed 不能等同? |
| 数据权利 | 按展示、缓存、衍生输出、日志和再分发条款限制使用。 | Gemini 的回答能否对外展示或保存? |
多数问题并不是模型智力不足,而是标的身份歧义、元数据缺失、授权假设错误,或应用接受了异常的工具结果。
函数描述可能没有覆盖当前价格意图,或者应用在必须实时查询时仍接受普通文本回答。应在测试中加入明确触发用例,并由应用层拒绝没有数据支持的当前价格回答。
股票代码并非全球唯一。应解析交易所、国家、资产类型和股类。置信度不足时,把候选项返回 Gemini,让它提出明确的澄清问题。
休市或账户没有实时 Feed 时,数据源仍可能返回有效数值。必须保留字段含义与交易时段,不能因为 HTTP 请求刚刚完成就推断数据是实时的。
把超时、限流、未授权、无效代码和空结果转换为明确的函数错误。最终 Gemini 指令应禁止在当前数据请求失败时用记忆替代。
“AAPL 现在多少钱?”“TSLA 最新价格。”“NVDA 盘后怎么走?”应验证 Gemini 发起工具调用,而不是凭记忆回答。
测试重复代码、缺少交易所的公司名称以及“那只股票”等表达。Gemini 应询问缺失信息,不能猜测。
模拟超时、限流、未授权、停牌和缺少时间戳的结果。回答必须说明限制,不能编造价格。
只有最终回答准确保留数据源返回的股票代码、交易所、价格、币种、时间戳、交易时段、来源与延迟状态,并明确标注假设示例时,才算通过。
用一只高流动性美股完成演示并不等于可以上线。应使用精简、可重复的测试集,覆盖标的身份、市场时间、数据源行为与模型最终表达。
使用 Gemini API 函数调用,由后端控制凭据、执行、缓存和日志。
使用经过检查的 MCP Server,并且只开放工作流需要的行情工具。
把 WebSocket 摄取留在 Gemini 之外。先聚合数据流,只在选定事件或摘要场景调用模型。
不要把 Gemini 本身当作具备授权的行情 Feed。若需要可验证的当前报价,应通过函数调用或 MCP 连接外部数据源,并披露来源和时间戳。
如果你控制应用后端,使用函数调用;如果 Gemini CLI 或其他 MCP 客户端需要交互式发现和调用行情工具,则使用 MCP。
生产系统应在模型之外摄取、过滤和聚合数据流,再向 Gemini 发送有限的快照或事件载荷,而不是每个 Tick。
本指南中的报价工具应保持只读。交易需要独立动作工具、更强认证、确定性风险检查、幂等控制、审计日志和明确的人工确认。
从一个股票代码和一个只读工具开始。确认所选能力、检查参数,并拒绝任何缺少来源或新鲜度元数据的结果。
档案链接有效不代表已获访问权限、字段可用、价格确定或当前调用成功;执行前须检查当前契约。
