You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于LLMs与LangChain开发学习导师的作业提醒功能技术问询

学习导师应用作业定时提醒功能实现思路

一、核心功能拆解

  • 定时触发提醒:基于对话交互节点或预设时间发起作业完成情况询问
  • 回复意图识别:精准判断学生回复对应的作业状态(已完成/未完成需延后/未完成需即时协助/无关内容)
  • 动态调整提醒策略:根据学生反馈更新后续提醒的时间间隔或终止提醒流程

二、具体实现步骤

1. 对话上下文与作业状态存储

  • 基于LangChain的对话内存扩展自定义字段,用来记录作业跟踪状态(待提醒/已提醒待回复/已完成/需再次提醒)和下次提醒时间戳,多用户场景推荐用SQLChatMessageHistory实现持久化存储
  • 示例代码:
from langchain.memory import ConversationBufferMemory
from langchain.memory.chat_message_histories import SQLChatMessageHistory
from datetime import datetime, timedelta

# 扩展内存结构,添加作业跟踪字段
class HomeworkTrackingMemory(ConversationBufferMemory):
    def __init__(self, user_id, **kwargs):
        # 绑定用户专属的对话历史存储
        chat_history = SQLChatMessageHistory(session_id=user_id, connection_string="sqlite:///chat_history.db")
        super().__init__(chat_memory=chat_history, **kwargs)
        self.homework_status = "pending"  # pending/reminded/completed/need_remind_again
        self.next_remind_time = None
        self.max_remind_count = 3
        self.current_remind_count = 0

# 初始化某用户的内存
user_memory = HomeworkTrackingMemory(user_id="student_001", memory_key="chat_history", return_messages=True)

2. 定时提醒触发逻辑

有两种触发方式,可根据场景选择:

  • 对话内触发:每次学生发起对话时,先检查当前时间是否超过next_remind_time,同时判断提醒次数未达上限,满足条件则自动插入提醒话术
  • 后台定时任务:用APScheduler调度工具,根据存储的next_remind_time主动推送提醒(需结合Websocket或消息通知机制)
  • 对话内触发示例:
def check_and_trigger_remind(memory):
    current_time = datetime.now()
    if (memory.homework_status == "need_remind_again" 
        and current_time >= memory.next_remind_time 
        and memory.current_remind_count < memory.max_remind_count):
        # 插入提醒消息到对话历史
        memory.chat_memory.add_ai_message("请问你完成之前布置的作业了吗?")
        memory.homework_status = "reminded"
        memory.current_remind_count += 1
        return True
    return False

3. 学生回复意图识别

直接通过LLM做意图分类,用简洁的prompt明确任务,避免歧义:

  • 示例prompt:
请根据用户回复判断对应的作业状态,仅返回编号:
1. 已完成:明确表示作业已做完
2. 未完成需延后:未完成且希望过段时间再提醒
3. 未完成需协助:未完成且希望立即得到作业相关帮助
4. 无关内容:回复与作业完成情况无关

用户回复:{{user_input}}
  • 解析回复后更新状态的代码示例:
def update_homework_status(memory, llm, user_input):
    prompt = f"""请根据用户回复判断对应的作业状态,仅返回编号:
1. 已完成:明确表示作业已做完
2. 未完成需延后:未完成且希望过段时间再提醒
3. 未完成需协助:未完成且希望立即得到作业相关帮助
4. 无关内容:回复与作业完成情况无关

用户回复:{user_input}"""
    response = llm.predict(prompt).strip()
    
    if response == "1":
        memory.homework_status = "completed"
        memory.next_remind_time = None
    elif response == "2":
        memory.homework_status = "need_remind_again"
        # 默认设置2小时后再次提醒,可根据学生需求调整
        memory.next_remind_time = datetime.now() + timedelta(hours=2)
    elif response == "3":
        # 切换到作业辅导流程,暂不设置后续提醒
        memory.homework_status = "reminded"
    elif response == "4":
        # 不改变当前跟踪状态
        pass

4. 整合到LangChain对话链

将状态检查和更新逻辑嵌入对话交互的前置、后置环节:

from langchain.chains import ConversationChain
from langchain.llms import OpenAI

llm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm, memory=user_memory, verbose=True)

def handle_user_input(user_id, user_input):
    # 初始化/获取用户的作业跟踪内存
    memory = HomeworkTrackingMemory(user_id=user_id, memory_key="chat_history", return_messages=True)
    # 前置检查:触发提醒(如果满足条件)
    check_and_trigger_remind(memory)
    # 处理用户输入生成回复
    ai_response = conversation.predict(input=user_input)
    # 后置更新:根据用户回复调整作业跟踪状态
    update_homework_status(memory, llm, user_input)
    return ai_response

三、关键优化点

  • 状态持久化:多用户场景下必须用数据库存储作业跟踪状态,不能仅依赖内存,避免服务重启后数据丢失
  • 提醒频率控制:设置最大提醒次数阈值,防止过度打扰学生,同时支持学生自定义提醒间隔
  • 意图识别准确性:可在prompt中加入few-shot示例(比如“示例:用户说‘我还没写完,下午再问我’→返回2”),提升LLM分类准确率

内容的提问来源于stack exchange,提问作者m0j1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 23:55:20