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

📋 本文目录


一、前言

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 - 生成练习题

  • quit 或 exit - 退出

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的感知模式

相关推荐
sell-cloud25 分钟前
Prompt Engineering要凉了?Fable 5.5能“猜“意图,但银行正在封杀AI Agent——企业AI的真正护城河是什么
人工智能·prompt
Navicat中国2 小时前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI2 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区2 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris4 小时前
郴州logo设计机构
大数据·人工智能·python
Goboy5 小时前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V5 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI5 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技5 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
海宇数据5 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化