项目简介

Future Quiz 是一个智能问卷系统后端,专为东华大学2025年软件工程实训课程设计。它集成了人工智能技术,旨在简化问卷的创建、管理和分析流程。系统具备基本的安全认证功能,并通过实现Model Context Protocol (MCP) 为大型语言模型 (LLM) 客户端提供工具和上下文信息,探索AI在问卷领域的应用。

主要功能点

  • 问卷管理: 创建、编辑、删除和管理问卷。
  • 问题设计: 支持多种问题类型(单选、多选、填空、简答、文件上传)。
  • AI 驱动的问题生成: 利用AI根据用户需求智能生成问卷题目。
  • 问卷发布与权限: 配置问卷的公开访问或指定用户访问权限。
  • 问卷收集与分析: 查看问卷回收结果,支持AI对结果进行深度分析,并生成可视化图表。
  • 文件处理: 对上传的文件(如PDF, Word)进行处理,转换为Markdown格式方便AI分析。
  • 用户与权限: 集成Logto单点登录和API Key认证。
  • MCP 支持: 通过标准的SSE传输协议,向兼容MCP协议的LLM客户端暴露问卷系统相关的工具和数据接口。

安装步骤

本项目后端基于Java Spring Boot,前端基于React,并使用MySQL、Minio (S3兼容存储)、Redis和Logto进行部署。推荐使用Docker进行部署:

  1. 准备环境:
    • 确保已安装 Docker 和 Docker Compose。
    • 准备一个 Logto 实例用于用户认证。
    • 准备一个 MySQL 数据库实例。
    • 准备一个 Minio 或兼容S3的对象存储实例。
    • 获取一个用于AI模型的 API-KEY (例如 Aihubmix 或兼容OpenAI的服务)。
    • 准备一个 Redis 实例。
  2. 数据库初始化: 使用仓库提供的 'src/main/resources/sql/full-0505.sql' 脚本创建数据库结构。
  3. 后端配置: 根据 'src/main/resources/application.example.yaml' 文件,创建 'application.yaml' 配置文件,填入数据库、Minio、Logto、AI API KEY 等配置信息。
  4. 启动后端: 使用提供的 Docker 命令启动后端服务,将您的 'application.yaml' 挂载到容器内指定路径。
    docker run -d \
      --name futurequizbe \
      -v /path/to/your/application.yaml:/etc/featurequiz/application.yaml \
      ridiculousbuffalo/futurequizbe:latest
  5. 启动前端: 使用提供的 Docker 命令启动前端服务,配置必要的环境变量指向后端API地址、Logto配置和LlamaIndex地址及API Key。
    docker run -d --name futurequizfe \
      -p 8080:80 \
      -e VITE_APP_LOGTO_ENDPOINT=https://logto.dev \
      -e VITE_APP_LOGTO_APPID=abc123 \
      -e VITE_APP_URL=https://myapp.example \
      -e VITE_APP_API_URL=https://api.example \
      -e VITE_APP_LLAMA_INDEX_BASE_URL=/api/llamaindex \ # 固定的相对路径
      -e VITE_APP_LLAMA_INDEX_KEY=sk-demo... \
      ridiculousbuffalo/futurequizfe:latest
    请将 'https://myapp.example' 和 'https://api.example' 替换为您实际部署的前后端访问地址。

服务器配置 (用于 MCP 客户端)

MCP服务器是为兼容MCP协议的LLM客户端提供服务的。要让一个MCP客户端(如LLM的插件或Tool)连接到此服务器,客户端需要知道服务器的地址、连接方式和认证信息。此服务器通过 Server-Sent Events (SSE) 传输协议暴露MCP功能。

对于一个MCP客户端而言,连接到此服务器的配置信息(例如在一个'.mcp.json'文件或其他客户端配置中)大致包含以下关键信息:

{
  "server name": "Future Quiz MCP Server",
  "command": "(此为网络服务,客户端无需启动命令)",
  "args": [],
  "connection_details": {
    "endpoint": "您部署的后端服务基础URL",
    "path": "/sse",
    "transport": "Server-Sent Events (SSE)",
    "authentication": {
      "method": "API Key in HTTP Header",
      "header_name": "apikey",
      "key_source": "在Future Quiz用户界面中'我的账户'->'开发者设置'处创建并获取API Key"
    }
  }
}

注意: 实际的MCP客户端配置格式可能因客户端实现而异。核心是需要配置服务器的网络地址 ('endpoint' + 'path')、使用的传输协议 ('transport') 以及认证方式 ('authentication'). 上述JSON结构是一种概念性表示,说明客户端需要知道的关键信息,而不是实际的启动命令和参数,因为这是连接到一个已运行的网络服务。

基本使用方法 (通过 MCP 客户端)

一个兼容MCP协议的LLM客户端(例如一个支持函数调用或工具使用的AI应用),在配置并成功连接到此MCP服务器后,将能够:

  1. 发现工具: LLM客户端可以查询服务器暴露的工具列表,例如创建问卷、插入不同类型的问题等工具(对应后端 'McpService' 中的 '@Tool' 方法)。
  2. 调用工具: LLM在与用户交互时,如果判断用户的意图需要使用到问卷系统提供的功能(如“帮我创建一个关于XX的问卷”,“往这个问卷里加一道单选题”),LLM会生成相应的工具调用请求(JSON格式),并通过SSE连接发送给MCP服务器。
  3. 获取结果: MCP服务器执行相应的工具方法(例如调用后端服务创建问题),并将执行结果(JSON格式)通过SSE流返回给LLM客户端。
  4. 获取上下文: LLM客户端也可以请求与问卷相关的上下文信息,例如获取当前用户的问卷列表或特定问卷的详细信息(对应后端 'McpService' 中的其他 '@Tool' 方法)。

用户与LLM的交互过程是由LLM客户端驱动的,客户端负责将用户请求转化为MCP调用,并将MCP服务器的响应或工具执行结果整合回LLM的回复中呈现给用户。

信息

分类

AI与计算