项目简介
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进行部署:
- 准备环境:
- 确保已安装 Docker 和 Docker Compose。
- 准备一个 Logto 实例用于用户认证。
- 准备一个 MySQL 数据库实例。
- 准备一个 Minio 或兼容S3的对象存储实例。
- 获取一个用于AI模型的 API-KEY (例如 Aihubmix 或兼容OpenAI的服务)。
- 准备一个 Redis 实例。
- 数据库初始化: 使用仓库提供的 'src/main/resources/sql/full-0505.sql' 脚本创建数据库结构。
- 后端配置: 根据 'src/main/resources/application.example.yaml' 文件,创建 'application.yaml' 配置文件,填入数据库、Minio、Logto、AI API KEY 等配置信息。
- 启动后端: 使用提供的 Docker 命令启动后端服务,将您的 'application.yaml' 挂载到容器内指定路径。
docker run -d \ --name futurequizbe \ -v /path/to/your/application.yaml:/etc/featurequiz/application.yaml \ ridiculousbuffalo/futurequizbe:latest - 启动前端: 使用提供的 Docker 命令启动前端服务,配置必要的环境变量指向后端API地址、Logto配置和LlamaIndex地址及API Key。
请将 'https://myapp.example' 和 'https://api.example' 替换为您实际部署的前后端访问地址。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
服务器配置 (用于 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服务器后,将能够:
- 发现工具: LLM客户端可以查询服务器暴露的工具列表,例如创建问卷、插入不同类型的问题等工具(对应后端 'McpService' 中的 '@Tool' 方法)。
- 调用工具: LLM在与用户交互时,如果判断用户的意图需要使用到问卷系统提供的功能(如“帮我创建一个关于XX的问卷”,“往这个问卷里加一道单选题”),LLM会生成相应的工具调用请求(JSON格式),并通过SSE连接发送给MCP服务器。
- 获取结果: MCP服务器执行相应的工具方法(例如调用后端服务创建问题),并将执行结果(JSON格式)通过SSE流返回给LLM客户端。
- 获取上下文: LLM客户端也可以请求与问卷相关的上下文信息,例如获取当前用户的问卷列表或特定问卷的详细信息(对应后端 'McpService' 中的其他 '@Tool' 方法)。
用户与LLM的交互过程是由LLM客户端驱动的,客户端负责将用户请求转化为MCP调用,并将MCP服务器的响应或工具执行结果整合回LLM的回复中呈现给用户。
信息
分类
AI与计算