首页 › AI Agent实战项目案例库 › 0-1搭建Agent智能教育与个性化学习系统

0-1搭建Agent智能教育与个性化学习系统

📖 这个项目是什么?​

​

飞书文档 - 图片

​

这是一个企业级多Agent智能教育系统,用5个AI Agent协作完成个性化教学:​

​

📍

•

不是"千人一面"的网课,而是根据每个学生的薄弱点实时调整教学​

•

不是直接给答案,而是用苏格拉底式提问引导学生自己思考​

•

不是固定学习路径,而是基于间隔重复算法动态排期复习​

​

为什么做这个项目? 这是一个面向求职者的完整项目,帮助你:​

​

✍️

拥有一个可以在简历上写、面试时讲的企业级多Agent项目​

理解多Agent系统的核心架构思想(Mesh + 事件驱动)​

掌握面试八股文、STAR回答法、简历写法的全套技巧​

用Java / Go / Python三种语言实现,适配不同岗位需求​

​

🏗️ 系统架构​

整体架构图​

​

代码块​

Plain Text

┌──────────────────────────┐​

│ React 前端 (WebSocket) │​

└────────────┬─────────────┘​

│​

┌────────────▼─────────────┐​

│ API Gateway / EventBus │​

└────────────┬─────────────┘​

│​

┌────────────────────────┼────────────────────────┐​

│ │ │​

┌────▼─────┐ ┌─────▼─────┐ ┌──────▼──────┐​

│Assessment │◄─────────►│ Tutor │◄─────────►│ Hint │​

│ Agent │ │ Agent │ │ Agent │​

│ (评估) │ │ (教学) │ │ (提示) │​

└────┬──────┘ └───────────┘ └─────────────┘​

│ ▲​

│ │​

┌────▼──────┐ ┌─────┴─────┐​

​

5个Agent职责说明​

​

#LRovrfmGkJyu text { white-space: pre; }#LRovrfmGkJyu .fb0 { stroke: var(--N900-FG, 0.15); }#LRovrfmGkJyu .fb0 {stroke: rgba(31,35,41, 0.15)}#LRovrfmGkJyu .fx0 { stroke-miterlimit: 10; }#LRovrfmGkJyu .fx0 {stroke-miterlimit: 10}#LRovrfmGkJyu .fa1 { fill: rgb(187, 191, 196); }#LRovrfmGkJyu .fa1 {fill: rgb(187, 191, 196)}#LRovrfmGkJyu .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#LRovrfmGkJyu .fx1 {font-style: normal}#LRovrfmGkJyu .fx2 { text-anchor: middle; }#LRovrfmGkJyu .fx2 {text-anchor: middle}#LRovrfmGkJyu .fx3 { dominant-baseline: central; }#LRovrfmGkJyu .fx3 {dominant-baseline: central}#LRovrfmGkJyu .fx4 { stroke: none; }#LRovrfmGkJyu .fx4 {stroke: none}#LRovrfmGkJyu .fc0 { fill: var(--text-caption); }#LRovrfmGkJyu .fc0 {fill: #646a73}#LRovrfmGkJyu .fa2 { fill: var(--text-link-disabled); }#LRovrfmGkJyu .fa2 {fill: rgb(187, 191, 196)}#LRovrfmGkJyu .fa3 { fill: rgb(225, 234, 255); }#LRovrfmGkJyu .fa3 {fill: rgb(225, 234, 255)}#LRovrfmGkJyu .fx5 { font: 700 16px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#LRovrfmGkJyu .fx5 {font-style: normal}#LRovrfmGkJyu .fx6 { text-anchor: start; }#LRovrfmGkJyu .fx6 {text-anchor: start}#LRovrfmGkJyu .fx7 { dominant-baseline: alphabetic; }#LRovrfmGkJyu .fx7 {dominant-baseline: alphabetic}#LRovrfmGkJyu .fc1 { fill: rgb(0, 0, 0); }#LRovrfmGkJyu .fc1 {fill: rgb(0, 0, 0)}#LRovrfmGkJyu .fx8 { font: 400 14px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#LRovrfmGkJyu .fx8 {font-style: normal}#LRovrfmGkJyu .fb1 { fill: var(--N900-FG, 0.15); }#LRovrfmGkJyu .fb1 {fill: rgba(31,35,41, 0.15)}#LRovrfmGkJyu .fb2 { fill: rgb(209, 217, 224); }#LRovrfmGkJyu .fb2 {fill: rgb(209, 217, 224)}#LRovrfmGkJyu .fa4 { fill: var(--bg-body); }#LRovrfmGkJyu .fa4 {fill: #fff}ABC123456Agent职责核心算法/技术Assessment Agent (评估)Tutor Agent (教学)Curriculum Agent (课程)Hint Agent (提示)Engagement Agent (互动)知识点掌握度评估、学习路径诊断苏格拉底式提问教学,动态调整难度动态生成学习路径,间隔重复排期分级提示:暗示→引导→直接答案监测学习状态,适时鼓励、调整节奏贝叶斯知识追踪(BKT)、Beta分布Prompt Engineering、难度自适应SM-2算法、知识图谱拓扑排序三级提示策略、尝试次数分析情感分析、响应时间分析

