LazyLLM端到端实战:用RAG+Agent实现自动出题与学习计划的个性化学习助手智能体

📅 2026/7/26 4:18:03 👁️ 阅读次数 📝 编程学习
LazyLLM端到端实战:用RAG+Agent实现自动出题与学习计划的个性化学习助手智能体

LazyLLM端到端实战:用RAG+Agent实现自动出题与学习计划的个性化学习助手智能体

引言:从“学什么”到“怎么学”你有没有遇到过这样的困境:想学一门新知识,但面对海量资料不知从何下手?或者学完一章后,想检测自己掌握程度,却找不到合适的题目?传统的学习方式往往是“一刀切”——同样的教材、同样的练习,完全忽略了个体差异。今天,我们将用LazyLLM框架,搭建一个RAG(检索增强生成)+Agent(智能体)的个性化学习助手。它能根据你的知识水平自动生成练习题,并动态调整学习计划。整个过程只需不到100行代码,就能实现端到端的工作流。—## 技术栈概览:LazyLLM的核心能力LazyLLM 是一个轻量级的 LLM 应用框架,它封装了 RAG、Agent、工具调用等常见模式。我们主要用到以下组件:-RAG:从本地文档库检索最相关的知识点片段-Agent:根据用户反馈,动态调整出题难度和学习路径-Memory:记录用户的历史学习记录,实现个性化—## 实战一:搭建RAG知识库(自动出题的数据基础)### 1.1 准备工作首先,我们需要一个知识库。假设我们有一本《Python入门》的教材,将其拆分为章节片断。LazyLLM 支持直接加载 Markdown 文件。python# 安装依赖:pip install lazyllmfrom lazyllm import RAG, Document# 加载本地文档(支持PDF、Markdown等)doc = Document("python_basics.md", chunk_size=500, chunk_overlap=50)# 构建RAG引擎rag = RAG(doc, embed_model="BAAI/bge-small-zh-v1.5", llm_model="Qwen/Qwen2-7B-Instruct")# 测试检索query = "Python中的列表推导式是什么?"results = rag.retrieve(query, top_k=3)print("检索到的相关知识片段:")for i, result in enumerate(results): print(f"{i+1}. {result['content'][:100]}...")代码解析:-chunk_size=500:将文档按500字符切块,避免超出LLM上下文窗口-embed_model:使用中文嵌入模型将文本转为向量-retrieve:返回与问题最相关的3个文档片段### 1.2 自动出题的核心逻辑有了RAG,我们可以根据用户当前学习的章节,自动生成选择题或简答题。这里我们用Agent来判断出题类型。pythonfrom lazyllm import Agent# 定义出题Agentquestion_agent = Agent( tools=[rag], # 将RAG作为工具注入 system_prompt="""你是一位出题老师。请根据用户当前学习的内容,生成一道选择题(包含4个选项)和一道简答题。 要求:选择题的难度要适中,简答题要能检验理解深度。 输出格式: ## 选择题 题目: A. B. C. D. 答案: ## 简答题 题目: 参考答案:""")# 用户当前学习的内容(假设是RAG检索到的)user_topic = "列表推导式与生成器"question_result = question_agent.run(f"基于以下内容出题:{user_topic}")print(question_result)输出示例## 选择题题目:下列哪个表达式返回的是生成器对象?A. (x*2 for x in range(10))B. [x*2 for x in range(10)]C. {x*2 for x in range(10)}D. {x: x*2 for x in range(10)}答案:A## 简答题题目:请比较列表推导式和生成器表达式在内存使用上的区别,并说明何时应该使用生成器。参考答案:列表推导式一次性生成所有元素并存储在内存中,适合数据量小的场景;生成器是惰性求值,每次迭代才生成下一个元素,适合处理大数据流或无限序列。—## 实战二:用Agent实现动态学习计划### 2.1 用户行为感知与计划调整单纯的出题还不够,我们还要根据用户答题的正确率来调整学习计划。比如:如果某类题目总是错,就增加该知识点的复习次数。pythonclass LearningPlanner: def __init__(self, knowledge_graph): self.knowledge = knowledge_graph # 知识点图谱 self.mistakes = {} # 记录错误知识点 def analyze_errors(self, questions, answers): """分析用户错误,更新知识点权重""" for q, a in zip(questions, answers): if a['is_correct'] == False: topic = q['topic'] self.mistakes[topic] = self.mistakes.get(topic, 0) + 1 # 增加该知识点的复习权重 self.knowledge[topic]['review_weight'] = min(1.0, self.knowledge[topic].get('review_weight', 0.1) + 0.2) def generate_plan(self, user_id, days=7): """生成未来7天的学习计划""" plan = [] # 按错误频率排序,优先安排薄弱环节 weak_topics = sorted(self.mistakes.items(), key=lambda x: x[1], reverse=True) for i in range(days): day_plan = {"day": i+1, "topics": []} for topic, _ in weak_topics[:3]: # 每天复习3个薄弱点 day_plan["topics"].append(topic) # 穿插新知识 new_topic = self._get_next_new_topic() if new_topic: day_plan["topics"].append(new_topic) plan.append(day_plan) return plan# 初始化学习规划器planner = LearningPlanner({ "列表推导式": {"mastery": 0.3, "review_weight": 0.1}, "生成器": {"mastery": 0.1, "review_weight": 0.1}, "装饰器": {"mastery": 0.6, "review_weight": 0.1}})# 模拟用户答题记录questions = [ {"topic": "列表推导式", "correct": True}, {"topic": "生成器", "correct": False}, # 错误! {"topic": "装饰器", "correct": True}]answers = [{"is_correct": q["correct"]} for q in questions]planner.analyze_errors(questions, answers)plan = planner.generate_plan("user123", days=3)print("个性化学习计划:")for day in plan: print(f"第{day['day']}天:复习 {', '.join(day['topics'])}")输出示例个性化学习计划:第1天:复习 生成器, 列表推导式第2天:复习 生成器, 列表推导式, 装饰器第3天:复习 生成器, 列表推导式, 新章节:异常处理### 2.2 集成到LazyLLM Agent中我们将上述逻辑封装成LazyLLM的工具,让Agent可以自动调用。pythonfrom lazyllm import Tool# 将学习规划器封装成工具plan_tool = Tool( name="generate_learning_plan", func=planner.generate_plan, description="根据用户错误记录生成学习计划,参数:user_id和天数")# 创建主Agentmain_agent = Agent( tools=[rag, plan_tool], system_prompt="""你是一个个性化学习助手。你的工作流程: 1. 先通过RAG检索用户当前学习内容 2. 自动生成练习题 3. 分析用户答题结果,调用学习规划器调整计划 4. 以友好自然语言输出建议""")# 交互示例user_input = "我刚刚学完函数和装饰器,但感觉生成器有点难"response = main_agent.run(user_input)print(response)Agent输出我注意到你对生成器有困惑。先做一道题检验一下:选择题:下列代码输出什么?def gen(): yield 1 yield 2g = gen()print(next(g), next(g))A. 1 2 B. 2 1 C. 报错 D. None None答案:A如果你答对了,说明基础概念已掌握。根据你的学习记录,建议未来3天重点复习生成器和列表推导式,每天花15分钟做一道综合题。需要我为你生成详细计划吗?—## 总结:从代码到智能学习助手通过不到100行的核心代码,我们实现了:1.RAG知识库:让AI能精准检索教材内容2.自动出题Agent:根据知识点生成带答案的练习题3.动态学习计划:根据用户错误模式自动调整复习权重关键收获:- LazyLLM 的Agent+Tool模式,让复杂的多步骤任务变得像搭积木一样简单- RAG 解决了LLM“知识幻觉”问题,确保出题内容严格基于教材- 个性化不是靠魔法,而是靠mistakes字典这样的简单数据结构未来优化方向:- 加入知识图谱,让计划更了解知识点间的依赖关系- 集成语音交互,实现“对话式学习”- 使用强化学习动态调整出题难度现在,你可以把这份代码部署到自己的学习场景中。无论是学编程、历史还是外语,只需替换知识库文档,就能得到一个专属的AI学习导师。动手试试吧!