学习导师:从工具模式到感知模式的整合

📋 本文目录


一、前言

1.1 本节内容简介

想学习Python,但遇到了这些问题:

  • 学完就忘,不知道自己掌握了多少

  • 不知道下一步该学什么,很迷茫

  • 没有人能一直陪着练,遇到问题没人问

  • 想复习的时候,不知道从哪里开始

如果有一个懂你的学习伙伴该多好!

本文展示如何把1-5模块整合起来,构建一个真正懂你的学习导师:

  • 记住你的学习进度

  • 理解你的学习需求

  • 给你个性化学习推荐

  • 定期帮你总结和复习

看完你会明白,基础能力如何整合出一个有温度的智能应用!

1.2 为什么需要个人学习导师?

痛点 解决方案
学完就忘 长期记忆记住你的进度和薄弱环节
不知道学什么 上下文感知给你推荐下一步学习内容
练习不够 工具模式生成练习题和学习卡片
需要总结 总结模式帮你梳理知识点和学习进度
对话沟通 对话管理自然交流,理解你的困惑

二、整体设计思路

2.1 5种能力如何配合?

复制代码
用户说"我想学Python编程"
    ↓
02_对话管理 → 理解需求,建立对话,询问学习目标
    ↓
01_工具模式 → 调用学习规划工具、进度追踪工具
    ↓
04_长期记忆 → 记录学习目标、当前进度、已掌握内容
    ↓
05_上下文感知 → 感知学习阶段,推荐下一步学习内容
    ↓
03_总结模式 → 定期总结学习内容,生成知识点图谱

2.2 与单个模块的区别

维度 单个模块 整合后的学习导师
运作方式 孤立工具 完整闭环系统
响应方式 被动响应 主动引导学习
记忆能力 短期对话 长期学习记忆
目标用户 技术开发者 普通学习者

三、学习导师工具链演示

3.1 完整流程

复制代码
用户输入
    ↓
01_工具模式 → 进度追踪、练习生成、知识卡片
02_对话管理 → 自然对话、意图识别
03_总结模式 → 学习总结、知识点图谱
04_长期记忆 → 学习进度、已掌握内容
05_上下文感知 → 感知阶段、推荐内容
    ↓
个性化输出

3.2 运行演示

复制代码
cd personal_learning_tutor
../venv_py38/Scripts/python.exe learning_tutor_chain_demo.py

3.3 生成的输出文件

  • output_progress.md - 学习进度记录

  • output_summary.md - 学习总结

  • output_recommendations.md - 推荐内容

  • output_practice.json - 练习题


四、学习导师Agent整合实战

4.1 前置要求

  • 安装并启动 Ollama

  • 拉取模型:ollama pull qwen2.5:3b-instruct

  • 准备好学习环境

4.2 完整Agent代码(简化版)

复制代码
"""
交互式个人学习导师 - 简化可运行版
直接调用 Ollama API,不依赖复杂框架
"""
import requests
import json
import sys
import os

# 添加当前目录到路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

# 导入我们的学习工具
from tool_1_progress_tracker import progress_tracker
from tool_2_knowledge_card import knowledge_card
from tool_3_learning_summarizer import learning_summarizer
from tool_4_practice_generator import practice_generator
from tool_5_recommender import recommender

OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL_NAME = "qwen2.5:3b-instruct"