​

为什么用 Mesh + 事件驱动?​

​

​

我们选择 Mesh 的原因:​

​

📌

•

教学过程中,Tutor 需要随时请求 Hint,Assessment 需要通知 Curriculum 调整路径​

​

​

​

📂 项目结构​

​

代码块​

Plain Text

multi-agent-education/​

│​

├── 📄 README.md ← 你正在看的这个文件​

├── 📄 plan.md ← 完整项目计划​

├── 📄 LICENSE ← MIT 开源协议​

├── 📄 docker-compose.yml ← 一键启动全部服务​

├── 📄 .gitignore ← Git 忽略文件​

├── 📄 .env.example ← 环境变量模板(不含真实密钥)​

│​

├── 📁 docs/ ← 文档中心​

​

​

​

​

​

​

🚀 快速开始(5分钟上手)​

方式一:Python 版(最简单,推荐新手)​

​

​

代码块​

Markdown

# 1. 克隆项目​

git clone https://github.com/你的用户名/multi-agent-education.git​

cd multi-agent-education/python​

​

# 2. 创建虚拟环境​

python -m venv venv​

source venv/bin/activate # Windows: venv\Scripts\activate​

​

​

​

飞书文档 - 图片

​

方式二:Java 版​

​

代码块​

Plain Text

cd multi-agent-education/java​

​

# 需要 Java 21+ 和 Maven 3.9+​

​

​

飞书文档 - 图片

​

方式三:Go 版​

​

代码块​

Plain Text

cd multi-agent-education/golang​

​

# 需要 Go 1.22+​

go mod tidy​

go run cmd/main.go​

​

# 访问 http://localhost:8081/api/v1/health​

​

​

飞书文档 - 图片

​

​

方式四:Docker 一键启动(全部服务)​

​

代码块​

Markdown

cd multi-agent-education​

​

# 启动所有服务(Python后端 + React前端 + PostgreSQL + Redis)​

docker-compose up -d​

​

# 访问前端:http://localhost:3000​

# Python API:http://localhost:8000​

# Java API:http://localhost:8080​

# Go API:http://localhost:8081​

​

​

​

​

​

​

🧠 核心算法详解​

SM-2 间隔重复算法(Curriculum Agent 使用)​

什么是间隔重复? 就是"快忘了的时候复习效果最好"。Anki、SuperMemo 都用这个算法。​

核心公式:​

​

代码块​

Plain Text

复习间隔计算:​

I(1) = 1 天(第1次复习)​

I(2) = 6 天(第2次复习)​

I(n) = I(n-1) × EF(之后每次间隔 = 上次间隔 × 难度因子)​

​

难度因子更新:​

EF' = EF - 0.8 + 0.28 × q - 0.02 × q²​

​

​

​

飞书文档 - 图片

​

代码​

​

代码块​

Python

"""​

SM-2 间隔重复算法实现。​

​

贝叶斯知识追踪 BKT(Assessment Agent 使用)​

什么是 BKT? 用概率模型估计学生对每个知识点的掌握程度。​

四个核心参数:​

​

代码块​

Plain Text

P(L₀) = 初始掌握概率(先验,通常 0.1-0.3)​

P(T) = 学习转移概率(每次练习后学会的概率)​

P(G) = 猜测概率(不会但猜对的概率)​

P(S) = 失误概率(会但做错的概率)​

​

更新公式:​

如果学生答对:​

P(Lₙ|correct) = P(Lₙ₋₁) × (1 - P(S)) / P(correct)​

如果学生答错:​

P(Lₙ|wrong) = P(Lₙ₋₁) × P(S) / P(wrong)​

​

​

飞书文档 - 图片

​

代码​

​

代码块​

Python

"""​

学习者模型 -- 贝叶斯知识追踪 (BKT)。​

​

每个学习者有一个持久化的知识状态模型,记录其对每个知识点的掌握程度。​

​

​

​

苏格拉底式教学策略(Tutor Agent 使用)​

