开源项目 Panel 在最新的 1.3 版本中推出了一项令人兴奋且备受期待的新功能:Chat Interface widget(聊天界面组件)。这项新功能开启了无限可能,使 AI 聊天机器人的创建比以往任何时候都更易于访问和用户友好。

在这篇文章中,您将学习如何使用 ChatInterface widget,并构建:

  • 一个基本的聊天机器人
  • 一个由 OpenAI ChatGPT 驱动的 AI 聊天机器人
  • 一个由 LangChain 驱动的 AI 聊天机器人

在开始之前,您需要安装 Panel(任何高于 1.3.0 的版本)以及您可能需要的其他软件包,例如 jupyterlab、openai 和 langchain。

现在您已准备就绪!

使用 ChatInterface widget

全新的 ChatInterface widget 是一种高级 widget,提供了一个用户友好的聊天界面,用于发送消息,并带有四个内置操作:

  • 发送:发送消息到聊天记录
  • 重新运行:重新发送最近的用户消息
  • 撤销:删除最近的消息
  • 清除:清除所有聊天消息

想了解更多关于 `ChatInterface` 底层工作原理的信息吗?它是一个高级 widget,封装了中级 widget `ChatFeed`,后者管理 `ChatMessage` 项目列表以显示聊天消息。请查看关于 ChatInterfaceChatFeedChatMessage 的文档以了解更多信息。

1. 构建一个基本的聊天机器人

通过 `pn.chat.ChatInterface`,我们可以向聊天界面发送消息,但系统应该如何回复呢?我们可以定义一个 `callback` 函数!

在这个例子中,我们的 `callback` 函数只是简单地回显用户消息。看看它已经变得更具功能性了吗?

如何使用 ChatInterface widget 回显消息

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.pypanel serve app.ipynb

2. 构建一个由 ChatGPT 驱动的 AI 聊天机器人

我们如何使用 OpenAI ChatGPT 回复消息?我们只需在 `callback` 函数中调用 OpenAI API。

在您的环境中安装 `openai`,并将您的 OpenAI API 密钥添加到脚本中。请注意,在此示例中,我们在函数中添加了 `async`,以允许在单个线程中进行协作式多任务处理,并允许 IO 任务在后台发生。这确保了我们的应用在等待 OpenAI API 响应时能够平稳运行。Async 实现了并发执行,允许我们在等待时执行其他任务,并确保应用程序的响应速度。

如何使用 ChatInterface widget 创建一个使用 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 widget 创建一个结合 LangChain 使用 OpenAI GPT-3 API 的聊天机器人

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 widget。我们首先引导您使用 `pn.chat.ChatInterface` 构建一个基本的聊天机器人。然后,通过无缝集成 OpenAI ChatGPT,我们提升了聊天机器人的功能。为了进一步加深您的理解,我们还探讨了 LangChain 与 Panel ChatInterface 的集成。如果您渴望探索更多聊天机器人示例,请随时访问这个 GitHub 仓库,并考虑贡献您自己的示例。

掌握了这些见解和实践示例,您现在已经为开始在 Panel 中制作 AI 聊天机器人的旅程做好了充分准备。祝您编码愉快!

所有这些工具都是开源的,并且每个人都可以免费使用,但如果您想在 Anaconda 的 AI 和 Python 应用专家的帮助下开始使用,请联系我们销售团队的代表,邮箱:[email protected]

与专家交流

与我们的专家之一交流,为您的 AI 之旅寻找解决方案。

与专家交流