class LearningTutor:
    """学习导师 - 简化版"""
    
    def __init__(self):
        print("=" * 60)
        print("个人学习导师 - 初始化中...")
        print("=" * 60)
        
        # 对话历史存储
        self.conversation_history = []
        
        print("[OK] 个人学习导师初始化完成!")
        print()
    
    def call_ollama(self, prompt, max_tokens=300):
        """调用 Ollama API"""
        try:
            response = requests.post(
                OLLAMA_URL,
                json={
                    "model": MODEL_NAME,
                    "prompt": prompt,
                    "stream": False,
                    "options": {
                        "temperature": 0.7,
                        "num_predict": max_tokens
                    }
                },
                timeout=60
            )
            if response.status_code == 200:
                return response.json().get("response", "")
            else:
                return f"调用出错: {response.status_code}"
        except Exception as e:
            return f"连接出错: {e}"
    
    def chat(self, user_input):
        """和用户对话"""
        print(f"\n用户: {user_input}")
        
        # 保存用户输入到历史
        self.conversation_history.append({
            "role": "user",
            "content": user_input
        })
        
        # 构造提示词
        prompt = self._build_prompt(user_input)
        
        # 调用模型生成回复
        print("导师思考中...", end="", flush=True)
        
        try:
            assistant_reply = self.call_ollama(prompt, max_tokens=300)
        except Exception as e:
            assistant_reply = f"抱歉,我遇到了问题: {str(e)}"
        
        print("\r" + " " * 20 + "\r", end="")
        
        # 保存助手回复
        self.conversation_history.append({
            "role": "assistant",
            "content": assistant_reply
        })
        
        print(f"导师: {assistant_reply}")
        return assistant_reply
    
    def _build_prompt(self, user_input):
        """构造提示词"""
        # 构建历史对话文本
        history_text = ""
        for msg in self.conversation_history[:-1]:
            if msg["role"] == "user":
                history_text += f"学生: {msg['content']}\n"
            else:
                history_text += f"导师: {msg['content']}\n"
        
        prompt = f"""你是一个友好的个人学习导师。以下是对话历史:

{history_text}

学生刚刚说: "{user_input}"

请友好地回应学生,保持对话自然。你可以帮助学生:
1. 规划学习路径
2. 解答学习问题
3. 生成练习题
4. 总结学习内容
5. 推荐下一步学习内容

记住,你是在指导和鼓励学生学习!
"""
        return prompt
    
    def get_progress(self):
        """查看学习进度"""
        return progress_tracker.invoke({})
    
    def get_summary(self):
        """查看学习总结"""
        return learning_summarizer.invoke({})
    
    def get_recommendations(self):
        """获取学习推荐"""
        return recommender.invoke({})
    
    def generate_practice(self):
        """生成练习题"""
        return practice_generator.invoke({})

def main():
    """主函数 - 交互式对话"""
    print()
    print("=" * 60)
    print("个人学习导师 - 交互式对话")
    print("=" * 60)
    print()
    print("指令:")
    print("  - 直接输入内容与导师对话")
    print("  - progress - 查看学习进度")
    print("  - summary - 查看学习总结")
    print("  - next - 获取下一步推荐")
    print("  - practice - 生成练习题")
    print("  - quit - 退出")
    print()
    print("=" * 60)
    
    # 初始化Agent
    try:
        tutor = LearningTutor()
    except Exception as e:
        print(f"初始化失败: {e}")
        print("\n提示: 请确保Ollama正在运行,并且已拉取qwen2.5:3b-instruct模型")
        print("运行命令: ollama pull qwen2.5:3b-instruct")
        return
    
    print()
    print("开始学习吧!")
    print()
    
    while True:
        try:
            user_input = input("> ").strip()
            
            if not user_input:
                continue
            
            # 处理特殊命令
            if user_input.lower() in ["quit", "exit"]:
                print("\n再见!加油学习哦!")
                print("\n" + "=" * 60)
                print("学习总结:")
                print("=" * 60)
                print(tutor.get_summary())
                break
            
            if user_input.lower() == "progress":
                print("\n" + "=" * 60)
                print("学习进度:")
                print("=" * 60)
                print(tutor.get_progress())
                print()
                continue
            
            if user_input.lower() == "summary":
                print("\n" + "=" * 60)
                print("学习总结:")
                print("=" * 60)
                print(tutor.get_summary())
                print()
                continue
            
            if user_input.lower() == "next":
                print("\n" + "=" * 60)
                print("下一步推荐:")
                print("=" * 60)
                print(tutor.get_recommendations())
                print()
                continue
            
            if user_input.lower() == "practice":
                print("\n" + "=" * 60)
                print("练习题:")
                print("=" * 60)
                print(tutor.generate_practice())
                print()
                continue
            
            # 正常对话
            tutor.chat(user_input)
            
        except KeyboardInterrupt:
            print("\n\n再见!")
            break
        except Exception as e:
            print(f"\n发生错误: {e}")

if __name__ == "__main__":
    main()

4.3 运行Agent

复制代码
cd personal_learning_tutor
../venv_py38/Scripts/python.exe interactive_learning_tutor.py

4.4 Agent特殊命令

  • progress - 查看学习进度

  • summary - 查看学习总结

  • next - 下一步推荐

  • practice - 生成练习题

  • quitexit - 退出