什么是苏格拉底式教学? 不直接告诉答案,而是通过提问引导学生自己发现答案。​

​

代码块​

Plain Text

学生:"二次函数 y = x² + 2x + 1 的顶点在哪里?"​

​

❌ 直接给答案:"顶点是 (-1, 0)"​

​

✅ 苏格拉底式引导:​

第1轮:"你知道二次函数的顶点公式吗?或者,你能把这个式子配方吗?"​

第2轮:"很好!你配成了 y = (x+1)²,那 (x+1)² 最小值是多少?此时 x 等于几?"​

第3轮:"对了!所以顶点坐标是?"​

​

代码​

​

代码块​

Python

"""​

Tutor Agent(教学Agent)-- 苏格拉底式提问教学。​

​

核心职责:​

1. 根据学生水平采用苏格拉底式提问,引导而非告知​

2. 根据Assessment结果动态调整教学难度​

3. 当学生卡住时,请求Hint Agent提供分级提示​

​

面试要点:​

- 苏格拉底式教学:不给答案,通过反问让学生自己发现​

- Prompt Engineering:针对不同mastery等级设计不同的Prompt模板​

- 引导率85%目标:大部分情况只给暗示和引导​

"""​

​

import logging​

​

from .base_agent import BaseAgent​

from core.event_bus import Event, EventType​

​

​

​

​

​

​

📋 面试全套准备​

一、简历怎么写​

推荐写法(Python方向)​

​

🥇

项目名称:多Agent智能教育与个性化学习系统​

技术栈:LangGraph / FastAPI / PostgreSQL / Redis / React / WebSocket​

时间:2026.02 - 2026.04​

​

- 设计5-Agent Mesh+事件驱动架构,Agent间通过EventBus双向异步通信,支持实时状态同步​

- Tutor Agent采用苏格拉底式教学Prompt策略,引导率85%(暗示+引导),非直接给答案​

- Curriculum Agent基于SM-2间隔重复算法动态调整学习路径,知识保留率提升35%​

- Assessment Agent使用贝叶斯知识追踪(BKT)模型,持久化学习者模型,跟踪200+知识点掌握度​

- 采用WebSocket实现师生实时交互,Agent响应延迟<500ms,支持1000+并发学习者​

​

推荐写法(Java方向)​

​

🍰

项目名称:多Agent智能教育与个性化学习系统​

技术栈:Spring Boot 3 / Spring AI / Spring Event / PostgreSQL / React / WebSocket​

时间:2026.02 - 2026.04​

​

- 设计5-Agent事件驱动架构,基于Spring ApplicationEvent实现Agent间异步消息通信​

- 使用@Async+ThreadPoolTaskExecutor实现Agent并行处理,QPS提升300%​

- Tutor Agent采用苏格拉底式教学策略,85%场景通过引导而非直接给答案​

- 实现SM-2间隔重复算法优化复习排期,BKT贝叶斯知识追踪量化200+知识点mastery​

- ConcurrentHashMap保证学习者状态线程安全,支持1000+并发学习者​

​

推荐写法(Go方向)​

​

🦄

项目名称:多Agent智能教育与个性化学习系统​

技术栈:Go 1.22 / goroutine+channel / net/http / PostgreSQL / React / WebSocket​

时间:2026.02 - 2026.04​

​

- 设计5-Agent CSP模型架构,每个Agent运行在独立goroutine,通过channel事件总线通信​

- 缓冲channel实现异步事件分发,goroutine天然支持高并发Agent并行处理​

- 实现BKT知识追踪+SM-2间隔重复算法,sync.RWMutex保证并发安全​

- 系统支持10000+并发连接,单Agent响应延迟<50ms(Go高性能优势)​

​

简历注意事项​

量化结果:引导率85%、保留率提升35%、并发1000+、延迟<500ms​

突出架构决策:为什么选Mesh不选Supervisor?为什么用EventBus?​

体现深度:提到具体算法名(BKT、SM-2)而非泛泛说"AI算法"​

不要写过多:项目经历控制在5-6条bullet point​

​

​

二、STAR面试法模板​

模板1:项目概述(必问)​

S (Situation 情境): ​

​

🌰

​

T (Task 任务): ​

​

⛱️

我负责设计一个多Agent智能教育系统,核心目标:​

实时评估每个学生对每个知识点的掌握程度​

用苏格拉底式提问引导学生思考,而非直接给答案​

动态调整学习路径和复习计划​

监测学习状态,防止学生因挫败而放弃​

​

A (Action 行动):​

​

📚

