網(wǎng)站首頁的重要性seo霸屏
隨著人工智能技術(shù)的不斷進(jìn)步,越來越多的企業(yè)開始借助 AI 助手來提高工作效率,尤其是在日常事務(wù)的自動(dòng)化處理中。比如,在許多公司里,會(huì)議室的預(yù)定是一個(gè)常見且頻繁的需求,通常需要員工手動(dòng)檢查空閑時(shí)間并做出選擇。而通過集成 AI 和自動(dòng)化工具,這個(gè)過程可以變得更加智能和高效。
本文將展示如何利用 LangChain 和 LangGraph 兩個(gè)強(qiáng)大的工具,構(gòu)建一個(gè)會(huì)議室預(yù)訂系統(tǒng)。這一系統(tǒng)能夠與用戶進(jìn)行自然語言交互,幫助用戶自動(dòng)預(yù)訂會(huì)議室,并確保預(yù)訂信息的準(zhǔn)確性。我們會(huì)詳細(xì)講解如何實(shí)現(xiàn)從查詢空閑會(huì)議室到確認(rèn)預(yù)訂的整個(gè)過程。
關(guān)鍵代碼
下面是實(shí)現(xiàn)該系統(tǒng)的核心代碼。在這個(gè)代碼段中,我們通過 LangChain 定義了幾個(gè)重要的工具,分別是:獲取所有會(huì)議室、查詢指定時(shí)間段內(nèi)可用的會(huì)議室和預(yù)訂會(huì)議室。
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()))
使用案例
會(huì)議室預(yù)訂案例1
config = {"configurable": {"thread_id": "abc123"}}
result = agent.invoke({"messages": [{"role": "user", "content": "幫我預(yù)定一個(gè)會(huì)議室"}]},config=config
)
for m in result['messages']:m.pretty_print()
================================[1m Human Message [0m=================================幫我預(yù)定一個(gè)會(huì)議室
==================================[1m Ai Message [0m==================================好的,我來幫您預(yù)定會(huì)議室。請告訴我您計(jì)劃的會(huì)議開始時(shí)間和結(jié)束時(shí)間。例如:14:00到16:00。
config = {"configurable": {"thread_id": "abc123"}}
result = agent.invoke({"messages": [{"role": "user", "content": "明天上午10點(diǎn)到11點(diǎn)"}]},config=config
)
for m in result['messages']:m.pretty_print()
================================[1m Human Message [0m=================================幫我預(yù)定一個(gè)會(huì)議室
==================================[1m Ai Message [0m==================================好的,我來幫您預(yù)定會(huì)議室。請告訴我您計(jì)劃的會(huì)議開始時(shí)間和結(jié)束時(shí)間。例如:14:00到16:00。
================================[1m Human Message [0m=================================明天上午10點(diǎn)到11點(diǎn)
==================================[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點(diǎn)到11點(diǎn)之間有以下會(huì)議室可供選擇:- Room 1
- Room 2您想要預(yù)定哪一個(gè)會(huì)議室呢?請告訴我會(huì)議室的名稱。
config = {"configurable": {"thread_id": "abc123"}}
result = agent.invoke({"messages": [{"role": "user", "content": "第一個(gè)"}]},config=config
)
for m in result['messages']:m.pretty_print()
================================[1m Human Message [0m=================================幫我預(yù)定一個(gè)會(huì)議室
==================================[1m Ai Message [0m==================================好的,我來幫您預(yù)定會(huì)議室。請告訴我您計(jì)劃的會(huì)議開始時(shí)間和結(jié)束時(shí)間。例如:14:00到16:00。
================================[1m Human Message [0m=================================明天上午10點(diǎn)到11點(diǎn)
==================================[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點(diǎn)到11點(diǎn)之間有以下會(huì)議室可供選擇:- Room 1
- Room 2您想要預(yù)定哪一個(gè)會(huì)議室呢?請告訴我會(huì)議室的名稱。
================================[1m Human Message [0m=================================第一個(gè)
==================================[1m Ai Message [0m==================================好的,您選擇了Room 1。請確認(rèn)您的預(yù)定信息:會(huì)議室為Room 1,時(shí)間是明天上午10點(diǎn)到11點(diǎn)。如果這些信息正確,我將為您完成預(yù)定。信息正確嗎?請回復(fù)“正確”或“不正確”。
config = {"configurable": {"thread_id": "abc123"}}
result = agent.invoke({"messages": [{"role": "user", "content": "確認(rèn)"}]},config=config
)
for m in result['messages']:m.pretty_print()
================================[1m Human Message [0m=================================幫我預(yù)定一個(gè)會(huì)議室
==================================[1m Ai Message [0m==================================好的,我來幫您預(yù)定會(huì)議室。請告訴我您計(jì)劃的會(huì)議開始時(shí)間和結(jié)束時(shí)間。例如:14:00到16:00。
================================[1m Human Message [0m=================================明天上午10點(diǎn)到11點(diǎn)
==================================[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點(diǎn)到11點(diǎn)之間有以下會(huì)議室可供選擇:- Room 1
- Room 2您想要預(yù)定哪一個(gè)會(huì)議室呢?請告訴我會(huì)議室的名稱。
================================[1m Human Message [0m=================================第一個(gè)
==================================[1m Ai Message [0m==================================好的,您選擇了Room 1。請確認(rèn)您的預(yù)定信息:會(huì)議室為Room 1,時(shí)間是明天上午10點(diǎn)到11點(diǎn)。如果這些信息正確,我將為您完成預(yù)定。信息正確嗎?請回復(fù)“正確”或“不正確”。
================================[1m Human Message [0m=================================確認(rèn)
==================================[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預(yù)定成功
==================================[1m Ai Message [0m==================================您的會(huì)議室預(yù)定已經(jīng)成功。預(yù)定的是Room 1,時(shí)間為明天上午10點(diǎn)到11點(diǎn)。如果有其他需要幫助的地方,請隨時(shí)告訴我。
會(huì)議室預(yù)訂案例2
config = {"configurable": {"thread_id": "abc1235"}}
result = agent.invoke({"messages": [{"role": "user", "content": "幫我訂明天上午10點(diǎn)到11點(diǎn)1號(hào)會(huì)議室"}]},config=config
)
for m in result['messages']:m.pretty_print()
================================[1m Human Message [0m=================================幫我訂明天上午10點(diǎn)到11點(diǎn)1號(hào)會(huì)議室
==================================[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點(diǎn)到11點(diǎn),1號(hào)會(huì)議室是可用的。您想要預(yù)訂1號(hào)會(huì)議室對嗎?
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==================================已成功為您預(yù)訂了明天上午10點(diǎn)到11點(diǎn)的1號(hào)會(huì)議室。
會(huì)議室預(yù)訂案例3
config = {"configurable": {"thread_id": "abc12345"}}
result = agent.invoke({"messages": [{"role": "user", "content": "幫我訂1號(hào)會(huì)議室"}]},config=config
)
for m in result['messages']:m.pretty_print()
================================[1m Human Message [0m=================================幫我訂1號(hào)會(huì)議室
==================================[1m Ai Message [0m==================================好的,我需要確認(rèn)一下您希望預(yù)訂1號(hào)會(huì)議室的具體時(shí)間段。請告訴我您打算從什么時(shí)候開始到什么時(shí)候結(jié)束?
config = {"configurable": {"thread_id": "abc12345"}}
result = agent.invoke({"messages": [{"role": "user", "content": "明天下午2點(diǎn)至4點(diǎn)"}]},config=config
)
for m in result['messages']:m.pretty_print()
================================[1m Human Message [0m=================================幫我訂1號(hào)會(huì)議室
==================================[1m Ai Message [0m==================================好的,我需要確認(rèn)一下您希望預(yù)訂1號(hào)會(huì)議室的具體時(shí)間段。請告訴我您打算從什么時(shí)候開始到什么時(shí)候結(jié)束?
================================[1m Human Message [0m=================================明天下午2點(diǎn)至4點(diǎn)
==================================[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點(diǎn)到4點(diǎn)之間,1號(hào)會(huì)議室是可用的。在繼續(xù)預(yù)訂前,請確認(rèn)以下信息是否正確:- 會(huì)議室:1號(hào)
- 開始時(shí)間:明天下午2點(diǎn)(2025年2月24日 14:00)
- 結(jié)束時(shí)間:明天下午4點(diǎn)(2025年2月24日 16:00)如果這些信息都正確,我將為您預(yù)訂1號(hào)會(huì)議室。請回復(fù)“正確”以確認(rèn)或提供修改的信息。
正確
config = {"configurable": {"thread_id": "abc12345"}}
result = agent.invoke({"messages": [{"role": "user", "content": "確認(rèn)"}]},config=config
)
for m in result['messages']:m.pretty_print()
================================[1m Human Message [0m=================================幫我訂1號(hào)會(huì)議室
==================================[1m Ai Message [0m==================================好的,我需要確認(rèn)一下您希望預(yù)訂1號(hào)會(huì)議室的具體時(shí)間段。請告訴我您打算從什么時(shí)候開始到什么時(shí)候結(jié)束?
================================[1m Human Message [0m=================================明天下午2點(diǎn)至4點(diǎn)
==================================[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點(diǎn)到4點(diǎn)之間,1號(hào)會(huì)議室是可用的。在繼續(xù)預(yù)訂前,請確認(rèn)以下信息是否正確:- 會(huì)議室:1號(hào)
- 開始時(shí)間:明天下午2點(diǎn)(2025年2月24日 14:00)
- 結(jié)束時(shí)間:明天下午4點(diǎn)(2025年2月24日 16:00)如果這些信息都正確,我將為您預(yù)訂1號(hào)會(huì)議室。請回復(fù)“正確”以確認(rèn)或提供修改的信息。
正確
================================[1m Human Message [0m=================================確認(rèn)
==================================[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==================================已成功為您預(yù)訂1號(hào)會(huì)議室,時(shí)間段為明天下午2點(diǎn)到4點(diǎn)。如果有任何其他需求,請告訴我。