feat: 添加后端部署和API基本检索的Docker Compose配置
- 引入新的`docker-compose.yml`文件,便于后端和MQTT代理(EMQX)的部署。 - 更新多个组件中的API基本检索,使用函数进行动态解析。 - 加强了多个组件中API调用的错误处理和日志记录。 - 优化了AI聊天面板离线场景的回退响应。 - 更新DataScreen和MediaScreen组件中的数据显示和统计,以反映准确的指标。 - 重构MQTT连接逻辑,以支持动态凭证和客户端ID。
This commit is contained in:
@@ -52,37 +52,37 @@ PAGES = {
|
||||
RULES = [
|
||||
{
|
||||
"match": ["入驻", "申请", "入孵", "入园", "如何加入", "怎样加入"],
|
||||
"reply": "入驻流程如下:\n\n1. 提交入驻申请(线上表单或到园区服务中心现场办理)\n2. 项目评审(园区组织专家对项目可行性、团队背景进行评估)\n3. 签订入驻协议,办理入驻手续\n4. 安排办公场地,对接创业导师与孵化服务\n\n目前园区在园项目 158 家,累计孵化企业 208 余家。如需协助,可直接联系园区服务中心。",
|
||||
"reply": "入驻流程(按《入驻管理规程》,每年原则上两次):\n\n1. 提出申请:提交《入驻申请表》《创业计划书》、身份证(外籍提供护照签证)、学历证明、营业执照、资质专利证书等材料\n2. 项目初审:服务机构初审,材料不齐一次性告知补全\n3. 入驻评审:从《昆明市就业创业导师库》抽取 3 名评审专家,路演答辩,量化打分 100 分制,80 分及以上通过\n4. 评审公示:报主管部门备案后在昆明市人社局官网公示\n5. 签署协议:签订《入驻孵化协议》,分配场地/工位,正式入驻\n\n按官方统计(2026年7月)园区实际入驻企业 38 家。咨询电话:18087174891。",
|
||||
"tools": [{"type": "show_card", "params": {"card": "overview"}}],
|
||||
},
|
||||
{
|
||||
"match": ["政策", "补贴", "优惠", "扶持", "减免", "奖励", "资助"],
|
||||
"reply": "园区政策服务覆盖「七位一体」中的政策维度:\n\n· 场地租金减免:符合条件的大学生创业项目可享受场地优惠\n· 创业补贴:协助对接省、市两级创业补贴与一次性创业资助\n· 税费优惠:对接小微企业所得税减免、增值税优惠等政策\n· 项目申报:指导高企认定(目前在园高新技术企业 32 家)、科技型中小企业备案\n\n更多政策细节可咨询园区政策服务窗口。",
|
||||
"reply": "园区政策服务覆盖「七位一体」中的政策维度:\n\n· 场地租金减免:符合条件的大学生创业项目可享受场地优惠\n· 创业补贴:协助对接省、市两级创业补贴与一次性创业资助\n· 税费优惠:对接小微企业所得税减免、增值税优惠等政策\n· 项目申报:协助高新技术企业认定、科技型中小企业备案申报辅导\n\n更多政策细节可咨询园区政策服务窗口(电话:18087174891)。",
|
||||
"tools": [],
|
||||
},
|
||||
{
|
||||
"match": ["场地", "办公室", "工位", "租金", "收费", "面积", "多少钱", "价格"],
|
||||
"reply": "园区总建筑面积 1.2 万㎡,按功能划分为三个区域:\n\n· 加速区(A1–A12):成长型项目办公室,共 11 间独立办公室 + 1 间园区管理办公室\n· 国际区(I1–I7):面向国际合作的办公空间(7 间)\n· 成长区(G1–G8):初创团队成长空间(8 间)\n\n租金按创业项目阶段与政策给予差异化优惠,具体可到园区服务中心咨询。",
|
||||
"reply": "园区建筑面积约 3000 ㎡(官方统计口径),可容纳约 50 个创业团队,按发展阶段设置四大孵化区域(《宣传册》):\n\n· OPC创业空间:AI技术支撑、数字经济/AI应用/软件开发/文创设计/电商直播等轻资产领域,拎包入驻,最长 2 年\n· 创业苗圃区:创意阶段未注册团队,开放式共享工位,最长 2 年\n· 孵化加速区:已注册初创企业,独立办公空间,基础 2 年可延 1 年(累计≤3年)\n· 国际创客区:归国/外籍留学生,个性化办公空间,参照加速区\n\n办公场地免费提供(含桌椅、文件柜、高速网络等基础配套),水电网络全配套、拎包入驻。",
|
||||
"tools": [{"type": "show_card", "params": {"card": "zones"}}],
|
||||
},
|
||||
{
|
||||
"match": ["企业", "公司", "名录", "名单", "入驻企业", "有哪些企业", "查企业"],
|
||||
"reply": "园区目前有 39 家入驻企业,分布在三个区域:\n\n· 加速区:云南派音人工智能科技、米勒克尔蓝宝石珠宝、云南宸中低空经济等 9 家\n· 国际区:仰光客厅、中越生物医疗、酷享野农AI农业等 7 家\n· 成长区:Facebook越南跨境电商、昆明云韵体育、云南星瑞航空等 8 家\n\n我已在屏幕上为您展示企业分布卡片。",
|
||||
"reply": "按官方统计(2026年7月),园区实际入驻企业 38 家;《入驻企业信息表》收录本期入驻企业(项目)名录 39 家,包括云南派音人工智能科技(PineSound)、米勒克尔蓝宝石珠宝、云南宸中低空经济、仰光客厅、中越生物医疗、酷享野农AI农业、研X同行者网络等。\n\n行业分布:人工智能 7 家、跨境电商 5 家、教育培训 4 家、文旅康养 4 家、文化创意 4 家、生物医药 4 家、低空经济 3 家、现代农业 3 家、绿色环保 2 家、企业服务 2 家、新材料 1 家。\n\n我已在屏幕上为您展示企业分布卡片。",
|
||||
"tools": [{"type": "show_card", "params": {"card": "companies"}}],
|
||||
},
|
||||
{
|
||||
"match": ["融资", "投资", "资金", "贷款", "估值", "资本"],
|
||||
"reply": "园区融资服务包含:\n\n· 融资对接:定期组织路演与投资机构对接活动\n· 孵化估值:累计孵化企业估值约 5.2 亿元\n· 金融支持:协助对接银行创业贷款、政府创业担保贷款\n· 财务辅导:提供融资方案设计与商业计划书辅导",
|
||||
"reply": "园区融资服务包含:\n\n· 融资对接:定期组织路演与投资机构对接活动\n· 经营成效:入驻团队累计经营收入约 2.19 亿元(省级绩效累计口径,截至2026年5月)\n· 金融支持:协助对接银行创业贷款、政府创业担保贷款\n· 财务辅导:提供融资方案设计与商业计划书辅导",
|
||||
"tools": [],
|
||||
},
|
||||
{
|
||||
"match": ["就业", "招聘", "岗位", "人才", "用工"],
|
||||
"reply": "园区累计带动就业 2,186 人(其中高校毕业生 1,680 人,实习岗位 506 个)。\n\n· 企业招聘:在驻企业持续发布岗位\n· 人才对接:与在昆高校共建实习实训基地\n· 创业带动:园区鼓励以创业带动就业",
|
||||
"reply": "园区就业数据(口径说明):\n\n· 官方统计(2026年7月):当年累计带动就业 213 人\n· 省级绩效累计口径(截至2026年5月):累计带动就业 1,529 人(本年度 106 人)\n\n· 企业招聘:在驻企业持续发布岗位\n· 人才对接:与在昆高校共建实习实训基地\n· 创业带动:园区鼓励以创业带动就业",
|
||||
"tools": [],
|
||||
},
|
||||
{
|
||||
"match": ["导师", "培训", "课程", "辅导", "孵化服务", "孵化器"],
|
||||
"reply": "园区配备创业导师 58 位,提供全周期孵化服务:\n\n· 一对一辅导:创业导师定期坐诊,覆盖商业模式、法律财税、市场营销\n· 培训课程:创业训练营、行业专题沙龙、政策解读会\n· 资源对接:技术、供应链、渠道等产业资源链接\n· 公共服务:工商注册、知识产权、法律咨询一站式代办",
|
||||
"reply": "园区组建创业指导专家团队 50 人(省级绩效材料口径),提供全周期孵化服务:\n\n· 一对一辅导:创业导师定期坐诊,覆盖商业模式、法律财税、市场营销\n· 培训课程:创业训练营、行业专题沙龙、政策解读会\n· 资源对接:技术、供应链、渠道等产业资源链接\n· 公共服务:工商注册、知识产权、法律咨询一站式代办",
|
||||
"tools": [],
|
||||
},
|
||||
{
|
||||
@@ -92,7 +92,7 @@ RULES = [
|
||||
},
|
||||
{
|
||||
"match": ["加速区", "国际区", "成长区", "分区", "区域", "区别", "布局"],
|
||||
"reply": "园区按企业成长阶段划分三个区域:\n\n· 加速区(蓝色):成长型项目独立办公室(A1–A12),在驻 9 家\n· 国际区(青色):国际合作与跨境业务(I1–I7),在驻 7 家\n· 成长区(绿色):初创团队共享空间(G1–G8),在驻 8 家\n\n园区管理办公室位于加速区 M 房间。",
|
||||
"reply": "园区按创业企业(项目)发展阶段设置四大孵化区域(《宣传册》《入驻管理规程》):\n\n· OPC创业空间:AI技术支撑、轻资产领域,拎包入驻,孵化周期最长 2 年\n· 创业苗圃区:创意阶段未注册团队,共享工位,最长 2 年\n· 孵化加速区:已注册初创企业,独立办公,基础 2 年可延 1 年(累计≤3年)\n· 国际创客区:归国/外籍留学生,个性化空间,参照加速区\n\n我已在屏幕上为您展示分区介绍卡片。",
|
||||
"tools": [{"type": "show_card", "params": {"card": "zones"}}],
|
||||
},
|
||||
{
|
||||
@@ -111,7 +111,7 @@ RULES = [
|
||||
},
|
||||
]
|
||||
|
||||
DEFAULT_REPLY = "园区提供「空间 + 孵化 + 融资 + 政策 + 资源 + AI 赋能 + 综合服务」七位一体服务,在园项目 158 家,累计带动就业 2,186 人,累计营收 2.08 亿元。\n\n您可以这样问我:\n· 如何申请入驻园区?\n· 展示入驻企业卡片\n· 切换到数字孪生页面"
|
||||
DEFAULT_REPLY = "园区提供「空间 + 孵化 + 融资 + 政策 + 资源 + AI 赋能 + 综合服务」七位一体服务。\n\n按官方统计(2026年7月):实际入驻企业 38 家,当年累计带动就业 213 人,当年生产经营总额 252.15 万元;省级绩效累计口径(截至2026年5月):累计孵化企业 181 家、累计带动就业 1,529 人、累计经营收入约 2.19 亿元。\n\n您可以这样问我:\n· 如何申请入驻园区?\n· 展示入驻企业卡片\n· 切换到数字孪生页面"
|
||||
|
||||
|
||||
def _detect_page(text):
|
||||
|
||||
+15
-3
@@ -21,8 +21,10 @@ _SSL_CTX = ssl.create_default_context(cafile=certifi.where())
|
||||
|
||||
SYSTEM_PROMPT = (
|
||||
"你是「昆明市大学生创业园 · OPC 智能园区」的 AI 智能助手,运行在大屏展播系统上。"
|
||||
"园区提供空间、孵化、融资、政策、资源、AI 赋能、综合服务七位一体服务,"
|
||||
"在园项目 158 家,累计带动就业 2,186 人,累计营收 2.08 亿元。"
|
||||
"园区提供空间、孵化、融资、政策、资源、AI 赋能、综合服务七位一体服务。"
|
||||
"回答园区相关问题时,必须严格依据【园区知识库】中的标准资料口径回答,"
|
||||
"不得使用资料外的数字;涉及运营数据时请区分口径(官方统计/省级绩效累计/AI平台指标),"
|
||||
"并在需要时调用 get_park_overview 工具获取实时准确数据。"
|
||||
"当用户要求「切换页面 / 控制播放 / 展示卡片 / 弹出通知」时,必须调用对应工具;"
|
||||
"其余园区相关问题用简洁、专业的中文回答,可适当使用列表。"
|
||||
)
|
||||
@@ -146,7 +148,17 @@ def run_chat(messages):
|
||||
log.warning("未配置 DASHSCOPE_API_KEY,使用本地规则引擎")
|
||||
return _fallback(messages)
|
||||
|
||||
msgs = [{"role": "system", "content": SYSTEM_PROMPT}] + [
|
||||
# 注入园区知识库摘要(标准资料口径),确保回答准确
|
||||
system = SYSTEM_PROMPT
|
||||
try:
|
||||
from .rag import brief
|
||||
kb = brief()
|
||||
if kb:
|
||||
system += f"\n\n【园区知识库】\n{kb}"
|
||||
except Exception as e: # noqa: BLE001
|
||||
log.warning("llm: 知识库注入失败(仅用基础提示词): %s", e)
|
||||
|
||||
msgs = [{"role": "system", "content": system}] + [
|
||||
{"role": m.get("role") == "me" and "user" or m.get("role", "user"), "content": m.get("content", "")}
|
||||
for m in (messages or [])
|
||||
]
|
||||
|
||||
@@ -85,6 +85,17 @@ class ChatBody(BaseModel):
|
||||
|
||||
# ==================== 认证 / 设置 ====================
|
||||
|
||||
@router.get("/api/health")
|
||||
async def health():
|
||||
"""健康检查(Docker healthcheck / 运维探活)"""
|
||||
return {
|
||||
"ok": True,
|
||||
"service": "dpm-backend",
|
||||
"mqtt": hub.connected if getattr(hub, "connected", None) is not None else False,
|
||||
"ts": __import__("time").time(),
|
||||
}
|
||||
|
||||
|
||||
@router.post("/api/login")
|
||||
async def login(request: Request):
|
||||
form = await request.form()
|
||||
@@ -98,6 +109,28 @@ async def get_settings():
|
||||
return {k: s[k] for k in ("volume", "play_mode", "image_duration", "fullscreen", "autostart")}
|
||||
|
||||
|
||||
@router.get("/api/config")
|
||||
async def runtime_config():
|
||||
"""运行配置(供前端启动引导覆盖):MQTT 地址/账号、API 基址
|
||||
—— 打包部署时展播端从后端拉取,避免构建期写死的局域网 IP 失效
|
||||
"""
|
||||
ws = settings.MQTT_WS_URL
|
||||
# 从 ws://host:port/mqtt 中提取 broker 主机
|
||||
host = "127.0.0.1"
|
||||
try:
|
||||
host = ws.split("://", 1)[1].split(":", 1)[0]
|
||||
except Exception: # noqa: BLE001
|
||||
pass
|
||||
return {
|
||||
"ok": True,
|
||||
"mqtt_url": ws,
|
||||
"mqtt_username": settings.MQTT_USERNAME or "",
|
||||
"mqtt_password": settings.MQTT_PASSWORD or "",
|
||||
"api_base": f"http://{host}:{settings.PORT}",
|
||||
"broker_host": host,
|
||||
}
|
||||
|
||||
|
||||
@router.post("/api/settings")
|
||||
async def update_settings(body: SettingsBody):
|
||||
storage.update_settings(**body.model_dump(exclude_none=True))
|
||||
|
||||
@@ -14,19 +14,28 @@ import random
|
||||
import threading
|
||||
import time
|
||||
|
||||
# ---------- 真实锚点(仅来自 xls 统计表 + 宣传册) ----------
|
||||
# ---------- 真实锚点(仅来自 xls 统计表 + 附件1 省级材料 + 宣传册) ----------
|
||||
REAL = {
|
||||
"as_of": "2026-07",
|
||||
"token_monthly_yi": 200, # 月均消耗 200 亿 tokens(真实业务锚点)
|
||||
"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": 39, # 园区实际入驻企业数(信息表名单 39 家,统一口径)
|
||||
"occupied": 38, # 实际入驻企业数(官方口径:《2026年7月运行情况统计表》38 家)
|
||||
"capacity": 49, # 园区可容纳企业个数(统计表)
|
||||
"invested": 560, # 开园以来累计投入运营资金(万元,统计表)
|
||||
"jobs": 213, # 入驻企业累计带动就业人数(统计表)
|
||||
"revenue_total": 252.15, # 入驻企业累计生产经营总额(万元,统计表)
|
||||
"revenue_tax": 1.03, # 入驻企业累计上缴税利总额(万元,统计表)
|
||||
"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, # 获评省级创业园年份(宣传册)
|
||||
@@ -177,12 +186,23 @@ def init_snapshot():
|
||||
"nodes": 12, # AI 服务节点(演示)
|
||||
},
|
||||
"projects": {
|
||||
"inPark": REAL["occupied"], # 实际入驻 39 家
|
||||
"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"]}, # 万元
|
||||
"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"],
|
||||
|
||||
+21
-14
@@ -15,23 +15,30 @@ log = logging.getLogger("dpm.tools")
|
||||
# ── 工具实现 ────────────────────────────────────────────────────────────
|
||||
|
||||
def _get_park_overview(args):
|
||||
"""园区实时概览(在园项目/就业/营收/在园人数等)"""
|
||||
"""园区实时概览(官方统计口径 + 省级绩效累计口径 + AI 平台运行指标)"""
|
||||
from .sim_engine import sim_engine
|
||||
d = sim_engine.snapshot()
|
||||
return json.dumps({
|
||||
"在园项目": d["projects"]["inPark"],
|
||||
"累计孵化企业": d["projects"]["cum"],
|
||||
"今日新增项目": d["projects"]["todayNew"],
|
||||
"带动就业(人)": d["jobs"]["total"],
|
||||
"今日新增就业": d["jobs"]["todayNew"],
|
||||
"累计营收(万元)": d["revenue"]["total"],
|
||||
"今日营收(万元)": d["revenue"]["today"],
|
||||
"营收同比增速(%)": d["revenue"]["growth"],
|
||||
"设备在线率(%)": d["park"]["devices"],
|
||||
"今日能耗(kWh)": d["park"]["energy"],
|
||||
"当前在园人数": d["park"]["people"],
|
||||
"会议预约": d["park"]["meeting"],
|
||||
"工位使用": d["park"]["desk"],
|
||||
"数据口径": "官方统计(《2026年7月运行情况统计表》);累计口径(附件1省级材料,截至2026年5月);AI平台指标:TOKEN/工具调用",
|
||||
"实际入驻企业数(家)": d["projects"]["inPark"],
|
||||
"园区可容纳企业数(个)": d["projects"]["capacity"],
|
||||
"开园以来累计投入运营资金(万元)": d["projects"]["invested"],
|
||||
"带动就业人数(人,当年累计)": d["jobs"]["total"],
|
||||
"生产经营总额(万元,当年累计)": d["revenue"]["total"],
|
||||
"上缴税利总额(万元,当年累计)": d["revenue"]["tax"],
|
||||
"累计孵化企业(家,省级绩效累计)": d["cumulative"]["incubated"],
|
||||
"当前实有在孵实体(家,省级绩效累计)": d["cumulative"]["inIncubation"],
|
||||
"累计成功孵化出园企业(家,开园以来累计)": d["cumulative"]["graduated"],
|
||||
"入驻团队发明专利(项,累计)": d["cumulative"]["patents"],
|
||||
"累计带动就业(人,省级绩效累计)": d["cumulative"]["jobs"],
|
||||
"入驻团队累计经营收入(万元)": d["cumulative"]["revenue"],
|
||||
"入驻团队累计税收(万元)": d["cumulative"]["tax"],
|
||||
"创业指导专家团队(人)": d["cumulative"]["mentors"],
|
||||
"近3年入孵实体孵化成功率(%)": d["cumulative"]["successRate"],
|
||||
"园区建筑面积(㎡)": d["park"]["area"],
|
||||
"TOKEN月均消耗(亿)": 200,
|
||||
"TOKEN实时速率(t/s)": d["token"]["rate"],
|
||||
"今日TOKEN消耗(万)": d["token"]["today"],
|
||||
}, ensure_ascii=False)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user