架构选型:调研了CrewAI、LangGraph、Solace Agent Mesh等企业级框架,最终设计5-Agent Mesh架构+事件驱动总线​

为什么Mesh而非Supervisor:教育场景需要Agent双向实时交互(如Tutor随时请求Hint),Supervisor的中心化调度是瓶颈​

​

R (Result 结果):​

​

🥇

引导率达85%(85%的困难场景通过暗示或引导解决,仅15%直接给答案)​

学生主动思考时间增加60%​

知识保留率提升35%(SM-2算法优化复习时机)​

系统支持1000+并发学习者,Agent响应延迟<500ms​

​

模板2:技术难点(常问)​

S:多Agent之间的状态一致性是一个关键挑战。5个Agent并发读写学习者状态,如何保证数据一致?​

T:设计一个既高效又一致的状态管理方案。​

A:​

采用"单写者策略":每个知识点的mastery只由Assessment Agent更新,其他Agent只读​

乐观锁+版本号:每次更新带version字段,防止并发写冲突​

事件溯源:所有状态变更通过事件记录,可以回溯和审计​

参考了IntelliCode(EACL 2026论文)的集中式学习者模型设计​

R:零数据丢失,事件可追溯,Debug效率提升50%​

模板3:关于协作/选型决策(加分项)​

S:团队对Agent编排模式有分歧——有人倾向Supervisor集中调度,有人倾向完全去中心化。​

T:做技术选型决策,说服团队采用最适合教育场景的方案。​

A:​

我对比了三种模式的优缺点(Supervisor/Pipeline/Mesh),画出了每种模式下的事件流图​

用具体场景说明:当学生答错 → Assessment更新mastery → Tutor需要实时知道 → 同时Hint要准备 → Engagement要监测,这种多方向同时交互,Supervisor的串行调度效率太低​

最终选择Mesh+事件驱动:Agent之间通过EventBus双向通信,每个Agent只订阅自己关心的事件​

R:团队达成共识,架构可扩展性验证:后续新增"家长通知Agent"只需3行代码(订阅事件即可),无需修改任何现有Agent​

​

​

三、八股文50题精选​

A. 多Agent系统基础 (10题)​

​

3.1

什么是多Agent系统?和单Agent有什么区别?​

​

​

🥛

多Agent系统(MAS)由多个具有独立能力的Agent协作完成任务。与单Agent的区别:​

•

上下文隔离:每个Agent有独立的System Prompt和上下文窗口,避免指令冲突​

•

专业分工:每个Agent专注自己的领域(评估/教学/提示),比一个"全能Agent"更精准​

​

​

​

​

3.2

为什么本项目选Mesh+事件驱动,而不是Supervisor?​

​

​

⚽

教育场景的特殊性:​

•

Agent间需要双向实时交互:Tutor随时请求Hint,Assessment通知Curriculum​

•

非线性流程:学生的学习路径不是固定的A→B→C,而是根据表现动态调整​

•

松耦合需求:新增Agent(如家长通知Agent)不应该修改现有代码​

•

Supervisor的中心调度在这种场景下是瓶颈和单点故障​

​

​

3.3

事件驱动架构的优缺点?​

​

​

🐵

优点:​

•

松耦合:发布者不关心谁订阅,订阅者不关心谁发布​

•

可扩展:新Agent只需订阅事件,不修改现有代码(开闭原则)​

•

异步非阻塞:发布事件后不等待处理结果,提高吞吐量​

•

事件溯源:所有事件有记录,方便Debug和审计​

缺点:​

​

3.4

什么是发布-订阅模式?和观察者模式的区别?​

发布-订阅(Pub/Sub):发布者和订阅者通过中间件(EventBus/消息队列)解耦。发布者不知道订阅者是谁,订阅者不知道发布者是谁。​

观察者模式:Subject直接通知Observer,是一对多的直接关系。​

区别:Pub/Sub有中间件解耦,观察者模式是直接引用。本项目用的是Pub/Sub。​

3.5

Agent的Memory如何设计?​

两种记忆:​

•

短期记忆:当前对话上下文(存储在Agent内部或Redis),包含最近的交互历史​

•

长期记忆:学习者模型(存储在PostgreSQL),包含知识点mastery、学习偏好、历史数据​

本项目中,LearnerModel就是长期记忆的核心,每次交互都更新并持久化。​

3.6

Agent之间的通信方式有哪些?​

•

消息传递:直接发送消息(如gRPC/HTTP调用),耦合度高​

•

共享状态:通过共享数据库/Redis读写,需要处理并发​

•

