开源项目 Panel及其最新版本1.3推出了一项令人兴奋且备受期待的新功能:聊天界面小部件。这项新功能开辟了一个充满神奇的新世界,使人工智能聊天机器人的创建比以往任何时候都更加容易和用户友好。
今天将学习如何使用 Panel 的ChatInterface 组件并构建:
- 一个基本的聊天机器人
- 基于ChatGPT的人工智能聊天机器人
- 基于谷歌 Gemini 的人工智能聊天机器人
- 基于langchain的人工智能聊天机器人
在我们开始之前,您需要安装panel
(大于或等于 1.3.0 的版本)以及您可能需要的其他软件包,例如Gemini、openai
和langchain
:
pip install panel
pip install openai
pip install google-generativeai
pip install langchain
使用聊天界面组件
全新的 ChatInterface 是panel的一个高级小组件,提供用户友好的聊天界面来发送消息,并具有四个内置操作:
- 发送(Send):发送消息到聊天记录窗口
- 重新运行(Rerun):重新发送最近的用户消息
- 撤消(Undo):删除最近的消息
- 清除(Clear):清除所有聊天消息
想了解更多关于ChatInterface
幕后工作原理的信息吗?它是一个高级小组件,围绕着一个中级小组件ChatFeed,它用来管理用于显示聊天消息窗口的ChatMessage列表。查看panel关于ChatInterface、ChatFeed和ChatMessage的官方文档可以了解更多信息。
一、创建一个基本的聊天机器人
通过pn.chat.ChatInterface
,我们就可以向聊天界面发送消息了,同时我们可以定义一个callback
函数,以便生成"回复消息".
在下面的示例中,我们的callback
函数只是回显用户消息。我们看看到它是如何实现回显用户消息的。
"""
演示回显用户消息
"""
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()
二、创建基于 ChatGPT 的 AI 聊天机器人
我们需要做的是创建一个简单的调用OpenAI API 的callback
函数。不过首先请确保您以及申请过 OpenAI API api_key,因为我们需要使用openai的api_key来访问ChatGPT。请注意,在此示例中,我们添加async
了函数以便允许在单个线程内进行协作多任务处理,并允许 IO 任务在后台发生。这可以确保我们的应用程序在等待 OpenAI API 响应时顺利运行。异步支持并发执行,允许我们在等待时执行其他任务并确保应用程序响应。
这里我们首先创建一个 chatgpt_bot.py的python文件:
# chatgpt_bot.py
import panel as pn
from openai import AsyncOpenAI
pn.extension()
async def callback(contents: str, user: str, instance: pn.chat.ChatInterface):
response = await aclient.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": contents}],
stream=True,
)
message = ""
async for chunk in response:
part = chunk.choices[0].delta.content
if part is not None:
message += part
yield message
#你自己的api_key
my_api_key="your_api_key"
aclient = AsyncOpenAI(api_key=my_api_key)
chat_interface = pn.chat.ChatInterface(callback=callback,
callback_user="ChatGPT")
chat_interface.send(
"你好,我是无所不知的ChatGPT机器人,欢迎像我提问!",
user="System",
respond=False
)
chat_interface.servable()
这里我们使用了panel的ChatInterface组件,它可以快速开发出一个功能强调的,基于web的聊天机器人程序。
三、创建基于谷歌 Gemini 的人工智能聊天机器人
与创建ChatGPT机器人类型,这里我们也需要创建一个gemini_bot.py的python文件,并在其中创建一个调用Gemini API 的callback函数:
#gemini_bot.py
import google.generativeai as genai
import panel as pn
genai.configure(api_key='your_api_key',#你自己的api_key
transport='rest')
model = genai.GenerativeModel('gemini-pro')
pn.extension()
async def callback(contents: str, user: str, instance: pn.chat.ChatInterface):
response = model.generate_content(contents,stream=True)
message = ""
for chunk in response:
message += chunk.text
yield message
chat_interface = pn.chat.ChatInterface(callback=callback,
callback_user="Gemini")
chat_interface.send(
"你好,我是谷歌Gemini机器人,我比ChatGPT更牛,欢迎向我提问!",
user="System", respond=False
)
chat_interface.servable()
三、创建基于langchain的人工智能聊天机器人
与创建ChatGPT机器人类型,这里我们也需要创建一个langchain_bot.py的python文件,并在其中创建一个callback函数, 这里我们让langchain机器人拥有记忆能力,所以我们还需要创建langchain的记忆力组件ConversationBufferMemory和chain:
# langchain_bot.py
import os
import panel as pn
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
pn.extension()
#这里使用openai的api_key
os.environ["OPENAI_API_KEY"] = "your_openai_api_key"
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(
"你好,我是Langchain的ChatGPT机器人,欢迎向我提问!",
user="System", respond=False
)
chat_interface.servable()
四、执行聊天机器人程序
我们只需在命令行窗口中执行其中任意一个机器人程序即可:
panel serve chatgpt_bot.py
panel serve gemini_bot.py
panel serve langchain_bot.py
五、聊天效果
下面我们在浏览器中访问机器人的地址,分别访问ChatGPT,Gemini,Langchain的机器人:
Chatgpt的聊天机器人:
Gemini的聊天机器人:
langchain的聊天机器人:
总结
Panel是一个开源的Python库,它可以让你用Python轻松地构建强大的工具、其中包括聊天机器人程序,今天我们使用panel快速开发了ChatGPT,Gemini,Langchain的聊天机器人应用。通过使用使用panel库,我们可以开发出功能强大界面美观的web机器人程序。