使用大语言模型对接OA系统,实现会议室预定功能

随着人工智能技术的不断进步,越来越多的企业开始借助 AI 助手来提高工作效率,尤其是在日常事务的自动化处理中。比如,在许多公司里,会议室的预定是一个常见且频繁的需求,通常需要员工手动检查空闲时间并做出选择。而通过集成 AI 和自动化工具,这个过程可以变得更加智能和高效。

本文将展示如何利用 LangChain 和 LangGraph 两个强大的工具,构建一个会议室预订系统。这一系统能够与用户进行自然语言交互,帮助用户自动预订会议室,并确保预订信息的准确性。我们会详细讲解如何实现从查询空闲会议室到确认预订的整个过程。

关键代码

下面是实现该系统的核心代码。在这个代码段中,我们通过 LangChain 定义了几个重要的工具,分别是:获取所有会议室、查询指定时间段内可用的会议室和预订会议室。

from config import *
from datetime import datetime
from langchain_core.tools import tool
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI
from langgraph.types import Command, interrupt
from langgraph.prebuilt import create_react_agent
from IPython.display import Image, display
from langgraph.checkpoint.memory import InMemorySaver
/Users/zhengjie/Documents/learn-langchain/venv/lib/python3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
  warnings.warn(
@tool(parse_docstring=True)
def get_all_rooms() -> list:
    """Get a list of all available meeting rooms.

    Returns:
        list: A list of all available meeting rooms.
    """
    return ["Room 1", "Room 2", "Room 3", "888 Multimedia Conference Room"]


@tool(parse_docstring=True)
def get_available_rooms(start_time: str, end_time: str) -> list:
    """Get a list of all available meeting rooms during the specified time period.

    Args:
        start_time (str): The start time of the booking (e.g., "2025-02-23 14:00").
        end_time (str): The end time of the booking (e.g., "2025-02-23 15:00").

    Returns:
        list: A list of all available meeting rooms during the specified time period.
    """
    return ["Room 1", "Room 2"]


@tool(parse_docstring=True)
def book_room(name: str, start_time: str, end_time: str) -> str:
    """Book a specified meeting room for the user, only after the user confirms the details.

    Args:
        name (str): The name of the meeting room to be booked.
        start_time (str): The start time of the booking (e.g., "2025-02-23 14:00").
        end_time (str): The end time of the booking (e.g., "2025-02-23 15:00").

    Returns:
        str: A message indicating whether the booking was successful or failed.
    """
    if name in ["Room 1", "Room 2", "Room 3", "888 Multimedia Conference Room"]:
        if name in ["Room 1", "Room 2"]:
            return "Booking successful"
        else:
            return "The room is not available"
    else:
        return "Invalid room name"
tools = [get_all_rooms, get_available_rooms, book_room]
llm = ChatOpenAI(model="qwen-max")
memory = InMemorySaver()
prompt = SystemMessage(
    f"You are an AI assistant. The current time is: {datetime.now().strftime('%Y-%m-%d %H:%M')}. "
    f"Please assist the user in booking a meeting room by confirming the meeting time and room step by step. "
    f"Keep your language as concise as possible.\n"
    f"The most important thing is that before using book_room, make sure to confirm the information with the user one last time. "
    f"Only proceed with book_room if everything is correct. Do not skip this step."
)
agent = create_react_agent(llm, tools, checkpointer=memory, prompt=prompt)
prompt.pretty_print()
================================[1m System Message [0m================================

You are an AI assistant. The current time is: 2025-02-23 21:58. Please assist the user in booking a meeting room by confirming the meeting time and room step by step. Keep your language as concise as possible.
The most important thing is that before using book_room, make sure to confirm the information with the user one last time. Only proceed with book_room if everything is correct. Do not skip this step.
display(Image(agent.get_graph().draw_mermaid_png()))

请添加图片描述

使用案例

会议室预订案例1

config = {"configurable": {"thread_id": "abc123"}}
result = agent.invoke(
    {"messages": [{"role": "user", "content": "帮我预定一个会议室"}]},
    config=config
)
for m in result['messages']:
    m.pretty_print()
================================[1m Human Message [0m=================================

帮我预定一个会议室
==================================[1m Ai Message [0m==================================

好的,我来帮您预定会议室。请告诉我您计划的会议开始时间和结束时间。例如:14:00到16:00。
config = {"configurable": {"thread_id": "abc123"}}
result = agent.invoke(
    {"messages": [{"role": "user", "content": "明天上午10点到11点"}]},
    config=config
)
for m in result['messages']:
    m.pretty_print()
================================[1m Human Message [0m=================================

帮我预定一个会议室
==================================[1m Ai Message [0m==================================

好的,我来帮您预定会议室。请告诉我您计划的会议开始时间和结束时间。例如:14:00到16:00。
================================[1m Human Message [0m=================================

明天上午10点到11点
==================================[1m Ai Message [0m==================================
Tool Calls:
  get_available_rooms (call_a39d8e624ae845b6a1e02b)
 Call ID: call_a39d8e624ae845b6a1e02b
  Args:
    start_time: 2025-02-24 10:00
    end_time: 2025-02-24 11:00
=================================[1m Tool Message [0m=================================
Name: get_available_rooms

["Room 1", "Room 2"]
==================================[1m Ai Message [0m==================================

明天上午10点到11点之间有以下会议室可供选择:

- Room 1
- Room 2

您想要预定哪一个会议室呢?请告诉我会议室的名称。
config = {"configurable": {"thread_id": "abc123"}}
result = agent.invoke(
    {"messages": [{"role": "user", "content": "第一个"}]},
    config=config
)
for m in result['messages']:
    m.pretty_print()
================================[1m Human Message [0m=================================

帮我预定一个会议室
==================================[1m Ai Message [0m==================================

好的,我来帮您预定会议室。请告诉我您计划的会议开始时间和结束时间。例如:14:00到16:00。
================================[1m Human Message [0m=================================

明天上午10点到11点
==================================[1m Ai Message [0m==================================
Tool Calls:
  get_available_rooms (call_a39d8e624ae845b6a1e02b)
 Call ID: call_a39d8e624ae845b6a1e02b
  Args:
    start_time: 2025-02-24 10:00
    end_time: 2025-02-24 11:00
=================================[1m Tool Message [0m=================================
Name: get_available_rooms

["Room 1", "Room 2"]
==================================[1m Ai Message [0m==================================

明天上午10点到11点之间有以下会议室可供选择:

- Room 1
- Room 2

您想要预定哪一个会议室呢?请告诉我会议室的名称。
================================[1m Human Message [0m=================================

第一个
==================================[1m Ai Message [0m==================================

好的,您选择了Room 1。请确认您的预定信息:会议室为Room 1,时间是明天上午10点到11点。如果这些信息正确,我将为您完成预定。

信息正确吗?
  
请回复“正确”或“不正确”。
config = {"configurable": {"thread_id": "abc123"}}
result = agent.invoke(
    {"messages": [{"role": "user", "content": "确认"}]},
    config=config
)
for m in result['messages']:
    m.pretty_print()
================================[1m Human Message [0m=================================

帮我预定一个会议室
==================================[1m Ai Message [0m==================================

好的,我来帮您预定会议室。请告诉我您计划的会议开始时间和结束时间。例如:14:00到16:00。
================================[1m Human Message [0m=================================

明天上午10点到11点
==================================[1m Ai Message [0m==================================
Tool Calls:
  get_available_rooms (call_a39d8e624ae845b6a1e02b)
 Call ID: call_a39d8e624ae845b6a1e02b
  Args:
    start_time: 2025-02-24 10:00
    end_time: 2025-02-24 11:00
=================================[1m Tool Message [0m=================================
Name: get_available_rooms

["Room 1", "Room 2"]
==================================[1m Ai Message [0m==================================

明天上午10点到11点之间有以下会议室可供选择:

- Room 1
- Room 2

您想要预定哪一个会议室呢?请告诉我会议室的名称。
================================[1m Human Message [0m=================================

第一个
==================================[1m Ai Message [0m==================================

好的,您选择了Room 1。请确认您的预定信息:会议室为Room 1,时间是明天上午10点到11点。如果这些信息正确,我将为您完成预定。

信息正确吗?
  
请回复“正确”或“不正确”。
================================[1m Human Message [0m=================================

确认
==================================[1m Ai Message [0m==================================
Tool Calls:
  book_room (call_824c897caa2d40f98328a9)
 Call ID: call_824c897caa2d40f98328a9
  Args:
    name: Room 1
    start_time: 2025-02-24 10:00
    end_time: 2025-02-24 11:00
=================================[1m Tool Message [0m=================================
Name: book_room

预定成功
==================================[1m Ai Message [0m==================================

您的会议室预定已经成功。预定的是Room 1,时间为明天上午10点到11点。

如果有其他需要帮助的地方,请随时告诉我。

会议室预订案例2

config = {"configurable": {"thread_id": "abc1235"}}
result = agent.invoke(
    {"messages": [{"role": "user", "content": "帮我订明天上午10点到11点1号会议室"}]},
    config=config
)
for m in result['messages']:
    m.pretty_print()
================================[1m Human Message [0m=================================

帮我订明天上午10点到11点1号会议室
==================================[1m Ai Message [0m==================================
Tool Calls:
  get_available_rooms (call_fefded82be70420182322d)
 Call ID: call_fefded82be70420182322d
  Args:
    start_time: 2025-02-24 10:00
    end_time: 2025-02-24 11:00
=================================[1m Tool Message [0m=================================
Name: get_available_rooms

["Room 1", "Room 2"]
==================================[1m Ai Message [0m==================================

明天上午10点到11点,1号会议室是可用的。您想要预订1号会议室对吗?
Tool Calls:
  book_room (call_4637776f50e644d0889c6d)
 Call ID: call_4637776f50e644d0889c6d
  Args:
    name: Room 1
    start_time: 2025-02-24 10:00
    end_time: 2025-02-24 11:00
=================================[1m Tool Message [0m=================================
Name: book_room

Booking successful
==================================[1m Ai Message [0m==================================

已成功为您预订了明天上午10点到11点的1号会议室。

会议室预订案例3

config = {"configurable": {"thread_id": "abc12345"}}
result = agent.invoke(
    {"messages": [{"role": "user", "content": "帮我订1号会议室"}]},
    config=config
)
for m in result['messages']:
    m.pretty_print()
================================[1m Human Message [0m=================================

帮我订1号会议室
==================================[1m Ai Message [0m==================================

好的,我需要确认一下您希望预订1号会议室的具体时间段。请告诉我您打算从什么时候开始到什么时候结束?
config = {"configurable": {"thread_id": "abc12345"}}
result = agent.invoke(
    {"messages": [{"role": "user", "content": "明天下午2点至4点"}]},
    config=config
)
for m in result['messages']:
    m.pretty_print()
================================[1m Human Message [0m=================================

帮我订1号会议室
==================================[1m Ai Message [0m==================================

好的,我需要确认一下您希望预订1号会议室的具体时间段。请告诉我您打算从什么时候开始到什么时候结束?
================================[1m Human Message [0m=================================

明天下午2点至4点
==================================[1m Ai Message [0m==================================
Tool Calls:
  get_available_rooms (call_d817bfbe8e9d4eb49aa8e9)
 Call ID: call_d817bfbe8e9d4eb49aa8e9
  Args:
    start_time: 2025-02-24 14:00
    end_time: 2025-02-24 16:00
=================================[1m Tool Message [0m=================================
Name: get_available_rooms

["Room 1", "Room 2"]
==================================[1m Ai Message [0m==================================

明天下午2点到4点之间,1号会议室是可用的。在继续预订前,请确认以下信息是否正确:

- 会议室:1号
- 开始时间:明天下午2点(2025年2月24日 14:00)
- 结束时间:明天下午4点(2025年2月24日 16:00)

如果这些信息都正确,我将为您预订1号会议室。
  
请回复“正确”以确认或提供修改的信息。
正确
config = {"configurable": {"thread_id": "abc12345"}}
result = agent.invoke(
    {"messages": [{"role": "user", "content": "确认"}]},
    config=config
)
for m in result['messages']:
    m.pretty_print()
================================[1m Human Message [0m=================================

帮我订1号会议室
==================================[1m Ai Message [0m==================================

好的,我需要确认一下您希望预订1号会议室的具体时间段。请告诉我您打算从什么时候开始到什么时候结束?
================================[1m Human Message [0m=================================

明天下午2点至4点
==================================[1m Ai Message [0m==================================
Tool Calls:
  get_available_rooms (call_d817bfbe8e9d4eb49aa8e9)
 Call ID: call_d817bfbe8e9d4eb49aa8e9
  Args:
    start_time: 2025-02-24 14:00
    end_time: 2025-02-24 16:00
=================================[1m Tool Message [0m=================================
Name: get_available_rooms

["Room 1", "Room 2"]
==================================[1m Ai Message [0m==================================

明天下午2点到4点之间,1号会议室是可用的。在继续预订前,请确认以下信息是否正确:

- 会议室:1号
- 开始时间:明天下午2点(2025年2月24日 14:00)
- 结束时间:明天下午4点(2025年2月24日 16:00)

如果这些信息都正确,我将为您预订1号会议室。
  
请回复“正确”以确认或提供修改的信息。
正确
================================[1m Human Message [0m=================================

确认
==================================[1m Ai Message [0m==================================
Tool Calls:
  book_room (call_1772161999ae43edb35d66)
 Call ID: call_1772161999ae43edb35d66
  Args:
    name: Room 1
    start_time: 2025-02-24 14:00
    end_time: 2025-02-24 16:00
=================================[1m Tool Message [0m=================================
Name: book_room

Booking successful
==================================[1m Ai Message [0m==================================

已成功为您预订1号会议室,时间段为明天下午2点到4点。如果有任何其他需求,请告诉我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/975511.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

游戏引擎学习第113天

仓库:https://gitee.com/mrxiao_com/2d_game_2 黑板:优化的基本过程 在游戏编程中,优化是一个非常重要的学习内容,尤其是想要成为专业开发者时。优化的核心是理解代码的执行速度,以及如何提升其性能。在这个阶段,已经…

Qt 中的线程池QRunnable和QThreadPool

Qt 中的线程池QRunnable和QThreadPool 一、QThreadPool类介绍 QThreadPool 是 Qt 框架中用于管理线程池的类,它提供了一种高效的方式来管理和复用线程,避免频繁创建和销毁线程带来的开销。 1. 基本概念 QThreadPool 是一个全局的线程池,它…

C++中结构体与结构体变量 和 类与对象的区别

具体区别如下: 结构体 -> 结构体变量 { 结构体:struct student{ 具体是多少,年龄,名字,性别,成绩 } 结构体变量: stu{ 名字:张三,年龄:18&#…

一周学会Flask3 Python Web开发-flask3模块化blueprint配置

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们在项目开发的时候,多多少少会划分几个或者几十个业务模块,如果把这些模块的视图方法都写在app.py…

11套免费web登录页面模板分享

1.纯色 2.纯色 3.纯色 4.联系我们 5.纯色 6.动画 7.现代 8.现代 9.单调 10.现代 11.简约

Fences 5深度解析:一键打造超高效整洁桌面

在信息爆炸的时代,电脑桌面往往成为各种文件、图标和快捷方式的“聚集地”。杂乱无章的桌面不仅影响视觉体验,还可能降低工作效率。而Fences 5,这款由Stardock公司精心打造的桌面管理工具,凭借其强大的功能和便捷的操作,成为了众多用户整理桌面的得力助手。本文将带大家深…

一篇docker从入门到精通

Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙盒机制,相互之间不会有任何接口(类似 iP…

【深度学习】Unet的基础介绍

U-Net是一种用于图像分割的深度学习模型,特别适合医学影像和其他需要分割细节的任务。如图: Unet论文原文 为什么叫U-Net? U-Net的结构像字母“U”,所以得名。它的结构由两个主要部分组成: 下采样(编码…

医疗AI领域中GPU集群训练的关键技术与实践经验探究(上)

医疗AI领域中GPU集群训练的关键技术与实践经验探究(上) 一、引言 1.1 研究背景与意义 在科技飞速发展的当下,医疗 AI 作为人工智能技术与医疗领域深度融合的产物,正引领着医疗行业的深刻变革。近年来,医疗 AI 在疾病诊断、药物研发、健康管理等诸多方面取得了显著进展,…

使用matplotlib绘制柱状图并在下面使用表格显示数值

使用matplotlib绘制柱状图并在下面使用表格显示数值 1、效果 2、流程 1、数据准备 2. 创建可视化布局 3.、绘制柱状图 4、创建表格 5、设置字体大小、标题、图例 6、显示图表3、代码 import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpec import nump…

Windows11安装GPU版本Pytorch2.6教程

1: 准备工作 针对已经安装好的Windows11系统,先检查Nvidia驱动和使用的CUDA版本情况。先打开Windows PowerShell,通过nvidia-smi命令查看GPU的情况,结果如下图1所示,从结果中可知使用的CUDA版本为12.8。 图1:检测安装…

《Spring实战》(第6版) 第3章 使用数据

第3章 使用数据 使用Spring的JdbcTemplate;创建Spring Data JDBC存储库;使用Spring Data声明JPA存储库; 本章对Taco Cloud应用添加对数据库持久化的支持,关注JDBC和JPA。 3.1 使用JDBC读取和写入数据 Spring对JDBC的支持要归功…

设计模式 - Singleton pattern 单例模式

文章目录 定义单例模式的实现构成构成UML图 单例模式的六种实现懒汉式-线程不安全懒汉式-线程安全饿汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现 总结其他设计模式文章:最后 定义 单例模式是一种创建型设计模式,它用来保证一个类只有一个实…

出行项目案例

spark和kafka主要通过Scala实现,Hadoop和HBase主要基于java实现。 通过该项目,主要达到以下目的: (1)通用的数据处理流程,入门大数据领域 (2)真实体验大数据开发工程师的工作 &a…

从零开始制作一个漂亮的悬浮按钮

0.1血版 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> &l…

安全面试2

文章目录 简单描述一下什么是水平越权&#xff0c;什么是垂直越权&#xff0c;我要发现这两类漏洞&#xff0c;那我代码审计要注意什么地方水平越权&#xff1a;垂直越权&#xff1a;水平越权漏洞的审计重点垂直越权漏洞的审计重点 解释一下ssrf漏洞原理攻击场景修复方法 横向移…

数字电子技术基础(二十一)——双极型三极管的开关特性

目录 1 半导体三极管的开关特性 1.1 双极性三极管的开关特性 1.2 双极型三极管的基本开关电路 1.3 三极管的开关等效电路 1.4 双极型三极管的动态开关特性 TTL门电路是一种基于双极型晶体管的数字逻辑电路&#xff0c;在20世纪60年代到80年代之间&#xff0c;TTL门电路是应…

足疗店会员管理系统,足疗养生全方位会员管理解决方案,佳易王试用版养生会所足疗店推拿按摩会员管理系统操作教程

一、概述 本实例以佳易王试用版养生会所足疗店推拿按摩会员管理系统17.1版本为例说明&#xff0c;其他版本可参考本实例。试用版软件资源可到文章最后了解&#xff0c;下载的文件为压缩包文件&#xff0c;请使用免费版的解压工具解压即可试用。 软件特点&#xff1a; 1、功能…

【HarmonyOS Next】拒绝权限二次申请授权处理

【HarmonyOS Next】拒绝权限二次申请授权处理 一、问题背景&#xff1a; 在鸿蒙系统中&#xff0c;对于用户权限的申请&#xff0c;会有三种用户选择方式&#xff1a; 1.单次使用允许 2.使用应用期间&#xff08;长时&#xff09;允许 3.不允许 当用户选择不允许后&#xff0…

论文笔记(七十二)Reward Centering(四)

Reward Centering&#xff08;四&#xff09; 文章概括摘要附录A 伪代码 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.09999…