运行环境与凭据
- Python 3.10+ 与虚拟环境
-
通过
DEEPSEEK_API_KEY保存 DeepSeek API key - 具备授权与文档的行情源,或 QVeris 账户
- 生产环境使用服务端密钥管理器
金融与市场数据
围绕时间戳、市场覆盖、数据时效和故障处理,为 DeepSeek 构建可靠的实时股票数据工作流。
发布日期:2026年4月18日 · QVeris团队制作


DeepSeek 密钥和行情服务密钥都应保存在服务端。浏览器或移动客户端只能调用你的后端,不能携带密钥直接访问任何服务商。
DEEPSEEK_API_KEY 保存 DeepSeek API
key
python -m venv .venv
# activate .venv for your shell
python -m pip install openai httpx
下文通过 OpenAI 客户端兼容方式调用 DeepSeek API。httpx
仅用于示例行情适配器;如果所选数据源要求官方
SDK,应以其文档为准。
刚完成的 HTTP 请求仍可能返回延迟行情、前收盘价或旧缓存。写代码前,应先明确每种用户场景允许哪些标的、交易时段、数据源、延迟等级和最大数据年龄。
比较行情事件时间与获取时间,不能根据请求刚结束就推断数据新鲜。观察列表可以接受短暂缓存,而用户询问“现在”时可能需要更严格的规则。
同一代码可能对应不同市场。应解析交易所、资产类别、国家和股类;置信度不足时返回候选项,让 DeepSeek 精确追问。
服务套餐与交易所授权决定“实时”的实际含义。工具结果应保留服务商、Feed、交易时段和延迟状态,不能让模型自行生成标签。
DeepSeek 识别当前数据意图并生成结构化参数。
后端校验标的、字段、数量限制与用户策略。
服务端适配器选择并调用已授权行情源。
适配器返回稳定字段、时间戳与错误状态。
DeepSeek 只基于返回证据总结,并说明限制。
如果应用消费 WebSocket 行情,应由普通流处理服务完成摄取与聚合,再向 DeepSeek 发送有限快照或筛选后的事件。逐 Token 生成不是行情传输机制。
单独一个价格很难验证。应使用统一封装表达成功、过期、标的歧义、未授权、超时和服务商故障。
{
"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;字段名称与含义必须按所选服务商的官方文档映射。
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。但应用层应识别强实时意图并强制调用工具。
下面的端点和返回字段刻意保持通用。请按实际选择的数据源官方文档与授权范围完成映射,不要直接照抄字段名。
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 应用不只需要一个固定端点时,可把 QVeris 作为能力层:先发现行情能力,检查输入结构和服务商元数据,再由后端调用。DeepSeek 只看到一个边界清晰的应用函数,密钥与服务商选择仍留在服务端。
描述所需结果,例如带来源与时间戳的当前行情,而不是预先假定服务商。
确认 Schema、服务商说明、预期输出、成本信息和新鲜度语义。
校验参数、调用已检查的能力、标准化结果并保留追踪 ID。
实时股票市场数据没有通用缓存时长。应按路由定义最大数据年龄,再确认数据授权是否能够满足。下表是策略示例,不是交易所或服务商保证。
| 使用场景 | 获取模式 | 需要记录的权衡 |
|---|---|---|
| 单次当前行情 | 请求新鲜快照,仅在声明的最大数据年龄内缓存。 | 服务商延迟,以及每次缓存未命中的查询成本。 |
| 多标的观察列表 | 优先使用有文档的批量或快照端点,并限制标的数量。 | 降低调用开销,但最旧条目可能决定整体新鲜度。 |
| 持续监控 | 在 DeepSeek 外摄取 WebSocket 事件,只总结筛选后的事件。 | 流处理基础设施成本,与更少模型调用及有限上下文之间的权衡。 |
| 知识解释问题 | 除非答案依赖当前事实,否则不调用实时工具。 | 在不把稳定知识伪装成实时数据的前提下降低成本和延迟。 |
| 风险 | 确定性控制 | DeepSeek 应如何表达 |
|---|---|---|
| 市场休市 | 返回市场状态,并区分最近成交与前收盘。 | 说明交易时段和数据时间。 |
| 缓存过期 | 将数据源时间与路由最大年龄比较。 | 说明当前行情无法验证。 |
| 代码歧义 | 解析市场与身份;返回候选项。 | 提出一个明确追问。 |
| 未获授权 | 暴露服务商错误,不静默降级。 | 说明 Feed 无法满足新鲜度要求。 |
| 超时或限流 | 使用有限重试、熔断与明确错误。 | 诚实失败,不能用记忆替代。 |
只有回答完整保留标的身份、价格含义、币种、事件时间、交易时段、来源和延迟状态,并且不会用模型知识补齐缺失实时数据时,才算通过。
不应把 DeepSeek 当作行情数据源。它的工具调用 API 可以请求外部行情函数,再由你的应用执行、校验并把结果返回给模型。
对当前价格意图强制调用行情工具,要求数据源时间和获取时间,拒绝超出新鲜度策略的结果,并在工具失败时明确说明。
不需要。稳定概念通常不依赖实时数据;当前价格、最新、今日、市场状态、盘前和盘后请求应走实时数据链路。
行情查询应保持只读。下单需要独立且严格授权的动作工具,以及确定性风控、幂等控制、审计日志和明确确认。
档案链接有效不代表已获访问权限、字段可用、价格确定或当前调用成功;执行前须检查当前契约。
