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

news/2025/2/28 3:28:31/

随着人工智能技术的不断进步,越来越多的企业开始借助 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/3020warnings.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_a39d8e624ae845b6a1e02bArgs:start_time: 2025-02-24 10:00end_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_a39d8e624ae845b6a1e02bArgs:start_time: 2025-02-24 10:00end_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_a39d8e624ae845b6a1e02bArgs:start_time: 2025-02-24 10:00end_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_824c897caa2d40f98328a9Args:name: Room 1start_time: 2025-02-24 10:00end_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_fefded82be70420182322dArgs:start_time: 2025-02-24 10:00end_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_4637776f50e644d0889c6dArgs:name: Room 1start_time: 2025-02-24 10:00end_time: 2025-02-24 11:00
=================================[1m Tool Message [0m=================================
Name: book_roomBooking 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_d817bfbe8e9d4eb49aa8e9Args:start_time: 2025-02-24 14:00end_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_d817bfbe8e9d4eb49aa8e9Args:start_time: 2025-02-24 14:00end_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_1772161999ae43edb35d66Args:name: Room 1start_time: 2025-02-24 14:00end_time: 2025-02-24 16:00
=================================[1m Tool Message [0m=================================
Name: book_roomBooking successful
==================================[1m Ai Message [0m==================================已成功为您预订1号会议室,时间段为明天下午2点到4点。如果有任何其他需求,请告诉我。

http://www.ppmy.cn/news/1575403.html

相关文章

day7作业

编写一个如下场景: 有一个英雄Hero类,私有成员,攻击(Atx),防御(Defense),速度(Speed),生命值(Blood),以及所有的set get 方…

工程师 - VSCode的AI编码插件介绍: MarsCode

豆包 MarsCode MarsCode AI: Coding Assistant Code and Innovate Faster with AI 豆包 MarsCode - 编程助手 安装完成并使能后,会在下方状态栏上显示MarsCode AI。 安装完并重启VSCode后,要使用这个插件,需要注册一下账号。然后授权VSCod…

ipe网络安全

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 什么是IDS? IDS是英文"Intrusion Detection Systems"的缩写,中文意思是"入侵检测系统"。 大家还记得「网络安全」安…

Vite vs Webpack

1. Vite 比 Webpack 快在哪里? 开发模式的差异 Webpack:在开发环境中,Webpack 是先打包再启动开发服务器。这意味着所有的模块都需要在开发前进行打包,这会增加启动时间和构建时间。 Vite:Vite 则是直接启动开发服务器…

iOS Framework代码中加载图片资源

在Framework中,加载UIImage(named:"icon.png")时,老是失败, 换成 UIImage(contentsOfFile: filePath) 也是不对: if let filePath Bundle.main.path(forResource: "icon", ofType: "png"){ icon …

精准识别IP应用场景

基于全球领先的IP应用场景识别服务IPv4/IPv6全量数据库,为企业提供高精度、低延迟的场景化解析能力,助您构建更安全、智能的网络生态。 ​精准识别,毫秒响应 全量数据覆盖,依托全球最大的IP地址库,支持IPv4/IPv6双协…

Vue 3 + Vite 项目中配置代理解决开发环境中跨域请求问题

在 Vue 3 Vite 项目中,配置代理是解决开发环境中跨域请求问题的常见方法。通过在 Vite 的配置文件中设置代理,可以将前端请求转发到后端服务器,从而避免浏览器的同源策略限制。 1. 创建 Vue 3 Vite 项目 首先,确保你已经安装了…

MySQL数据库SQL语句分析用户活跃情况

数据库建表语句 用户表 (users) CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY,register_date DATE NOT NULL,user_name VARCHAR(255) NOT NULL );这个表用于存储用户的基本信息, user_id 是用户的唯一标识, register_date 记录用户注册…