当前位置: 首页 > news >正文

使用大语言模型对接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点。如果有任何其他需求,请告诉我。

相关文章:

  • 【SpringBoot】✈️本地集成支付宝支付功能
  • Redhat及其衍生系统安装python
  • 如何使用wolfsll库生成证书?
  • Xcode如何高效的一键重命名某个关键字
  • SOME/IP--协议英文原文讲解12(完结)
  • 【Git版本控制器】第四弹——分支管理,合并冲突,--no-ff,git stash
  • 大语言模型(LLM)提示词(Prompt)高阶撰写指南
  • 《论面向对象的建模及应用》审题技巧 - 系统架构设计师
  • Onvif协议NVR开发方案指南
  • SQL笔记#数据更新
  • [AI] [ComfyUI]理解ComyUI的基本原理及其图像生成技术
  • 深度学习技术全景图:从基础架构到工业落地的超级进化指南
  • flex布局自定义一行几栏,靠左对齐===grid布局
  • 三维空间中直线的多种表示方法
  • Python 基本语法的详细解释
  • 第1章大型互联网公司的基础架构——1.9 LSM Tree
  • 【每日八股】计算机网络篇(一):概述
  • 广东英语十二种应用文模版范文
  • 关于在mac中配置Java系统环境变量
  • MyBatis的CRUD
  • ip加端口可以做网站吗/2023年5月最新疫情
  • 做外贸网站要花多少钱/灰色行业推广平台
  • 教你做文案的网站推荐/福州seo外包公司
  • 用wordpress还是php/seo招聘要求
  • 优秀企业网站制作/产品市场推广方案范文
  • 装潢设计软件免费/青岛谷歌seo