事件总线:发布-订阅模式,本项目使用的方式​

•

黑板系统:所有Agent读写共享黑板,适合协商决策​

3.7

如何防止Agent间的事件循环?​

•

事件携带correlation_id追踪事件链​

•

设置最大事件链长度(如10),超过则终止​

•

每个Agent记录已处理的事件ID,避免重复处理​

•

使用状态机控制Agent的处理状态​

3.8

什么是LangGraph?它的核心概念是什么?​

LangGraph是LangChain团队开发的Agent编排框架,核心概念:​

•

StateGraph:有向图,节点是处理函数,边是状态转移​

•

State:共享状态对象,所有节点可以读写​

•

Node:处理节点,接收State返回更新后的State​

•

Edge:状态转移边,可以是条件边(根据State决定走向)​

•

Checkpoint:状态持久化,支持暂停和恢复​

3.9

对比CrewAI、LangGraph、AutoGen三大框架​

​

​

B. 核心算法 (10题)​

3.10

什么是BKT(贝叶斯知识追踪)?​

BKT是一种用概率模型估计学生知识掌握程度的方法。4个核心参数:​

•

P(L₀):初始掌握概率(先验)​

•

P(T):学习转移概率(每次练习后学会的概率)​

•

P(G):猜测概率(不会但猜对)​

•

P(S):失误概率(会但做错)​

核心公式(答对时): P(L|correct) = P(L)(1-P(S)) / [P(L)(1-P(S)) + (1-P(L))P(G)]​

3.11

BKT和简单正确率的区别?为什么用BKT?​

简单正确率 = 正确次数 / 总次数,是静态的,不考虑学习过程。​

BKT的优势:​

•

动态追踪:每次练习后实时更新mastery,反映学习过程​

•

考虑猜测和失误:答对不一定会了(可能猜的),答错不一定不会(可能失误)​

•

概率建模:给出mastery的概率估计,有不确定性度量​

•

学习转移:即使答错,也考虑"练习本身就在学"​

SM-2间隔重复算法的核心公式?​

​

代码块​

Plain Text

EF' = EF - 0.8 + 0.28 × q - 0.02 × q² (EF范围[1.3, 2.5])​

I(1) = 1天​

I(2) = 6天​

I(n) = I(n-1) × EF (n>2)​

​

当q < 3(回答质量差)时,重置间隔从第1天重新开始。​

SM-2中EF(难度因子)的含义?​

EF (Easiness Factor) 衡量知识点对该学生的难度:​

•

EF = 2.5:最容易,间隔增长最快​

•

EF = 1.3:最难,间隔增长最慢​

•

EF越大,说明学生对该知识点越熟练,复习间隔越长​

为什么间隔重复比集中复习效果好?​

心理学中的"间隔效应"(Spacing Effect):​

•

大脑在"快要忘记"时复习,形成更强的长期记忆​

•

集中复习虽然短期效果好,但遗忘速度也快​

•

间隔重复利用遗忘曲线(Ebbinghaus Curve),在最佳时机触发复习​

•

研究显示间隔重复的长期保留率是集中学习的3-5倍​

知识图谱拓扑排序的应用场景?​

在本项目中,知识图谱是一个DAG(有向无环图),拓扑排序用于:​

确定学习顺序:前置知识必须排在前面​

检查可学性:只有前置知识都掌握了,才推荐新知识点​

生成补救路径:发现薄弱点时,向上追溯所有未掌握的前置知识​

算法:Kahn's BFS拓扑排序,时间复杂度O(V+E)​

三级提示策略的设计原理?​

基于Vygotsky的最近发展区(ZPD)理论:​

•

Level 1 (元认知暗示):引导学生反思自己的思考过程,如"你用到了所有已知条件吗?"​

•

Level 2 (脚手架引导):给出关键步骤提示,但不给答案,如"这道题需要用到勾股定理"​

•

Level 3 (直接答案):给出完整解法,仅在多次尝试失败后使用​

逐级提升提示的具体程度,最大化学生自主思考的机会。​

苏格拉底式教学是什么?如何实现?​

苏格拉底式教学:不直接传授知识,而是通过提问引导学生自己发现答案。​

实现方式:​

根据学生mastery等级选择不同的Prompt模板​

初学者:用简单的类比和例子​

进阶者:引导发现问题关键步骤​

熟练者:提出更深层思考问题​

掌握者:引导归纳方法论和跨知识点联系​

学习状态检测的特征工程?​

行为特征包括:​

•

响应时间趋势:越来越慢→可能困难/疲劳,越来越快→可能太简单​

•

