前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于 LangChain 构建智能日程规划机器人

基于 LangChain 构建智能日程规划机器人

原创
作者头像
IT蜗壳-Tango
发布于 2025-04-10 15:56:03
发布于 2025-04-10 15:56:03
17700
代码可运行
举报
文章被收录于专栏:机器学习机器学习
运行总次数:0
代码可运行

一、项目简介

📌 项目目标

构建一个智能日程助理机器人,支持以下能力:

  • 用户用自然语言输入日程需求(如“帮我安排下周一下午开会”)
  • 系统理解意图,调用内置工具(如日历、提醒器)进行日程添加
  • 支持查看已有日程、删除日程
  • 具有上下文记忆,支持多轮对话(如“我刚刚说的会议改到周二”)

🧠 核心技术

模块

技术

LangChain Agent

实现多轮动态推理与任务决策

Tool

自定义工具(如添加日程、查看日程)

Memory

对话历史记忆,用于上下文关联

OpenAI / LLM

用于自然语言理解与指令解析


二、环境准备

1. 安装依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install langchain openai python-dotenv

可选:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install dateparser  # 处理自然语言时间表达
pip install gradio      # 构建简单对话界面

2. 设置 OpenAI API Key

将你的 key 写入 .env 文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OPENAI_API_KEY=你的OpenAI密钥

然后在代码中加载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from dotenv import load_dotenv
load_dotenv()

三、项目结构概览

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
calendar_agent/
├── tools/
│   ├── calendar_tools.py      # 自定义工具
├── agent_calendar.py          # Agent 主体
├── calendar_data.py           # 模拟数据库
├── app.py                     # UI入口(Gradio)
├── .env

四、模块开发详解


Step 1:构建日程数据管理模块(calendar_data.py)

我们先建立一个简单的日程管理系统,以列表模拟数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# calendar_data.py
calendar_db = []

def add_event(date, description):
    calendar_db.append({"date": date, "description": description})
    return f"已添加:{date} - {description}"

def view_events():
    if not calendar_db:
        return "目前暂无任何日程安排。"
    return "\n".join([f"{item['date']}: {item['description']}" for item in calendar_db])

def remove_event(description):
    for i, item in enumerate(calendar_db):
        if description in item['description']:
            calendar_db.pop(i)
            return f"已删除日程:{item['description']}"
    return "未找到相关日程。"

Step 2:定义自定义工具(tools/calendar_tools.py)

LangChain 中的 Agent 可以调用 Tool,我们定义三个 Tool:添加日程、查看日程、删除日程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# tools/calendar_tools.py
from langchain.tools import Tool
from calendar_data import add_event, view_events, remove_event
import dateparser

# 添加日程
def add_event_tool(input: str):
    # 解析时间和描述
    dt = dateparser.parse(input)
    if dt:
        return add_event(str(dt), input)
    else:
        return "无法解析时间,请尝试更清晰的描述。"

# 查看日程
def view_events_tool(_: str = ""):
    return view_events()

# 删除日程
def remove_event_tool(input: str):
    return remove_event(input)

tools = [
    Tool(
        name="Add Calendar Event",
        func=add_event_tool,
        description="用于添加新的日程,用户会描述内容与时间"
    ),
    Tool(
        name="View Calendar",
        func=view_events_tool,
        description="查看所有日程"
    ),
    Tool(
        name="Delete Calendar Event",
        func=remove_event_tool,
        description="删除指定的日程内容"
    ),
]

Step 3:构建 Agent(agent_calendar.py)

使用 LangChain 的 initialize_agent 创建智能助理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# agent_calendar.py
from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
from langchain.memory import ConversationBufferMemory
from tools.calendar_tools import tools
import os
from dotenv import load_dotenv
load_dotenv()

llm = ChatOpenAI(temperature=0)

memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)

agent_executor = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
    memory=memory,
    verbose=True
)

def ask_agent(query):
    return agent_executor.run(query)

Agent 说明:

  • 使用 AgentType.CONVERSATIONAL_REACT_DESCRIPTION:可以根据上下文使用 Tool
  • memory_key="chat_history":使用多轮记忆
  • verbose=True:调试时可打印执行过程

