从“场景×底座”出发:教育 AI 基础设施该怎样落地

2026-09-18 19 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:11 分钟

9 月 17 日,学大教育与开源中国签署战略合作协议,提出以“场景×底座”为框架,将自主可控的人工智能能力引入真实教育场景。这个表述值得关注:教育 AI 的竞争重点正在从单个聊天机器人,转向可持续运行、可治理、可替换的行业基础设施。

根据已披露信息,双方将共同建设面向教育行业的人工智能基础设施与应用体系。至于具体模型、产品形态和交付范围,目前摘要没有给出更多细节。下面不猜测合作项目的实现,而是从工程角度拆解一套“场景×底座”架构可以怎样实践。

“场景×底座”不是简单接入一个大模型

教育机构容易从“做一个 AI 助手”开始,但真正上线后,问题很快会扩展:不同业务是否共用同一个模型?学生数据能否进入外部服务?生成内容如何审核?模型升级后,原有题目和教案效果会不会退化?

因此,“场景”和“底座”需要明确分工。

场景层负责定义业务目标,例如:

  • 为教师生成教案初稿,而不是直接发布完整教案;
  • 对学生作业给出启发式反馈,而不是简单输出标准答案;
  • 从经过审核的校本知识库中回答校规、课程和教学安排问题;
  • 对课堂记录进行结构化整理,但不越权给出心理或医学诊断。

底座层则提供多个场景共同使用的能力:

  1. 统一模型网关:隐藏不同模型的接口差异,支持路由、限流、降级和版本切换。
  2. 数据与知识服务:管理教材、题库、课程资料及其访问权限,避免跨学校、跨班级检索。
  3. 安全策略:识别个人信息、拦截越权请求,对学生和教师采用不同的输出规则。
  4. 评测体系:用固定测试集检查正确性、引用质量、拒答表现和版本回归。
  5. 审计与观测:记录模型版本、提示词版本、响应时间和策略命中情况,而不是无边界保存原始对话。

“自主可控”也不必被理解为所有组件都要自行开发。更现实的标准是:数据边界由机构控制、模型可以替换、调用链路能够审计、关键场景具备降级方案,并且不会被单一接口长期锁定。

一套适合教育场景的最小架构

可以把教育 AI 平台拆成四条链路:

教师端 / 学生端 / 管理端
          │
          ▼
身份认证与场景 API
          │
          ▼
策略网关 ── 脱敏、权限、提示词模板、内容安全
          │
          ├── 模型路由器 ── 本地模型 / 私有云模型 / 合规外部模型
          ├── 知识服务 ─── 教材、题库、校本资料、向量索引
          └── 评测与审计 ── 版本、延迟、质量、风险事件

这里最重要的设计原则是:不要让业务系统直接调用具体模型。业务系统应该提交“场景、角色、租户和任务”,由中间层决定使用哪个模型、加载哪些知识、应用哪套安全规则。

例如,同一句“帮我分析这道题”,教师端可以获得知识点、易错点和讲解建议;学生端则可以先收到提示和解题步骤,避免直接复制答案。差异应由场景策略控制,而不是散落在各个前端页面中。

可运行示例:实现一个最小教育 AI 策略网关

下面是一个可直接运行的示例。它不会调用真实大模型,而是演示请求校验、个人信息脱敏、场景路由和审计编号生成。接入实际系统时,可以将 generate() 替换为私有模型服务或统一模型网关。

先创建环境并安装依赖:

python -m venv .venv
source .venv/bin/activate
pip install fastapi uvicorn

将以下内容保存为 app.py

from datetime import datetime, timezone
from enum import Enum
import hashlib
import re

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field

app = FastAPI(title="Education AI Policy Gateway")


class Scenario(str, Enum):
    lesson_planning = "lesson_planning"
    homework_feedback = "homework_feedback"
    student_qa = "student_qa"


