乐于分享
好东西不私藏

WPS + ngrok + FastAPI:给全新地质力学软件装上语言遥控器

本文最后更新于2026-07-19,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

WPS + ngrok + FastAPI:给全新地质力学软件装上语言遥控器

引言:当“双重有效应力”遇见“自然语言”

在基于双重有效应力理论全新自研的地质工程一体化平台 BoreholeGuard 日常作业场景中,工程师们常面临这样的痛点:想查一份测井数据或导出一份报告,必须在复杂的桌面端 UI 中层层点击。

如果,我们只需要在 WPS 协作里说一句:“预测 A10-1-6 井的岩石强度和三压力剖面,发 PDF 到邮箱”,软件就能自动执行,该怎么办?

本文将揭示如何通过 WPS + ngrok + FastAPI,为 BoreholeGuard 装上“自然语言遥控器”。值得注意的是,WPS 自带语音转文字功能,口述会自动转为文本指令下发,因此形象称之为语音遥控器。而整套自动化流程的核心支撑,是一套分工清晰的内部数智化协作体系,下文以项目组角色类比便于快速理解。

🏗️ BoreholeGuard 数智化平台四大核心角色(项目组类比解析)

要理解这套系统的运作逻辑,首先要认识这个“项目组”的四个核心角色。它们共同构成了 BoreholeGuard 的智能内核:

* 🧑‍💼 PAI(项目经理)

   * 职责:统筹全局,听懂 WPS 指令,拆解任务、调度资源、反馈进度,是用户唯一交互界面。

* 🧠 LLM(首席专家)

   * 职责:深耕地质工程知识,调用 BK2SK 的知识体系与数据基准,为 Petrotree 算法选型、参数赋值提供认知支撑。

* 🛠️ Petrotree(作业队)

   * 职责:扎根计算一线,接收 LLM 下发的算法与参数,执行双重有效应力THMC多场耦合求解、岩石强度与三压力剖面预测、生成测井解释图及报告。

* 📘 BK2SK(档案室)

   * 职责:统一力学假设与参数体系。

      1. 知识(Knowledge):双重有效应力公式、岩石破坏准则(Mohr-Coulomb、Hoek-Brown)等理论基准。

      2. 数据(Standard Data):统一规范工区地层力学参数基准,涵盖区域地层参数、岩心实验标定数据及测井校正模板,杜绝跨井次计算标准不统一。

💡 概念澄清:FastAPI 的定位

FastAPI 并非智能体或求解器,而是系统的“前台”。它仅负责接收 WPS 推送的 HTTP 回调,完整透传指令至 PAI,并回传执行结果,全程不参与逻辑判断与力学计算。

💡 架构全景:四层工程化调度体系

基于角色分工,构建标准四层架构,实现调度层与计算层解耦:

1. 交互入口层:WPS 协作(语音转文字/文本指令下发)。

2. 穿透层:ngrok HTTPS 穿透(本地调试专用,生产环境建议替换为稳定内网穿透方案)。

3. 业务调度层:FastAPI 微服务(意图解析、参数校验、任务分发)。

4. 内核执行层:BoreholeGuard 主程序(双重有效应力力学内核,原生开放接口赋能)。

完整数据流闭环:

1. 手机 WPS 语音转文字下发指令

2. ngrok 转发请求

3. FastAPI 接收并透传指令至 PAI

4. PAI 调度 LLM 调取 BK2SK 理论与地层基准数据

5. LLM 输出标准化算法参数下发 Petrotree

6. Petrotree 完成双重有效应力仿真,生成报告

7. Petrotree 将执行结果回传至 PAI

8. PAI 将最终结果回传至用户(WPS)

🛠️ 核心技术拆解与实战踩坑

1️⃣ ngrok 的调试与局限

WPS 开放平台配置回调需 HTTPS 地址,ngrok 是本地调试利器。

# 启动 FastAPI 服务

uvicorn main:app –reload

# 启动 ngrok 穿透

ngrok http 8000

⚠️ 一点提示:

本文所述 ngrok 方案仅限本地研发调试,正式部署务必采用企业级内网穿透或 VPN 方案。

2️⃣ 后端中枢:FastAPI 的工业级容错

地质耦合计算耗时久,FastAPI 必须具备健壮性,防止进程卡死。

