4d4d38fe0f
迁自 park-desktop/backend/app:config(数据目录→serverdata/park)/storage/sim_engine/ mqtt/event_bus + 精简 routers(health/settings/config/dashboard/park/companies/display/ events) + app.py 子应用(lifespan 起 MQTT hub+tick 线程, include_router prefix=/park)。 dispatcher.py 增 ROUTE_PARK_PREFIX + _prefix_app,与 app.training(/api)、app.main 分流。 pyproject 增 paho-mqtt(MQTT 必需)。AI/知识库/语音/视觉重模块延后全量迁入。
263 lines
16 KiB
Python
263 lines
16 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""园区数据引擎(后端)—— 真实数据 + 测算演示
|
||
数据来源(用户指定口径):
|
||
· 《昆明市大学生创业园运行情况统计表(2026年7月).xls》(官方月报)
|
||
· 《昆明市创业园宣传册.pdf》
|
||
测算口径(用户确认):
|
||
· TOKEN:真实业务锚点月均 200 亿 tokens → 日均 ≈ 6.67 亿(200亿/30),
|
||
实时速率 ≈ 7,700 t/s(日均/86400s),近30日累计 = 200 亿
|
||
· 工具调用:按平均每次调用消耗约 2 万 tokens 折算(今日 ≈ 3.3 万次)
|
||
其余统计指标为真实静态值;TOKEN/工具仅做轻微演示波动
|
||
"""
|
||
|
||
import random
|
||
import threading
|
||
import time
|
||
|
||
# ---------- 真实锚点(仅来自 xls 统计表 + 附件1 省级材料 + 宣传册) ----------
|
||
REAL = {
|
||
"as_of": "2026-07",
|
||
"token_monthly_yi": 200, # 月均消耗 200 亿 tokens(AI 平台业务锚点,非政府统计口径)
|
||
"token_daily_wan": 66666.7, # 日均 6.67 亿 tokens(200亿/30 ≈ 66666.7 万)
|
||
"token_rate": 7700, # 实时 t/s(6.67e8 / 86400 ≈ 7,716)
|
||
"tools_per_call_tokens": 150000, # 平均每次工具调用消耗 tokens(真实测算:12.5M输入 ÷ 81步 ≈ 15.4万)
|
||
"occupied": 38, # 实际入驻企业数(官方口径:《2026年7月运行情况统计表》38 家)
|
||
"capacity": 49, # 园区可容纳企业个数(统计表)
|
||
"invested": 560, # 开园以来累计投入运营资金(万元,统计表)
|
||
"jobs": 213, # 带动就业人数(统计表,当年累计口径)
|
||
"revenue_total": 252.15, # 生产经营总额(万元,统计表,当年累计口径)
|
||
"revenue_tax": 1.03, # 上缴税利总额(万元,统计表,当年累计口径)
|
||
"incubated_total": 181, # 累计孵化企业(附件1 省级绩效累计口径,截至2026年5月)
|
||
"in_incubation": 31, # 当前实有在孵创业实体(附件1)
|
||
"graduated": 149, # 累计成功孵化出园企业(统计表,开园以来累计)
|
||
"patents": 171, # 入驻团队发明专利(附件1 累计口径)
|
||
"jobs_total": 1529, # 累计带动就业(附件1 省级绩效累计口径)
|
||
"revenue_total_cum": 21911.14, # 入驻团队累计经营收入(万元,附件1 累计口径 ≈ 2.19 亿元)
|
||
"revenue_tax_cum": 426.2, # 入驻团队累计税收(万元,附件1 累计口径)
|
||
"mentors": 50, # 创业指导专家团队(附件1)
|
||
"success_rate": 95.91, # 近3年入孵实体孵化成功率(%)(附件1)
|
||
"area": 3000, # 园区建筑面积(㎡,统计表+宣传册)
|
||
"founded": 2009, # 成立年份(宣传册)
|
||
"province_level": 2012, # 获评省级创业园年份(宣传册)
|
||
"address": "昆明市民航路229号(人力资源中心1-2楼)",
|
||
"phone": "18087174891",
|
||
"email": "714066050@qq.com",
|
||
}
|
||
|
||
# 入驻企业名录(《入驻企业信息表》39 家全称,与在园数统一口径)
|
||
COMPANIES = [
|
||
"云南派音人工智能科技有限公司", "米勒克尔蓝宝石珠宝产业化(项目)", "中泰研学合作(项目)",
|
||
"云南宸中低空经济有限公司", "昆明智海银高文化科技有限公司", "人工智能机器人大模型训练(项目)",
|
||
"云南廷秀文旅康养服务(项目)", "瀚颖AI+教育信息咨询(项目)", "云南大学AI+联合创业服务平台(项目)",
|
||
"仰光客厅(项目)", "云南上古绝学文化发展有限公司", "千楣之路(项目)",
|
||
"中越生物医疗(项目)", "中越文旅交流(项目)", "绿态环保科技项目",
|
||
"联翼航空技术低空经济应用国际化拓展(项目)", "酷享野农AI农业(项目)", "滇缅国际设计(项目)",
|
||
"昆明舒诺生物科技有限责任公司", "达岸教育管理(云南)有限公司", "昆明滇油石化有限责任公司",
|
||
"花仙子园艺肥料(云南)有限公司", "Facebook越南市场普洱茶与建水紫陶壶跨境电商(项目)",
|
||
"研X——同行者网络(项目)", "鬼才明AI创意工作室(项目)", "朵哈·玫瑰特色产业链(项目)",
|
||
"昆明云韵体育有限责任公司", "昆明舒护安养老服务有限责任公司",
|
||
"南菌优培—食用菌专用生物制剂创新与高原特色野生菌高值化全链开发(项目)",
|
||
"五华区丽裳文化艺术工作室", "云南星瑞航空(项目)", "综合性云南直播私域服务平台",
|
||
"昆明屿澈电子商务有限公司", "中外青少年研学(项目)", "星杭商务信息咨询昆明有限责任公司",
|
||
"蓝智科技(项目)", "云品出滇·纸享万家(项目)",
|
||
"云迹轻旅—昆明本土一站式轻量化文旅服务工作室(项目)", "启元人工智能科技(项目)",
|
||
]
|
||
|
||
# 宣传册四大孵化区域
|
||
ZONES = [
|
||
{"name": "OPC创业空间", "desc": "AI 技术支撑 · 数字经济/AI应用/软件开发/文创设计/电商直播等轻资产领域", "period": "拎包入驻 · 最长2年"},
|
||
{"name": "创业苗圃区", "desc": "创意阶段 · 未注册企业团队 · 开放式共享工位", "period": "最长2年"},
|
||
{"name": "孵化加速区", "desc": "已工商注册初创企业 · 独立办公空间", "period": "基础2年 · 可延1年(≤3年)"},
|
||
{"name": "国际创客区", "desc": "归国留学生 · 外籍留学生 · 国际化配套服务", "period": "参照加速区"},
|
||
]
|
||
|
||
# 园区企业行业分布(按《入驻企业信息表》39 家企业简介分类统计)
|
||
INDUSTRY_MIX = [
|
||
{"name": "人工智能", "value": 7},
|
||
{"name": "跨境电商", "value": 5},
|
||
{"name": "教育培训", "value": 4},
|
||
{"name": "文旅康养", "value": 4},
|
||
{"name": "文化创意", "value": 4},
|
||
{"name": "生物医药", "value": 4},
|
||
{"name": "低空经济", "value": 3},
|
||
{"name": "现代农业", "value": 3},
|
||
{"name": "绿色环保", "value": 2},
|
||
{"name": "企业服务", "value": 2},
|
||
{"name": "新材料", "value": 1},
|
||
]
|
||
|
||
# 园区实时动态(真实事件:园区官方公示 + 宣传册活动 + 互联网公开信息,最新在前)
|
||
FEED = [
|
||
{"id": 24, "icon": "dna", "text": "园内企业「昆明舒诺生物科技」完成GEO服务体系建设(生成式引擎优化,聚焦宠物营养品牌数字化)", "time": "2026-08"},
|
||
{"id": 1, "icon": "activity", "text": "2026年7月运行情况统计表填报完成:累计投入运营资金560万元、带动就业213人", "time": "2026-07-31"},
|
||
{"id": 2, "icon": "radio", "text": "2026年第三期入驻创业企业(项目)评审结果在昆明市人社局官网公示", "time": "2026-07-02"},
|
||
{"id": 3, "icon": "graduation", "text": "云南师范大学就业创业实践基地落地园区 · 云南旅游职业学院开展就业创业交流", "time": "2026-06-03"},
|
||
{"id": 23, "icon": "radio", "text": "「PineSound」完成 ICP 备案(滇ICP备2026008517号)与公安备案,注册地址昆明市民航路301-307号", "time": "2026"},
|
||
{"id": 4, "icon": "rocket", "text": "\"滇水逐梦·雨林创航\"昆明·西双版纳创业路演PK赛成功举办", "time": "2026-05-20"},
|
||
{"id": 5, "icon": "flag", "text": "昆明市青年企业家协会创新创业基地在园区揭牌", "time": "2026-05-13"},
|
||
{"id": 6, "icon": "users", "text": "\"聚力赋能·共创未来\"高校创新创业交流暨项目路演活动圆满举行", "time": "2026-05-08"},
|
||
{"id": 7, "icon": "trophy", "text": "\"创赢未来\"2026创业大赛昆明选拔赛暨马兰花创业培训讲师大赛举行(13个项目参赛)", "time": "2026-04-22"},
|
||
{"id": 8, "icon": "broadcast", "text": "2026年第二期创业企业(项目)入驻招募公告发布(官网 www.kmyc.gov.cn)", "time": "2026-04-15"},
|
||
{"id": 21, "icon": "sparkles", "text": "「PineSound」AI驱动音频管理平台上线 pinesound.cn:智能配乐与音效生成,集成100W+音效库、50W+配乐库,全球版权授权(官网)", "time": "2026"},
|
||
{"id": 22, "icon": "medal", "text": "PineSound发布企业标准 Q/YNPY 001-2026《数字内容创作 配乐通用分类标准》", "time": "2026"},
|
||
{"id": 9, "icon": "award", "text": "2026年第一期入驻评审结果在昆明市人社局官网公示(23个优质项目正式入驻)", "time": "2026-03-27"},
|
||
{"id": 10, "icon": "users", "text": "2026年第一期招募集中评审完成:38个申请,23个优质项目正式入驻", "time": "2026-03-24"},
|
||
{"id": 19, "icon": "sparkles", "text": "云南派音人工智能科技专注多模态音频技术研发:自研Pine系列模型覆盖音频识别、向量嵌入、音效生成、配乐创作", "time": "2026-04"},
|
||
{"id": 20, "icon": "bolt", "text": "「PineSound」2026年4月注册成立,获北京投资支持并吸纳就业4人,入驻加速区(入驻企业信息表)", "time": "2026-04"},
|
||
{"id": 11, "icon": "cpu", "text": "云南首个人工智能OPC创新人才基地落地昆明,填补省内个体AI创业培育空白(公开报道)", "time": "2026-03-23"},
|
||
{"id": 12, "icon": "medal", "text": "第九届\"春城创业荟\"创业创新大赛圆满闭幕,获奖项目名单公布", "time": "2025-09-30"},
|
||
{"id": 13, "icon": "trophy", "text": "\"春城创业荟\"初赛落幕,147个项目晋级复赛", "time": "2025-04-28"},
|
||
{"id": 14, "icon": "building", "text": "园内企业「花仙子园艺肥料(云南)」成立,注册资本118万元(公开报道)", "time": "2025-04-28"},
|
||
{"id": 15, "icon": "radio", "text": "2025年入园项目评审结果公示(昆明市人社局官网)", "time": "2025-04-22"},
|
||
{"id": 16, "icon": "atom", "text": "研X平台入选\"创客中国\"项目库(一站式研究生学术成长平台)", "time": "2025-01"},
|
||
{"id": 17, "icon": "leaf", "text": "行业动态:园内「朵哈·玫瑰」原料产地昆明八街食用玫瑰行情上涨,玫瑰经济走强", "time": "2025-01"},
|
||
{"id": 18, "icon": "heart", "text": "行业动态:「千楣之路」主营檀娜卡——泰国天然护肤品牌Thanaka正式进入中国市场", "time": "2025-01"},
|
||
]
|
||
|
||
|
||
def _day_secs():
|
||
"""当日零点起已过秒数(时钟驱动,保证数值单向持续增长、重启连续)"""
|
||
now = time.time()
|
||
lt = time.localtime(now)
|
||
day_start = time.mktime((lt.tm_year, lt.tm_mon, lt.tm_mday, 0, 0, 0, 0, 0, -1))
|
||
return max(0.0, now - day_start)
|
||
|
||
|
||
def _today_values(prev_noise=None):
|
||
"""按真实速率推算当日累计值(单向增长 + 工具调用波动):
|
||
平台实时速率 = 单会话 157 tok/s × 49 路并发 ≈ 7,700 t/s
|
||
今日 TOKEN(万)= 秒数 × 7,700 / 10000 = 秒数 × 0.77
|
||
今日工具调用 = 今日 TOKEN / 15万 tokens 每次(真实基线)
|
||
+ 随机游走噪声(±10,波浪式波动,不单调)
|
||
"""
|
||
secs = _day_secs()
|
||
today_wan = round(secs * 0.77) # 万 tokens
|
||
base_tools = secs * 0.77 * 10000 / REAL["tools_per_call_tokens"] # 真实基线(浮点)
|
||
if prev_noise is None:
|
||
noise = 0.0
|
||
else:
|
||
noise = max(-10.0, min(10.0, prev_noise + (random.random() - 0.5) * 6.0))
|
||
today_tools = max(0, round(base_tools + noise)) # 次
|
||
return today_wan, today_tools, noise
|
||
|
||
|
||
def _make_series(base, noise, n=30):
|
||
"""生成围绕日均锚点的演示曲线(单位:万 tokens),尾点=今日实时值"""
|
||
out = []
|
||
for _ in range(n - 1):
|
||
v = base + (random.random() - 0.5) * noise
|
||
out.append(round(max(1, v), 1))
|
||
out.append(round(base, 1))
|
||
return out
|
||
|
||
|
||
def _live_values(prev=None):
|
||
"""TOKEN 面板实时运行指标(围绕真实基准动态波动,会话持续推进)"""
|
||
r = random.random
|
||
steps = (prev or {}).get("steps", 81)
|
||
steps += 1 if r() < 0.3 else 0
|
||
return {
|
||
"firstToken": round(1.3 + (r() - 0.5) * 0.2, 2), # 首 token 平均 1.3s 基准 ±0.1
|
||
"throughput": round(157 + (r() - 0.5) * 14), # 吞吐 157 tok/s 基准 ±7
|
||
"cacheHit": round(98 + (r() - 0.5) * 1.2, 1), # 缓存命中 98% 基准 ±0.6
|
||
"inputM": round((prev or {}).get("inputM", 12.5) + 0.004 + r() * 0.008, 2), # 会话输入持续推进
|
||
"outputM": round((prev or {}).get("outputM", 2.0) + 0.001 + r() * 0.002, 2), # 会话输出持续推进
|
||
"rounds": max(2, steps // 40), # 每 40 步一轮
|
||
"steps": steps, # 步数持续增长
|
||
}
|
||
|
||
|
||
def init_snapshot():
|
||
today_wan, today_tools, noise = _today_values()
|
||
return {
|
||
"as_of": REAL["as_of"],
|
||
"_toolsNoise": noise,
|
||
"live": _live_values(),
|
||
"token": {
|
||
"today": today_wan, # 万 tokens(当日累计,实时增长)
|
||
"total": REAL["token_monthly_yi"] * 10000 + today_wan, # 万 tokens(近30日 = 200亿 + 今日增量)
|
||
"rate": REAL["token_rate"], # t/s(157 tok/s × 49 并发 ≈ 7,700)
|
||
"series": _make_series(REAL["token_daily_wan"], REAL["token_daily_wan"] * 0.16),
|
||
},
|
||
"tools": {
|
||
"today": today_tools, # 次(随 TOKEN 实时联动)
|
||
"total": round(REAL["token_monthly_yi"] * 100000000 / REAL["tools_per_call_tokens"]) + today_tools, # 次
|
||
"success": 98.5, # 成功率(演示)
|
||
"nodes": 12, # AI 服务节点(演示)
|
||
},
|
||
"projects": {
|
||
"inPark": REAL["occupied"], # 实际入驻 38 家(2026年7月统计表官方口径)
|
||
"capacity": REAL["capacity"], # 可容纳 49 个
|
||
"invested": REAL["invested"], # 累计投入 560 万元
|
||
},
|
||
"jobs": {"total": REAL["jobs"]}, # 带动就业 213 人(当年累计口径)
|
||
"revenue": {"total": REAL["revenue_total"], "tax": REAL["revenue_tax"]}, # 万元(当年累计口径)
|
||
"cumulative": { # 省级绩效累计口径(附件1,截至2026年5月)
|
||
"incubated": REAL["incubated_total"], # 累计孵化企业 181 家
|
||
"inIncubation": REAL["in_incubation"], # 当前实有在孵 31 家
|
||
"graduated": REAL["graduated"], # 累计成功出园 149 家
|
||
"patents": REAL["patents"], # 发明专利 171 项
|
||
"jobs": REAL["jobs_total"], # 累计带动就业 1,529 人
|
||
"revenue": REAL["revenue_total_cum"], # 累计经营收入 21,911.14 万元
|
||
"tax": REAL["revenue_tax_cum"], # 累计税收 426.2 万元
|
||
"mentors": REAL["mentors"], # 创业指导专家团队 50 人
|
||
"successRate": REAL["success_rate"], # 近3年孵化成功率 95.91%
|
||
},
|
||
"park": {
|
||
"area": REAL["area"],
|
||
"founded": REAL["founded"],
|
||
"provinceLevel": REAL["province_level"],
|
||
"address": REAL["address"],
|
||
"phone": REAL["phone"],
|
||
"email": REAL["email"],
|
||
},
|
||
"zones": ZONES,
|
||
"companies": COMPANIES,
|
||
"industryMix": INDUSTRY_MIX,
|
||
"feed": FEED,
|
||
}
|
||
|
||
|
||
def next_snapshot(s):
|
||
"""时钟驱动:按真实速率重算当日累计(TOKEN 单向增长,工具调用波浪波动),其余真实静态"""
|
||
today_wan, today_tools, noise = _today_values(s.get("_toolsNoise"))
|
||
token = {
|
||
"today": today_wan,
|
||
"total": REAL["token_monthly_yi"] * 10000 + today_wan,
|
||
"rate": REAL["token_rate"],
|
||
"series": s["token"]["series"][:-1] + [today_wan],
|
||
}
|
||
tools = {
|
||
"today": today_tools,
|
||
"total": round(REAL["token_monthly_yi"] * 100000000 / REAL["tools_per_call_tokens"]) + today_tools,
|
||
"success": 98.5,
|
||
"nodes": 12,
|
||
}
|
||
return {
|
||
**s,
|
||
"_toolsNoise": noise,
|
||
"live": _live_values(s.get("live")),
|
||
"token": token,
|
||
"tools": tools,
|
||
}
|
||
|
||
|
||
class SimEngine:
|
||
"""带锁的快照引擎:单例供 API 与 MQTT tick 共用"""
|
||
|
||
def __init__(self):
|
||
self._lock = threading.RLock()
|
||
self._snap = init_snapshot()
|
||
|
||
def snapshot(self):
|
||
with self._lock:
|
||
return dict(self._snap)
|
||
|
||
def tick(self):
|
||
with self._lock:
|
||
self._snap = next_snapshot(self._snap)
|
||
return dict(self._snap)
|
||
|
||
|
||
sim_engine = SimEngine()
|