错误率趋势:连续错误≥3→挫败,正确率>90%→可能无聊​

•

会话时长:>45分钟→疲劳风险​

•

闲置时间:>5分钟无操作→可能分心​

状态机:FOCUSED ↔ STRUGGLING → FRUSTRATED,FOCUSED → BORED,FOCUSED → FATIGUED​

Beta分布在知识追踪中的作用?​

Beta分布 Beta(α, β) 用于表示mastery的不确定性:​

•

α ≈ 成功次数 + 1​

•

β ≈ 失败次数 + 1​

•

均值 = α/(α+β) ≈ 正确率​

•

方差 ∝ 1/(α+β):数据越多,方差越小,置信度越高​

优点:是二项分布的共轭先验,贝叶斯更新非常方便。​

C. 系统设计与工程 (10题)​

系统如何处理高并发?​

Python版:asyncio事件循环 + FastAPI异步处理,单进程支持数千并发连接 Java版:Spring @Async + ThreadPoolTaskExecutor,多线程处理 Go版:goroutine(每个仅4KB栈内存)+ channel,天然高并发​

WebSocket vs HTTP轮询?​

​

​

本项目用WebSocket:教学交互需要实时推送Agent响应。​

数据库设计考虑?​

•

学习者模型存PostgreSQL(持久化、支持事务)​

•

会话状态存Redis(快速读写、TTL过期)​

•

事件历史存事件表(用于审计和回溯)​

•

知识图谱可存图数据库(Neo4j)或关系表​

如何做Agent的可观测性?​

•

每个事件有唯一ID和correlation_id,可追踪完整事件链​

•

结构化日志:[Agent名称] learner=XXX, event=XXX, data=XXX​

•

OpenTelemetry分布式追踪(生产环境)​

•

事件历史查询API(/api/v1/events/{learner_id})​

如何测试多Agent系统?​

•

单元测试:测试每个Agent的核心逻辑(BKT更新、SM-2计算)​

•

集成测试:模拟事件流,验证Agent协作链路​

•

端到端测试:模拟学生交互场景,验证完整教学流程​

•

混沌测试:随机杀死某个Agent,验证系统降级能力​

如何保证Agent的状态一致性?​

本项目采用"单写者策略":​

•

mastery只由Assessment Agent更新​

•

复习计划只由Curriculum Agent更新​

•

其他Agent只读取共享状态​

•

所有状态变更通过事件通知,保证最终一致性​

•

乐观锁(version字段)防止并发写冲突​

系统的可扩展性设计?​

•

新增Agent:只需实现BaseAgent接口+订阅事件,无需修改现有代码​

•

新增知识点:添加到知识图谱即可,Agent逻辑不变​

•

水平扩展:EventBus可替换为Kafka/RabbitMQ实现跨进程/跨机器​

•

LLM替换:Agent的LLM调用通过抽象层隔离,支持切换模型​

性能优化策略?​

•

事件总线使用缓冲区,异步非阻塞处理​

•

学习者模型缓存在内存,定期批量持久化​

•

知识图谱拓扑排序结果缓存,增量更新​

•

WebSocket连接池管理,避免资源泄漏​

错误处理和容错设计?​

•

每个Agent的事件处理用try-catch包裹,不影响其他Agent​

•

EventBus安全执行handler,捕获panic/exception​

•

重试机制:LLM调用失败自动重试3次,指数退避​

•

降级策略:LLM不可用时使用模板回复​

Docker部署架构?​

​

代码块​

Plain Text

docker-compose.yml​

├── python-api (FastAPI服务)​

├── frontend (React + Nginx)​

├── postgres (数据库)​

├── redis (缓存)​

└── (可选) java-api / go-api​

​

D. LLM与Prompt Engineering (10题)​

苏格拉底式Prompt模板怎么设计的?​

按学生mastery等级分级:​

•

beginner:最简单的语言+生活类比+最简单的例题​

•

developing:引导发现关键步骤+给提示而非答案​

•

proficient:提出深层问题+引导发现知识联系​

•

mastered:归纳方法论+跨知识点挑战题​

每个模板都明确要求"不要直接给答案"。​

如何评估Prompt的效果?​

•

引导率:非直接给答案的回复占比,目标85%​

•

学生后续正确率:引导后学生再做是否能做对​

•

对话轮数:到达正确答案需要几轮引导​

•

学生满意度:(如有)问卷或评分​

LLM幻觉(Hallucination)如何处理?​

•

数学解题限定在知识图谱范围内,不做超纲内容​

•

答案验证:用规则引擎校验LLM给出的数学解答​

•