# Python3.12+ | BoreholeGuard原生接口联动专用

from fastapi import FastAPI, Request, HTTPException

import traceback

app = FastAPI()

@app.post(“/wps/callback”)

async def wps_callback(request: Request):

    try:

        data = await request.json()

        content = data.get(“content”)

        if not content:

            raise HTTPException(status_code=400, detail=”指令内容为空”)

        # 内核调用日志,便于运维追溯

        print(f”[BoreholeGuard Task] Received command: {content}”)

        return {“status”: “ok”}

    except Exception as e:

        error_detail = f”BoreholeGuard调度异常: {traceback.format_exc()}”

        print(error_detail)

        return {“status”: “error”, “message”: str(e)}

3️⃣ 自然语言拦截:正则的“隐形坑”

❌ 错误源码(域名分隔符未转义,逻辑失效):

import re

recipients = re.findall(r'[\w.+-]+@[\w-]+.[\w.]+’, user_input, re.ASCII)

✅ 正确源码:

import re

recipients = re.findall(r'[\w.+-]+@[\w-]+\.[\w.]+’, user_input, re.ASCII)

4️⃣ 邮件发送:Python 3.12 的现代写法

✅ 推荐写法:

from email.message import EmailMessage

from email.policy import SMTP

import smtplib

msg = EmailMessage(policy=SMTP)

msg[“Subject”] = “BoreholeGuard 岩石强度与三压力剖面预测报告”

msg[“From”] = “your@qq.com”

msg[“To”] = “target@qq.com”

msg.set_content(“见附件,数据基于双重有效应力理论计算生成。”)

with open(“rock_strength_triple_pressure.pdf”, “rb”) as f:

    msg.add_attachment(f.read(), maintype=”application”, subtype=”pdf”, filename=”岩石强度与三压力剖面预测报告.pdf”)

with smtplib.SMTP_SSL(“smtp.qq.com”, 465) as server:

    server.login(“your@qq.com”, “auth_code”)

    server.send_message(msg)

🚀 场景演示:项目经理指挥作业队

1. 用户:发送语音“预测 A10-1-6 井的岩石强度和三压力剖面,发 PDF 到邮箱”。

2. FastAPI:透传指令至 PAI。

3. PAI:识别意图,派发任务给 LLM。

4. LLM:查阅 BK2SK,调取工区基准数据,生成算法参数包下发 Petrotree。

5. Petrotree:加载 A10-1-6 井测井数据,运行多场耦合求解器,生成 PDF。

6. Petrotree:将执行结果回传至 PAI。

7. PAI:回传最终结果。

执行完成:已识别指令,正在调用 BoreholeGuard 生成测井 PDF 并推送邮件。

(最终结论:基于双重有效应力理论预测的岩石强度及三压力剖面,与 A10-1-6 井实测数据误差小于 5%,验证了模型的可靠性。)

📝 结语:让自研力学内核拥有“对话”的能力

当下国产地质工程自研软件普遍重力学内核、轻协同交互:大量平台深耕双重有效应力、多场多相渗流等前沿理论,却仍固守传统桌面端鼠标多层点击操作模式。本文这套 WPS 联动轻量化调度方案提供了标准化解法:不改动核心力学求解代码、不侵入双重有效应力计算模块,仅依托软件原生开放接口搭建外部智能调度链路,让新一代自研地质力学工业软件,在高精度数值仿真之外,拥有自然语言协同的全新交互范式。

基于双重有效应力理论的全新自研软件,更应打破“重计算、轻交互”的行业惯性——力学内核的先进性,最终需要通过标准化的外部接口转化为工程师的日常生产力。

💡 核心经验总结:

1. 【穿透踩坑】 ngrok 仅限本地调试,生产环境须防范数据外泄风险。

2. 【正则避坑】 Python 正则 

“\w” 中文场景务必加 

“re.ASCII”。

3. 【邮件兼容】 统一使用 

“EmailMessage(policy=SMTP)”。

4. 【内核适配】 外部调度服务完全隔离于核心求解模块,兼顾扩展性与稳定性。

5. 【硬件环境】 不低于64MB内存,16MB显存GPU,不低于I7多核CPU,850W高配电源

📢欢迎在评论区留言交流!