FSLSM-RAG-MCP
基于《动手学深度学习》(D2L)语料库的FSLSM个性化辅导系统的论文实现。
该项目研究了Felder-Silveman学习风格模型(FSLSM)配置文件是否可以编码到合成的学生代理中,用于个性化RAG导师的反应,并通过MCP工具选择运行时进行操作。
项目
本论文由三个相互关联的实验组成:
| 实验 | 目的 | 主要结果 |
|---|---|---|
| Exp1 | 验证FSLSM条件下的虚拟学生代理 | 强模型可靠地恢复分配的配置文件;最高PRA=1.000 |
| Exp2 | 比较通用RAG(R0)与FSLSM个性化RAG相比(R1) | R1在保持相关性的同时提高了风格的一致性和参与度 |
| Exp3 | 通过真正的MCP工具层运行FSLSM感知辅导 | MCP运行时成功执行,并节省了大量提示令牌 |
总体而言,论文的主张并不是说学习风格是经过证明的人类特征。主张范围更窄:FSLSM可以用作合成代理、导师反应风格适应和工具选择/运行时分析的可控个性化信号。
实验1:虚拟学生代理保真度
Exp1测试基于LLM的虚拟学生代理在回答44项ILS问卷时是否能够一致地表达分配的FSLSM配置文件。
设置:
- 在四个二进制维度上有16个FSLSM轮廓:
act_ref,sen_int,vis_ver,seq_glo - 每个配置文件有5个代理实例,每个模型有80个FSLSM代理
- 每个代理进行3次ILS试验,每个模型提供240条FSLSM记录
- 每个模型5个无配置文件基线代理
- 15 API/通过LiteLLM/Ollama评估的本地模型
韵律学:
PRA:轮廓恢复精度;领带算作不匹配DAS:尺寸对齐得分;连续对齐强度
总体结果:
- 评估了15个模型
- 8/15款车型通过PRA>=0.82目标
- 6/15个型号通过了DAS>=0.75的目标
- 6/15型号通过PRA>=0.82和DAS>=0.75
- 所有模型的平均PRA:0.773
- 所有型号的平均DAS:0.717
- 最佳型号:
claude-sonnet-4-20250514PRA 1.000/DAS 0.927,gemma3:12bPRA 1.000/DAS 0.882,gpt-4.1-miniPRA 0.996/DAS 0.924 - 1-2B参数附近的较小模型大多会崩溃到概率水平PRA约0.50
DAS的最佳结果:
| 模型 | PRA | DAS |
|---|---|---|
claude-sonnet-4-20250514 | 1.000 | 0.927 |
gpt-4.1-mini | 0.996 | 0.924 |
gemma3:12b | 1.000 | 0.882 |
gemma2:9b | 0.948 | 0.837 |
qwen2.5:7b | 0.956 | 0.785 |
qwen2.5:3b | 0.890 | 0.752 |
运行:
python experiments/exp1_agent_fidelity/run.py
python experiments/exp1_agent_fidelity/run_baseline.py
python experiments/exp1_agent_fidelity/analyze.py
python experiments/exp1_agent_fidelity/visualize.py主要文物:
results/exp1/metrics/results/exp1/raw_responses/experiments/exp1_agent_fidelity/report.ipynbexperiments/exp1_agent_fidelity/final_defense_report.ipynb
实验2:FSLSM导师个性化
实验2测试了与通用RAG基线相比,FSLSM条件性RAG是否改善了导师的反应。
设置:
R0:通用D2L接地RAGR1:FSLSM使用ProfileAgent指令进行检索和生成的个性化RAG- 80种合成学生制剂
- 72个D2L问题
- 总共11520个会话,5760个匹配的R0/R1对
- 导师模式:
gpt-4.1-mini
管道:
ProfileAgent:将FSLSM向量转换为检索和生成指令RetrievalAgent:使用RRF和多查询分解的混合BM25+FAISS检索TutorAgent:生成基于D2L的导师反应和参与度评分
总体结果:
| 度量 | R0均值 | R1均值 | 结果 |
|---|---|---|---|
| SCS | 0.261 | 0.469 | R1+79.6%,影响大 |
| 参与度 | 3.247 | 3.890 | R1+19.8%,影响大 |
| RR | 3.788 | 3.785 | 无显著差异 |
| CR@5 | 0.159 | 0.155 | 小负数 |
| CR@10 | 0.269 | 0.254 | 小负数 |
| ER | 0.340 | 0.333 | 小负值 |
轨道B成对评估:
- 5760个有效的成对比较
- R1获胜:5419
- R0获胜:341
- R1胜率:0.9408
- 95%置信区间:0.9344-0.9466
释义:
- 个性化主要改善了反应风格和感知参与度。
- 响应相关性得以保留。
- 检索召回率没有提高;FSLSM查询增强略微将检索从事实金块转移开。
运行:
python experiments/exp2_tutor_personalization/run_exp2.py --mode both
python experiments/exp2_tutor_personalization/evaluate_exp2.py
python experiments/exp2_tutor_personalization/pairwise_eval.py --full主要文物:
experiments/exp2_tutor_personalization/results/exp2_results_summary.jsonexperiments/exp2_tutor_personalization/results/exp2_session_metrics.csvexperiments/exp2_tutor_personalization/results/pairwise/experiments/exp2_tutor_personalization/report.ipynb
实验3:MCP运行时工具选择
Exp3测试辅导系统是否可以通过真正的MCP风格的工具运行时来操作。
设置:
- 真正的FastMCP支持的工具层
- 15个注册的MCP工具
Exp3-Core:60个问题工具平衡基准,15个工具x4个问题- 16个标准FSLSM配置文件
- 三种运行条件:
- S0:提示所有工具模式的膨胀基线 - S1a:无条件RAG-MCP工具检索 - S1b:FSLSM条件下的RAG-MCP工具检索
主要指标:
Task-TSA:所选工具与任务最佳工具匹配Profile-TSA:所选工具与配置文件条件目标匹配PTS:与S0相比,快速节省代币- 执行成功和延迟
Exp3核心总体结果:
| 条件 | n | 任务TSA | PTS | 执行成功 | 平均延迟 |
|---|---|---|---|---|---|
| S0 | 960 | 0.783 | 0.0% | 1.000 | 983毫秒 |
| S1a | 960 | 0.833 | 93.5% | 1.000 | 772毫秒 |
| S1b | 960 | 0.820 | 93.5% | 1.000 | 802毫秒 |
释义:
- Exp3最有力的声明是运行时的有效性和效率。
S1a在TSA主要任务上最强。S1b并不能普遍改善任务工具的选择,但支持有限的配置文件条件分析,同时保持高提示令牌节省。
运行:
./venv/bin/python experiments/exp3_mcp_runtime/scripts/01_build_tool_index.py
./venv/bin/python experiments/exp3_mcp_runtime/scripts/02_verify_setup.py
./venv/bin/python experiments/exp3_mcp_runtime/scripts/11_full_run_core.py --run-id exp3_core_YYYYMMDD_HHMMSS --log-passive
./venv/bin/python experiments/exp3_mcp_runtime/scripts/07_compute_metrics.py --run-id exp3_core_YYYYMMDD_HHMMSS
./venv/bin/python experiments/exp3_mcp_runtime/scripts/08_generate_report.py --run-id exp3_core_YYYYMMDD_HHMMSS主要文物:
experiments/exp3_mcp_runtime/data/experiments/exp3_mcp_runtime/results/runs/experiments/exp3_mcp_runtime/report.ipynbexperiments/exp3_mcp_runtime/final_defense_report.ipynb
演示Web应用程序
共享的Streamlit演示现在位于实验文件夹之外,因为它展示了所有三个实验。
运行:
./venv/bin/streamlit run demo/app.py如果在repo venv之外使用纯Streamlit:
streamlit run demo/app.py演示部分:
Overview:所有实验的论文故事Exp1:汇总Exp1结果和数字Exp1 Live:迷你/完整ILS实时检查和缓存工件浏览器Exp2:聚合Exp2结果Exp2 Live:实时R0/R1比较、配置文件计划、检索证据和成对判断Exp3:聚合MCP运行时结果Live Demo:实时Exp3 MCP工具选择会话Replay Demo:重放存储的Exp3会话
环境注意事项:
- API演示需要相关密钥,如
OPENAI_API_KEY. - Exp3网络搜索工具需要
TAVILY_API_KEY. - 本地模型演示要求Ollama和所选模型在本地可用。
gemma3:12b在此Mac上的Exp1 Live中故意禁用,因为它可以挂起本地运行时。
存储库映射
demo/ Shared Streamlit dashboard
src/ Core tutor, agent, retrieval, and evaluation code
data/ Profiles, questions, processed chunks, Exp2 data
results/ Shared result artifacts
experiments/exp1_agent_fidelity/ Exp1 scripts, notebooks, reports
experiments/exp2_tutor_personalization/ Exp2 runner, evaluator, pairwise judge
experiments/exp3_mcp_runtime/ Exp3 MCP runtime, tools, server, scripts
tests/ Regression and runtime tests测试
python -m py_compile demo/service.py demo/app.py tests/test_exp3_mcp_runtime.py
pytest tests/test_exp3_mcp_runtime.py -q