Step 4:构建对话界面(app.py)

使用 Gradio 快速构建对话界面。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# app.py
import gradio as gr
from agent_calendar import ask_agent

def chat(input_text, history):
    output = ask_agent(input_text)
    history.append((input_text, output))
    return "", history

gr.ChatInterface(fn=chat).launch()

运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python app.py

体验界面:

  • 用户输入:“请帮我安排一个明天下午三点的会议”
  • 系统:解析出时间、内容,并调用添加日程工具
  • 用户再说:“把会议移到后天上午十点”
  • 系统:基于上下文使用删除 + 添加操作

五、实战示例演示

示例 1:添加日程

用户:

请帮我安排一个周五早上9点的英语口语课。

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
已添加:2025-04-11 09:00:00 - 请帮我安排一个周五早上9点的英语口语课。

示例 2:查看日程

用户:

我有哪些安排?

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2025-04-11 09:00:00: 请帮我安排一个周五早上9点的英语口语课。

示例 3:修改日程(上下文支持)

用户:

改成10点吧

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
已删除日程:请帮我安排一个周五早上9点的英语口语课。
已添加:2025-04-11 10:00:00 - 改成10点吧

六、核心原理解析

1️⃣ Agent 调度机制

LangChain Agent 会:

  • 使用 LLM 理解用户输入
  • 判断是否需要调用 Tool(如添加日程)
  • 根据 Tool 描述选择工具,提取参数
  • 调用后再用 LLM 组织输出

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
用户输入 → LLM 生成 Thought → 判断 Action → 调用 Tool → Observation → LLM 生成回答

2️⃣ Tool 的作用

  • 每个 Tool 是一种能力,如“添加日程”
  • 你可以添加更多 Tool,例如:
    • 查询天气 API
    • 查询节假日
    • 与 Google 日历集成

3️⃣ Memory 的重要性

  • 使用 ConversationBufferMemory 保存上下文对话
  • 能让机器人理解“刚才的会议”、“改成上午”这类模糊指令

七、项目扩展方向

✅ 添加自然语言解析器(NLU)

spaCyRasa 提前解析时间、地点等信息,增强理解力。


✅ 集成真实日历系统(如 Google Calendar)

替换 calendar_data.py 为调用 Google Calendar API,变成真正的智能日程助理。


✅ 增加提醒功能

结合语音、微信推送、钉钉机器人,提醒用户即将到来的日程。


✅ 接入语音识别(Speech-to-Text)

将机器人扩展为语音助手:输入为语音,输出为语音+文字。


✅ 添加 LLM 模型切换(支持本地 LLM)

支持选择 LLaMA2、ChatGLM 等本地模型。


八、总结

本教程带你构建了一个具备真实智能行为的 日程规划机器人,涵盖了:

  • LangChain 中 Agent / Tool / Memory 的实际应用
  • 多轮对话、指令理解、任务执行一体化
  • 可拓展、高可用的助理框架设计思路

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、项目简介
    • 📌 项目目标
    • 🧠 核心技术
  • 二、环境准备
    • 1. 安装依赖
    • 2. 设置 OpenAI API Key
  • 三、项目结构概览
  • 四、模块开发详解
    • Step 1:构建日程数据管理模块(calendar_data.py)
    • Step 2:定义自定义工具(tools/calendar_tools.py)
    • Step 3:构建 Agent(agent_calendar.py)
    • Agent 说明:
    • Step 4:构建对话界面(app.py)
  • 五、实战示例演示
    • 示例 1:添加日程
    • 示例 2:查看日程
    • 示例 3:修改日程(上下文支持)
  • 六、核心原理解析
    • 1️⃣ Agent 调度机制
    • 2️⃣ Tool 的作用
    • 3️⃣ Memory 的重要性
  • 七、项目扩展方向
    • ✅ 添加自然语言解析器(NLU)
    • ✅ 集成真实日历系统(如 Google Calendar)
    • ✅ 增加提醒功能
    • ✅ 接入语音识别(Speech-to-Text)
    • ✅ 添加 LLM 模型切换(支持本地 LLM)
  • 八、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档