QVeris

金融与市场数据

如何为 DeepSeek 接入实时股票市场数据

围绕时间戳、市场覆盖、数据时效和故障处理,为 DeepSeek 构建可靠的实时股票数据工作流。

发布日期:2026年4月18日 · QVeris团队制作

笔记本与移动设备上的股票市场报价
笔记本与移动设备上的股票市场报价
笔记本与移动设备上的股票市场报价
简要答案: DeepSeek 可以决定何时调用行情工具,但工具能力与执行过程必须由你的应用提供。价格的事实来源是外部行情服务,而不是模型记忆。
准备工作

第一次让 DeepSeek 查询行情前需要准备什么

DeepSeek 密钥和行情服务密钥都应保存在服务端。浏览器或移动客户端只能调用你的后端,不能携带密钥直接访问任何服务商。

运行环境与凭据

  • Python 3.10+ 与虚拟环境
  • 通过 DEEPSEEK_API_KEY 保存 DeepSeek API key
  • 具备授权与文档的行情源,或 QVeris 账户
  • 生产环境使用服务端密钥管理器

安装最小客户端

python -m venv .venv
# activate .venv for your shell
python -m pip install openai httpx

下文通过 OpenAI 客户端兼容方式调用 DeepSeek API。httpx 仅用于示例行情适配器;如果所选数据源要求官方 SDK,应以其文档为准。

先明确契约

“实时”是一项策略,不是提示词里的形容词

刚完成的 HTTP 请求仍可能返回延迟行情、前收盘价或旧缓存。写代码前,应先明确每种用户场景允许哪些标的、交易时段、数据源、延迟等级和最大数据年龄。

FRESHNESS

设定数据年龄阈值

比较行情事件时间与获取时间,不能根据请求刚结束就推断数据新鲜。观察列表可以接受短暂缓存,而用户询问“现在”时可能需要更严格的规则。

IDENTITY

不能只解析股票代码

同一代码可能对应不同市场。应解析交易所、资产类别、国家和股类;置信度不足时返回候选项,让 DeepSeek 精确追问。

ENTITLEMENT

保留数据授权标签

服务套餐与交易所授权决定“实时”的实际含义。工具结果应保留服务商、Feed、交易时段和延迟状态,不能让模型自行生成标签。

职责地图

让 DeepSeek 远离密钥与原始数据流

01

意图

DeepSeek 识别当前数据意图并生成结构化参数。

02

防护

后端校验标的、字段、数量限制与用户策略。

03

获取

服务端适配器选择并调用已授权行情源。

04

标准化

适配器返回稳定字段、时间戳与错误状态。

05

解释

DeepSeek 只基于返回证据总结,并说明限制。

连续 Tick 应留在大模型之外

如果应用消费 WebSocket 行情,应由普通流处理服务完成摄取与聚合,再向 DeepSeek 发送有限快照或筛选后的事件。逐 Token 生成不是行情传输机制。

行情封装

返回证据,而不只是一个数字

单独一个价格很难验证。应使用统一封装表达成功、过期、标的歧义、未授权、超时和服务商故障。

必备语义

  • 已解析代码、市场、资产类型和币种
  • 价格含义:成交、买价、卖价、中间价或收盘价
  • 数据源事件时间和应用获取时间
  • 交易时段、来源、Feed 与延迟等级
  • 机器可读状态与错误码
{
  "status": "ok",
  "instrument": {"symbol": "EXAMPLE", "exchange": "VENUE"},
  "quote": {"value": "provider_value", "field": "last_trade",
            "currency": "USD"},
  "freshness": {
    "provider_time": "ISO-8601",
    "retrieved_at": "ISO-8601",
    "session": "regular",
    "delay": "provider_label"
  },
  "source": {"provider": "provider_name",
             "feed": "entitled_feed"}
}

以上仅为示意 Schema;字段名称与含义必须按所选服务商的官方文档映射。

Python 实现

新鲜度不可妥协时,强制调用工具

DeepSeek 官方 API 支持函数工具。模型返回函数参数,由你的代码执行函数并把结果送回;官方文档明确指出,具体函数并不是由模型自行执行。

