Office365工具包
本笔记本介绍了如何将LangChain连接到Office365的电子邮件和日历。
要使用此工具包,您需要设置您的凭据,详细说明请参阅Microsoft Graph身份验证和授权概述。一旦您收到了CLIENT_ID和CLIENT_SECRET,您可以在下面的环境变量中输入它们。
pip install --upgrade O365 > /dev/null
pip install beautifulsoup4 > /dev/null # 这是可选的,但对于解析HTML消息很有用
分配环境变量
工具包将读取CLIENT_ID和CLIENT_SECRET环境变量以对用户进行身份验证,因此您需要在此处设置它们。您还需要设置您的OPENAI_API_KEY以便稍后使用代理。
# 在这里设置环境变量
创建工具包并获取工具
首先,您需要创建工具包,以便稍后可以访问其工具。
from langchain.agents.agent_toolkits import O365Toolkit
toolkit = O365Toolkit()
tools = toolkit.get_tools()
tools
[O365SearchEvents(name='events_search', description=" 使用此工具搜索用户的日历事件。输入必须是搜索查询的开始和结束日期时间。输出是用户日历中在开始和结束时间之间的所有事件的JSON列表。您可以假设用户不能在现有会议上安排任何会议,并且用户在会议期间都很忙。没有事件的时间对用户来说是空闲的。 ", args_schema=<class 'langchain.tools.office365.events_search.SearchEventsInput'>, return_direct=False, verbose=False, callbacks=None, callback_manager=None, handle_tool_error=False, account=Account Client Id: f32a022c-3c4c-4d10-a9d8-f6a9a9055302),
O365CreateDraftMessage(name='create_email_draft', description='使用此工具创建带有提供的消息字段的草稿电子邮件。', args_schema=<class 'langchain.tools.office365.create_draft_message.CreateDraftMessageSchema'>, return_direct=False, verbose=False, callbacks=None, callback_manager=None, handle_tool_error=False, account=Account Client Id: f32a022c-3c4c-4d10-a9d8-f6a9a9055302),
O365SearchEmails(name='messages_search', description='使用此工具搜索电子邮件消息。输入必须是有效的Microsoft Graph v1.0 $search查询。输出是所请求资源的JSON列表。', args_schema=<class 'langchain.tools.office365.messages_search.SearchEmailsInput'>, return_direct=False, verbose=False, callbacks=None, callback_manager=None, handle_tool_error=False, account=Account Client Id: f32a022c-3c4c-4d10-a9d8-f6a9a9055302),
O365SendEvent(name='send_event', description='使用此工具创建并发送带有提供的事件字段的事件。', args_schema=<class 'langchain.tools.office365.send_event.SendEventSchema'>, return_direct=False, verbose=False, callbacks=None, callback_manager=None, handle_tool_error=False, account=Account Client Id: f32a022c-3c4c-4d10-a9d8-f6a9a9055302),
O365SendMessage(name='send_email', description='使用此工具发送带有提供的消息字段的电子邮件。', args_schema=<class 'langchain.tools.office365.send_message.SendMessageSchema'>, return_direct=False, verbose=False, callbacks=None, callback_manager=None, handle_tool_error=False, account=Account Client Id: f32a022c-3c4c-4d10-a9d8-f6a9a9055302)]
在代理中使用
from langchain import OpenAI
from langchain.agents import initialize_agent, AgentType
llm = OpenAI(temperature=0)
agent = initialize_agent(
tools=toolkit.get_tools(),
llm=llm,
verbose=False,
agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
)
agent.run(
"请为我创建一封电子邮件草稿,内容是一封来自一只有思维的鹦鹉的信,她希望与她失散的朋友,一只猫,合作进行一些研究。但是在任何情况下都不要发送该消息。"
)
'成功创建了草稿电子邮件。'
agent.run(
"您能否在我的草稿文件夹中搜索并告诉我是否有关于合作的草稿?"
)
"我在您的草稿文件夹中找到了一份关于合作的草稿。它是在2023-06-16T18:22:17+0000发送的,主题是'合作请求'。"
agent.run(
"您能否安排一个30分钟的会议,与一只有思维的鹦鹉讨论2023年10月3日下午2点在东部时间的研究合作?"
)
/home/vscode/langchain-py-env/lib/python3.11/site-packages/O365/utils/windows_tz.py:639: PytzUsageWarning: The zone attribute is specific to pytz's interface; please migrate to a new time zone provider. For more details on how to do so, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
iana_tz.zone if isinstance(iana_tz, tzinfo) else iana_tz)
/home/vscode/langchain-py-env/lib/python3.11/site-packages/O365/utils/utils.py:463: PytzUsageWarning: The zone attribute is specific to pytz's interface; please migrate to a new time zone provider. For more details on how to do so, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
timezone = date_time.tzinfo.zone if date_time.tzinfo is not None else None
'我已安排了一个与一只有思维的鹦鹉讨论2023年10月3日下午2点在东部时间的研究合作的会议。如果您需要进行任何更改,请告诉我。'
agent.run(
"您能否告诉我2023年10月3日在东部时间是否有任何事件,如果有的话,请告诉我是否有任何与一只有思维的鹦鹉有关的事件?"
)
"是的,您在2023年10月3日有一个与一只有思维的鹦鹉有关的事件。该事件标题为'与有思维的鹦鹉的会议',计划从下午6:00到下午6:30。"