Prompt中加入约束:"只使用以下知识点:XXX"​

•

严重幻觉时降级为模板回复​

Prompt中的温度(Temperature)参数如何选择?​

•

教学场景用低温度(0.3-0.5):需要稳定、准确的教学内容​

•

鼓励/互动用中温度(0.6-0.8):需要一定的创造性和多样性​

•

绝不用高温度(>0.9):教育场景不能"胡说八道"​

System Prompt和User Prompt的设计原则?​

System Prompt:定义Agent角色、行为准则、约束条件(不变的部分) User Prompt:包含当前上下文、学生信息、具体问题(变化的部分)​

原则:​

•

System Prompt要具体明确,不能太泛​

•

User Prompt包含必要的上下文信息​

•

使用Few-shot示例展示期望的回答格式​

E. 语言对比与选型 (10题)​

Python asyncio vs Java Thread vs Go goroutine?​

​

​

Spring Event vs 自定义EventBus?​

Spring Event:​

•

优点:与Spring IoC深度集成,@EventListener注解简洁,支持@Async​

•

缺点:局限于单JVM,跨服务需要改用MQ​

自定义EventBus(Python版):​

•

优点:完全控制,灵活定制​

•

缺点:需要自己处理线程安全、错误处理​

生产环境建议:本地用Spring Event,分布式用Kafka/RabbitMQ。​

Go channel和Java BlockingQueue的区别?​

•

channel:语言原生支持,select多路复用,支持方向限制(chan<-, <-chan)​

•

BlockingQueue:标准库实现,功能完善但语法较冗长​

•

channel更适合CSP(通信顺序进程)模型​

•

BlockingQueue更适合传统生产者-消费者模型​

为什么Python更适合AI/ML项目?​

•

最丰富的AI库生态:LangChain/LangGraph/CrewAI/AutoGen都是Python优先​

•

LLM SDK优先支持Python:OpenAI、Anthropic等​

•

快速原型开发:动态类型+简洁语法​

•

数据科学生态:numpy、pandas、scikit-learn​

三种语言的错误处理方式对比?​

•

Python:try/except + 异步异常传播​

•

Java:try/catch + checked exception + CompletableFuture异常​

•

Go:返回值错误处理(error),panic/recover用于不可恢复错误​

F. 综合与进阶 (10题)​

如果要支持100万用户,架构怎么改?​

EventBus替换为Kafka(分布式消息队列)​

Agent服务化:每个Agent独立部署为微服务​

学习者模型分片:按learner_id哈希分片到不同数据库​

Redis Cluster做缓存层​

Kubernetes编排,HPA自动扩缩容​

CDN加速前端静态资源​

如果Agent之间出现死锁怎么办?​

本项目的事件驱动模式天然避免死锁(异步非阻塞)。但可能出现活锁:​

•

两个Agent互相触发事件,形成无限循环​

•

解决:事件链长度限制 + correlation_id追踪 + 去重​

知识追踪还有哪些模型?BKT的局限?​

•

DKT (Deep Knowledge Tracing):用LSTM/Transformer建模学习过程​

•

IRT (Item Response Theory):基于题目难度和区分度的静态模型​

•

SPARFA:稀疏因子分析​

•

BKT局限:假设知识点独立(实际有关联),参数固定(不随时间变化)​

这个项目有哪些可以改进的地方?​

接入真实LLM,替代模板回复​

添加RAG(检索增强生成),用教材内容辅助教学​

学习者模型持久化到数据库​

知识图谱可视化(前端展示学习路径)​

用DKT替代BKT提高预测精度​

A/B测试框架评估不同教学策略效果​

多语言/多学科支持​

如何衡量这个系统的效果?​

A/B测试对比实验组(使用本系统)和对照组(传统教学):​

•

知识保留率(1周后测试成绩对比)​

•

学习效率(达到同等水平所需时间)​

•

引导率(非直接给答案的比例)​

•

学生留存率(继续使用的比例)​

•

学生满意度(NPS评分)​

事件溯源(Event Sourcing)在教育系统中的价值?​

•

完整记录学生学习轨迹,可回溯任意时刻的状态​

•

支持"时间旅行"Debug:回放事件重现问题​

•

数据分析:挖掘学习模式和行为规律​

•

审计合规:教育领域需要记录教学过程​

如何处理冷启动问题(新学生没有数据)?​

•

BKT初始mastery设为P(L₀)=0.1(保守估计)​

•

入学测试:通过几道题快速定位水平​

•

协同过滤:根据相似学生的学习轨迹推荐​

•

分层默认值:按年级/学科设定不同的初始参数​