import json
from openai import OpenAI

client = OpenAI(api_key=DEEPSEEK_API_KEY,
                base_url="https://api.deepseek.com")

tools = [{
  "type": "function",
  "function": {
    "name": "get_current_stock_quote",
    "description": "Get a current, read-only stock quote.",
    "parameters": {
      "type": "object",
      "properties": {
        "symbol": {"type": "string"},
        "exchange": {"type": "string"}
      },
      "required": ["symbol"],
      "additionalProperties": False
    }
  }
}]

messages = [
  {"role": "system", "content":
   "For current market facts, use the quote tool. Never substitute memory. "
   "State source, provider timestamp, session, and delay status."},
  {"role": "user", "content": user_question}
]

first = client.chat.completions.create(
  model="deepseek-v4-pro",
  messages=messages, tools=tools,
  tool_choice="required"
).choices[0].message

args = json.loads(first.tool_calls[0].function.arguments)
quote = execute_validated_quote(args)  # your server-side code
messages += [first, {
  "role": "tool",
  "tool_call_id": first.tool_calls[0].id,
  "content": json.dumps(quote)
}]

answer = client.chat.completions.create(
  model="deepseek-v4-pro", messages=messages, tools=tools
).choices[0].message.content

校验模型生成的参数

把参数视为不可信输入:解析 JSON、拒绝未知字段、统一大小写、限制列表长度、处理交易所歧义,并在访问服务商前执行授权。官方 API 参考也提醒,生成参数可能无效或包含虚构字段。

有选择地使用 auto

同一助手同时处理稳定知识和当前数据时,可以使用 auto。但应用层应识别强实时意图并强制调用工具。

+
替换占位函数

带参数校验与新鲜度检查的行情适配器

下面的端点和返回字段刻意保持通用。请按实际选择的数据源官方文档与授权范围完成映射,不要直接照抄字段名。

import os, re
from datetime import datetime, timezone
import httpx

SYMBOL = re.compile(r"^[A-Z][A-Z0-9.-]{0,14}$")

def execute_validated_quote(arguments):
    symbol = str(arguments.get("symbol", "")).strip().upper()
    exchange = str(arguments.get("exchange", "")).strip().upper() or None
    if not SYMBOL.fullmatch(symbol):
        return {"status": "error", "code": "invalid_symbol"}

    response = httpx.get(
        os.environ["MARKET_DATA_URL"],
        params={"symbol": symbol, "exchange": exchange},
        headers={"Authorization": "Bearer " + os.environ["MARKET_DATA_API_KEY"]},
        timeout=4.0
    )
    response.raise_for_status()
    raw = response.json()

    provider_time = datetime.fromisoformat(
        raw["timestamp"].replace("Z", "+00:00")
    )
    retrieved_at = datetime.now(timezone.utc)
    age_seconds = (retrieved_at - provider_time).total_seconds()
    if age_seconds < 0 or age_seconds > MAX_QUOTE_AGE_SECONDS:
        return {"status": "error", "code": "stale_quote",
                "provider_time": provider_time.isoformat()}

    return {
        "status": "ok",
        "instrument": {"symbol": raw["symbol"],
                       "exchange": raw["exchange"]},
        "quote": {"value": raw["price"],
                  "field": raw["price_type"],
                  "currency": raw["currency"]},
        "freshness": {"provider_time": provider_time.isoformat(),
                      "retrieved_at": retrieved_at.isoformat(),
                      "session": raw["session"],
                      "delay": raw["delay_label"]},
        "source": {"provider": raw["provider"],
                   "feed": raw["feed"]}
    }

示例:有数据依据的成功回答

用户询问当前行情,DeepSeek 请求函数,后端返回 ok 封装。最终回答展示已解析代码与交易所、价格含义、币种、数据源时间、交易时段、来源和延迟标签。

示例:诚实失败

如果适配器返回 stale_quote、not_entitled 或 timeout,DeepSeek 应说明当前价格无法验证,并保留可用时间信息,不能输出记忆中的价格。