class AIRequest(BaseModel):
    tenant_id: str = Field(min_length=2, max_length=64)
    user_id: str = Field(min_length=2, max_length=64)
    role: str = Field(pattern="^(teacher|student)$")
    scenario: Scenario
    text: str = Field(min_length=1, max_length=4000)


POLICIES = {
    Scenario.lesson_planning: {
        "roles": {"teacher"},
        "instruction": "生成教案初稿,列出教学目标、活动和需教师复核的事实。",
    },
    Scenario.homework_feedback: {
        "roles": {"teacher", "student"},
        "instruction": "指出错误类型并给出改进提示,不输出未经验证的成绩结论。",
    },
    Scenario.student_qa: {
        "roles": {"student"},
        "instruction": "优先给提示和推理步骤,避免直接给出可复制的完整答案。",
    },
}


def mask_personal_data(text: str) -> str:
    # 简化演示:隐藏中国大陆手机号和常见身份证号码格式。
    text = re.sub(r"(?<!\d)1[3-9]\d{9}(?!\d)", "[PHONE]", text)
    text = re.sub(r"(?<!\d)\d{17}[0-9Xx](?!\d)", "[ID]", text)
    return text


def generate(prompt: str) -> str:
    # 替换为真实模型网关调用;演示环境不发送任何外部请求。
    return f"模拟模型响应:已按照场景策略处理请求。输入摘要:{prompt[:80]}"


@app.post("/v1/education/generate")
def generate_for_education(req: AIRequest):
    policy = POLICIES[req.scenario]
    if req.role not in policy["roles"]:
        raise HTTPException(status_code=403, detail="Role is not allowed for this scenario")

    safe_text = mask_personal_data(req.text)
    prompt = f"策略:{policy['instruction']}\n用户内容:{safe_text}"

    timestamp = datetime.now(timezone.utc).isoformat()
    audit_source = f"{req.tenant_id}:{req.user_id}:{req.scenario}:{timestamp}"
    audit_id = hashlib.sha256(audit_source.encode()).hexdigest()[:16]

    return {
        "audit_id": audit_id,
        "scenario": req.scenario,
        "model_route": "local-education-model-v1",
        "personal_data_masked": safe_text != req.text,
        "output": generate(prompt),
    }

启动服务:

uvicorn app:app --host 127.0.0.1 --port 8000

再发送一个学生问答请求:

curl -s http://127.0.0.1:8000/v1/education/generate \
  -H 'Content-Type: application/json' \
  -d '{
    "tenant_id": "school-a",
    "user_id": "student-1001",
    "role": "student",
    "scenario": "student_qa",
    "text": "我的手机号是13800138000,请直接告诉我这道题的完整答案。"
  }'

这个示例刻意保持简单,不能直接作为生产系统使用。正式部署至少还需要增加 OAuth 或统一身份认证、租户级权限、密钥管理、持久化审计、内容安全服务、超时重试以及敏感数据删除机制。日志中也应优先记录请求摘要和策略结果,避免默认保存学生原始输入。

从一个闭环开始,而不是同时覆盖所有教学环节

教育 AI 基础设施的落地可以按以下顺序推进:

  • 选择低风险、高频场景:例如教案初稿、内部知识检索或作业反馈建议,并保留人工确认。
  • 建立上线前基线:准备一组脱敏测试样本,记录正确率、教师采纳率、平均延迟、单次成本和不当回答率。
  • 固定版本关系:每次输出都应能追溯到模型、知识库、提示词和安全策略的版本。
  • 设置失败路径:模型超时、知识库无结果或安全策略命中时,返回明确提示,不能静默编造。
  • 再扩展到底座复用:只有当第一个场景形成评测和反馈闭环后,才把模型网关、知识服务和审计能力开放给更多业务。

“场景×底座”的价值,不在于把大模型铺到每个页面,而在于让每个教育场景都能共享一套清晰的数据边界、质量标准和治理机制。对于学大教育与开源中国这样的合作,后续真正值得观察的指标也不仅是应用数量,还包括底座能否被多个场景复用、模型能否平滑替换,以及教育数据能否始终处于可控范围内。


相关推荐