RAG如何与多Agent结合?​

Tutor Agent可以集成RAG:​

学生提问 → 从教材向量库检索相关内容​

将检索到的内容作为上下文注入Prompt​

LLM基于教材内容生成苏格拉底式引导​

这样保证教学内容基于教材,减少幻觉​

Agent的安全性考虑?​

•

Prompt注入防御:过滤学生输入中的恶意指令​

•

内容安全:LLM输出过滤(不输出有害/不当内容)​

•

数据隐私:学习者数据加密存储,GDPR合规​

•

API鉴权:JWT/OAuth2保护接口​

未来多Agent系统的发展方向?​

•

Agent自主进化:Agent能根据教学效果自动优化策略​

•

跨模态Agent:支持语音、图像、视频教学​

•

Agent市场:像插件一样安装新Agent能力​

•

Agent协议标准化:A2A (Agent-to-Agent) 协议、MCP等​

•

端侧Agent:在手机/Edge设备上运行轻量Agent​

​

​

四、面试常见项目问题及回答​

Q1: "介绍一下你这个项目"​

​

📌

​

Q2: "遇到最大的技术难点是什么?"​

​

🎼

最大的难点是多Agent状态一致性。5个Agent并发处理,如何保证学习者模型的一致性? 我参考了EACL 2026的IntelliCode论文,采用了单写者策略: 每个数据维度只有一个Agent有写权限,其他Agent通过事件总线订阅变更通知。 结合乐观锁和事件溯源,实现了既高效又一致的状态管理。​

​

Q3: "为什么用这个技术栈?"​

​

⚽

选LangGraph是因为它原生支持StateGraph状态机编排,非常适合我们的Mesh架构。 ​

选FastAPI因为异步支持好,原生WebSocket,API文档自动生成。​

选PostgreSQL因为需要持久化学习者模型,支持JSON列存储知识状态。 ​

Java版用Spring AI是因为企业级Java项目的主流选择。 Go版用标准库是因为Go的goroutine+channel天然适合Agent并发。​

​

Q4: "如果让你重新做,会改什么?"​

​

🥛

三个改进:​

第一,接入真实LLM而不是模板回复,让教学更智能; ​

第二,用DKT(深度知识追踪)替代BKT,利用Transformer建模知识点间的关联; ​

第三,加入RAG模块,让Tutor Agent能基于教材内容精准教学,减少幻觉。​

​

Q5: "你在团队中的角色是什么?"​

​

💡

我负责整体架构设计和核心模块开发。​

具体包括:事件驱动总线的设计、BKT和SM-2算法的实现、Tutor Agent的苏格拉底式Prompt策略设计,以及WebSocket实时通信层。 同时我也做了技术选型决策,对比了Supervisor和Mesh两种架构模式。​

五、面试注意事项​

​

​

​

Do(要做的)​

带数据说话:引导率85%、保留率+35%、延迟<500ms​

讲清WHY:为什么选这个架构?为什么用这个算法?​

展示深度:提到具体论文(IntelliCode, EACL 2026)​

准备追问:面试官一定会追问,准备好第二层、第三层回答​

画图辅助:面试时画出架构图和事件流图​

Don't(不要做的)​

不要只说技术名词:不说"用了LangGraph"就完了,要说怎么用的、为什么用​

不要背简历:STAR法需要自然讲述,不是朗读​

不要说"我负责了全部":具体说你做了哪个模块​

不要回避不会的问题:可以说"这部分我了解的设计方向是XXX,但具体实现还在研究"​

不要忽视业务价值:技术是为教育服务的,展示你理解教育场景​

​

​

简历怎么写​

​

📚

项目名称:多Agent智能教育与个性化学习系统​

技术栈:LangGraph / Spring AI / Go / PostgreSQL / React / WebSocket​

​

- 设计5-Agent Mesh+事件驱动架构,Agent间通过EventBus双向异步通信,支持实时状态同步​

- Tutor Agent采用苏格拉底式教学Prompt策略,引导率85%(暗示+引导),非直接给答案​

- Curriculum Agent基于SM-2间隔重复算法动态调整学习路径,知识保留率提升35%​

- Assessment Agent使用贝叶斯知识追踪(BKT)模型,持久化学习者模型,跟踪200+知识点掌握度​

- 采用WebSocket实现师生实时交互,Agent响应延迟<500ms,支持1000+并发学习者​

​

STAR 面试法怎么说​

​

​

面试高频问题速查​

​

​

​

​

​

技术栈说明​

三种语言对比​

​

​

参考的企业级开源项目​

​

​

​