阅读 DeepSeek 官方 Tool Calls 指南 · 查看当前 Chat Completion Schema

QVeris 模式

先发现能力,再决定是否绑定服务商

当 DeepSeek 应用不只需要一个固定端点时,可把 QVeris 作为能力层:先发现行情能力,检查输入结构和服务商元数据,再由后端调用。DeepSeek 只看到一个边界清晰的应用函数,密钥与服务商选择仍留在服务端。

DISCOVER

按结果搜索

描述所需结果,例如带来源与时间戳的当前行情,而不是预先假定服务商。

INSPECT

执行前检查

确认 Schema、服务商说明、预期输出、成本信息和新鲜度语义。

CALL

从后端执行

校验参数、调用已检查的能力、标准化结果并保留追踪 ID。

生产控制

为复杂市场状态而设计

+
新鲜度预算

把延迟、缓存与成本作为一个整体决策

实时股票市场数据没有通用缓存时长。应按路由定义最大数据年龄,再确认数据授权是否能够满足。下表是策略示例,不是交易所或服务商保证。

使用场景 获取模式 需要记录的权衡
单次当前行情 请求新鲜快照,仅在声明的最大数据年龄内缓存。 服务商延迟,以及每次缓存未命中的查询成本。
多标的观察列表 优先使用有文档的批量或快照端点,并限制标的数量。 降低调用开销,但最旧条目可能决定整体新鲜度。
持续监控 在 DeepSeek 外摄取 WebSocket 事件,只总结筛选后的事件。 流处理基础设施成本,与更少模型调用及有限上下文之间的权衡。
知识解释问题 除非答案依赖当前事实,否则不调用实时工具。 在不把稳定知识伪装成实时数据的前提下降低成本和延迟。
风险 确定性控制 DeepSeek 应如何表达
市场休市 返回市场状态,并区分最近成交与前收盘。 说明交易时段和数据时间。
缓存过期 将数据源时间与路由最大年龄比较。 说明当前行情无法验证。
代码歧义 解析市场与身份;返回候选项。 提出一个明确追问。
未获授权 暴露服务商错误,不静默降级。 说明 Feed 无法满足新鲜度要求。
超时或限流 使用有限重试、熔断与明确错误。 诚实失败,不能用记忆替代。
验收测试集

不仅测试 API 返回,还要测试是否正确决定调用

必须调用

  • “AAPL 现在的成交价是多少?”
  • 最新行情、今日涨跌、市场状态
  • 盘前与盘后问题
  • 中英文等价实时意图

必须拒绝或追问

  • 跨交易所重复代码
  • 缺少数据源时间戳
  • 过期、不完整或格式异常的行情封装
  • 超时、限流和授权缺失

发布规则

只有回答完整保留标的身份、价格含义、币种、事件时间、交易时段、来源和延迟状态,并且不会用模型知识补齐缺失实时数据时,才算通过。

常见问题

DeepSeek 实时股票市场数据常见问题

DeepSeek 自带实时股票市场数据吗?

不应把 DeepSeek 当作行情数据源。它的工具调用 API 可以请求外部行情函数,再由你的应用执行、校验并把结果返回给模型。

如何防止 DeepSeek 用旧股价回答?

对当前价格意图强制调用行情工具,要求数据源时间和获取时间,拒绝超出新鲜度策略的结果,并在工具失败时明确说明。

每个市场问题都要调用行情工具吗?

不需要。稳定概念通常不依赖实时数据;当前价格、最新、今日、市场状态、盘前和盘后请求应走实时数据链路。

同一个工具可以下单吗?

行情查询应保持只读。下单需要独立且严格授权的动作工具,以及确定性风控、幂等控制、审计日志和明确确认。

下一步

先验证一条行情,再构建市场 Copilot

先从一只股票的只读查询开始。检查能力、记录来源与时间戳,再主动测试过期数据和服务商故障。

档案链接有效不代表已获访问权限、字段可用、价格确定或当前调用成功;执行前须检查当前契约。

如何为 DeepSeek 接入实时股票市场数据 | QVeris Guides