开源项目 Panel 的最新版本 1.3 刚刚引入了激动人心的新功能,即聊天界面小部件。这项新功能开辟了无限可能,使创建 AI 聊天机器人比以往任何时候都更加容易和用户友好。
在本文中,您将学习如何使用 ChatInterface 小部件来构建
- 一个基本聊天机器人
- 一个基于 OpenAI ChatGPT 的 AI 聊天机器人
- 一个基于 LangChain 的 AI 聊天机器人
在开始之前,您需要安装 Panel(任何大于 1.3.0 的版本)以及您可能需要的其他软件包,例如 jupyterlab、openai 和 langchain。
现在您已准备好开始!
使用 ChatInterface 小部件
全新的 ChatInterface 小部件是一个高级小部件,提供用户友好的聊天界面来发送消息,并具有四个内置操作
- 发送:将消息发送到聊天日志
- 重新运行:重新发送最近的用户消息
- 撤销:删除最近的消息
- 清除:清除所有聊天消息
想知道 `ChatInterface` 在幕后是如何工作的吗?它是一个高级小部件,它围绕中间级小部件 `ChatFeed` 包装,`ChatFeed` 管理一个 `ChatMessage` 项目列表,用于显示聊天消息。请查看有关 ChatInterface、ChatFeed 和 ChatMessage 的文档,以了解更多信息。
1. 构建一个基本聊天机器人
使用 `pn.chat.ChatInterface`,我们可以将消息发送到聊天界面,但系统应该如何回复呢?我们可以定义一个 `callback` 函数!
在此示例中,我们的 `callback` 函数只是简单地回显用户消息。您是否已经看到它变得更加实用?
如何使用 ChatInterface 小部件来回显消息
import panel as pn
pn.extension()
def callback(contents: str, user: str, instance: pn.chat.ChatInterface):
message = f"Echoing {user}: {contents}"
return message
chat_interface = pn.chat.ChatInterface(callback=callback, callback_user="System")
chat_interface.send("Send a message to receive an echo!", user="System", respond=False)
chat_interface.servable()
要服务应用程序,请运行 `panel serve app.py` 或 `panel serve app.ipynb`。
2. 构建一个基于 ChatGPT 的 AI 聊天机器人
我们如何使用 OpenAI ChatGPT 来回复消息?我们只需在 `callback` 函数中调用 OpenAI API 即可。
在您的环境中安装 `openai`,并将您的 OpenAI API 密钥添加到脚本中。请注意,在此示例中,我们在函数中添加了 `async` 以允许在单个线程内进行协作式多任务处理,并允许 IO 任务在后台进行。这确保了我们的应用程序在等待 OpenAI API 响应时能够平稳运行。Async 使并发执行成为可能,使我们能够在等待时执行其他任务,并确保应用程序响应迅速。
如何使用 ChatInterface 小部件来使用 OpenAI 的 GPT-3 API 创建聊天机器人
import openai
import panel as pn
pn.extension()
openai.api_key = "Add your key here"
async def callback(contents: str, user: str, instance: pn.chat.ChatInterface):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": contents}],
stream=True,
)
message = ""
for chunk in response:
message += chunk["choices"][0]["delta"].get("content", "")
yield message
chat_interface = pn.chat.ChatInterface(callback=callback, callback_user="ChatGPT")
chat_interface.send(
"Send a message to get a reply from ChatGPT!", user="System", respond=False
)
chat_interface.servable()
3. 构建一个基于 LangChain 的 AI 聊天机器人
Panel ChatInterface 还与 LangChain 无缝集成,利用 LangChain 全方位的功能。
以下是如何使用 LangChain 的 `ConversationChain` 和 `ConversationBufferMemory` 来存储消息并将以前的消息传递给 OpenAI API 的示例。
同样,请记住确保在您的环境中安装 `langchain`,并在脚本中添加您的 OpenAI API 密钥。
请注意,在我们深入研究 LangChain 代码之前,我们定义了一个 `callback_handler`,因为 LangChain 接口没有从生成器流式传输的方法,因此我们需要使用 `pn.chat.langchain.PanelCallbackHandler` 包装 LangChain 接口,该接口继承自 `langchain.callbacks.base.BaseCallbackHandler`。有关更多信息,请查看 文档。
如何使用 ChatInterface 小部件来使用 OpenAI 的 GPT-3 API 和 LangChain 创建聊天机器人
import os
import panel as pn
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
pn.extension()
os.environ["OPENAI_API_KEY"] = "Type your API key here"
async def callback(contents: str, user: str, instance: pn.chat.ChatInterface):
await chain.apredict(input=contents)
chat_interface = pn.chat.ChatInterface(callback=callback, callback_user="ChatGPT")
callback_handler = pn.chat.langchain.PanelCallbackHandler(chat_interface)
llm = ChatOpenAI(streaming=True, callbacks=[callback_handler])
memory = ConversationBufferMemory()
chain = ConversationChain(llm=llm, memory=memory)
chat_interface.send(
"Send a message to get a reply from ChatGPT!", user="System", respond=False)
chat_interface.servable()
结论
在这篇博文中,我们深入研究了 Panel 中激动人心的新功能 ChatInterface 小部件。我们首先指导您使用 `pn.chat.ChatInterface` 构建一个基本聊天机器人。然后,我们通过无缝集成 OpenAI ChatGPT 来提升聊天机器人的功能。为了进一步加深您的理解,我们还探讨了 LangChain 与 Panel 的 ChatInterface 的集成。如果您渴望探索更多聊天机器人示例,请随时访问这个 GitHub 存储库,并考虑贡献您自己的示例。
有了这些见解和实践示例,您现在已做好准备,开始在 Panel 中构建 AI 聊天机器人的旅程。祝您编码愉快!
所有这些工具都是开源的,所有人都可以免费使用,但是如果您想在 Anaconda 的 AI 和 Python 应用程序专家帮助下开始使用,请与我们的销售团队代表联系,联系方式为 [email protected]。