4.5 真实交互演示

复制代码
============================================================
个人学习导师 - 交互式对话
============================================================

指令:
  - 直接输入内容与导师对话
  - progress - 查看学习进度
  - summary - 查看学习总结
  - next - 获取下一步推荐
  - practice - 生成练习题
  - quit - 退出

============================================================
[OK] 个人学习导师初始化完成!

开始学习吧!

> 你好,我想学Python编程

学生: 你好,我想学Python编程
导师: 你好!欢迎开始你的Python学习之旅!Python是一门很有趣且实用的编程语言。

让我先了解一下你的情况:你之前有编程基础吗?你的学习目标是什么(比如想做网站、数据分析、还是人工智能)?

> 没有基础,我想做一些自动化脚本

学生: 没有基础,我想做一些自动化脚本
导师: 太好了!自动化是Python的强项,非常适合初学者!

根据你的情况,我建议这样的学习路径:
1. 首先学习Python基础语法(变量、数据类型、条件语句)
2. 然后学习函数和模块
3. 最后学习文件操作和自动化库

你想先从哪里开始?

> 先学基础语法吧

学生: 先学基础语法吧
导师: 好的!那我们开始学习Python基础语法!

首先,你需要了解:
1. 变量和数据类型(数字、字符串、列表)
2. 条件语句(if/elif/else)
3. 循环(for/while)

需要我帮你生成一些基础练习题吗?

> progress

============================================================
学习进度:
============================================================
当前学习阶段: Python入门
已掌握内容: 无(刚开始)
下一步建议: 学习变量和数据类型

> practice

============================================================
练习题:
============================================================
Python基础练习题:

1. 声明一个变量name,赋值为你的名字
2. 计算1到10的和
3. 判断一个数是奇数还是偶数
4. 创建一个包含3种水果的列表

> quit

再见!加油学习哦!

============================================================
学习总结:
============================================================
本次学习:
- 学习目标: Python自动化脚本
- 当前阶段: Python入门
- 进度: 刚开始,需要学习基础语法

五、学习导师系统的核心价值

5.1 对比:传统学习 vs AI学习导师

维度 传统学习 AI学习导师
个性化 ❌ 通用教材、视频 ✅ 你的专属学习路径
长期记忆 ❌ 靠自己记笔记 ✅ 自动记住学习进度
进度追踪 ❌ 手动记录、整理 ✅ 自动追踪、可视化
复习提醒 ❌ 靠自己规划 ✅ 主动提醒复习
练习反馈 ❌ 需要找老师批改 ✅ 即时练习、即时反馈
学习动力 ❌ 需要很强自律 ✅ 有陪伴、有鼓励

5.2 具体价值场景

场景1:初学者入门规划
  • 问题:不知道从哪里开始

  • 解决:根据目标规划完整路径

场景2:技能提升路径
  • 问题:学了后面忘前面

  • 解决:定期总结、复习提醒

场景3:考试复习系统
  • 问题:知识点太多,抓不住重点

  • 解决:生成知识图谱、重点标记

附录:系列目录

Agent的工具模式

Agent的对话模式

Agent的总结模式

Agent的记忆模式

Agent的感知模式

相关推荐
何玺11 小时前
从电商到“物理世界运营商”:京东AI的未来推演与护城河量化
人工智能
阿奇__11 小时前
基于 Node.js 与智谱 AI 的 RAG 工程实践
人工智能·node.js
海兰11 小时前
【文字三国志:第二篇】天命重构,系统架构与核心设计文档
人工智能·语言模型
枫叶林FYL11 小时前
Explore with Long-term Memory:基于多模态大语言模型与强化学习的具身探索框架
大数据·人工智能·语言模型
有为少年11 小时前
深度隐式层 | 深度平衡模型 (Deep Equilibrium, DEQ)
人工智能·深度学习·神经网络·机器学习
梦想三三11 小时前
【Open CV图像处理】修改运算与平滑处理
人工智能·opencv·计算机视觉
lqqjuly11 小时前
状态空间模型:从经典控制论到现代序列建模——S4、Mamba 及其理论体系的完整论述(三)
人工智能
财经资讯数据_灵砚智能11 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月28日
大数据·人工智能·python·信息可视化·自然语言处理·ai编程·灵砚智能