使用python快速开发各种聊天机器人应用

开源项目 Panel及其最新版本1.3推出了一项令人兴奋且备受期待的新功能:聊天界面小部件。这项新功能开辟了一个充满神奇的新世界,使人工智能聊天机器人的创建比以往任何时候都更加容易和用户友好。

今天将学习如何使用 Panel 的ChatInterface 组件并构建:

  • 一个基本的聊天机器人
  • 基于ChatGPT的人工智能聊天机器人
  • 基于谷歌 Gemini 的人工智能聊天机器人
  • 基于langchain的人工智能聊天机器人

在我们开始之前,您需要安装panel(大于或等于 1.3.0 的版本)以及您可能需要的其他软件包,例如Gemini、openailangchain:

pip install panel
pip install openai
pip install google-generativeai
pip install langchain

使用聊天界面组件

全新的 ChatInterface 是panel的一个高级小组件,提供用户友好的聊天界面来发送消息,并具有四个内置操作:

  • 发送(Send):发送消息到聊天记录窗口
  • 重新运行(Rerun):重新发送最近的用户消息
  • 撤消(Undo):删除最近的消息
  • 清除(Clear):清除所有聊天消息

想了解更多关于ChatInterface幕后工作原理的信息吗?它是一个高级小组件,围绕着一个中级小组件ChatFeed,它用来管理用于显示聊天消息窗口的ChatMessage列表。查看panel关于ChatInterfaceChatFeedChatMessage的官方文档可以了解更多信息。

一、创建一个基本的聊天机器人

通过pn.chat.ChatInterface,我们就可以向聊天界面发送消息了,同时我们可以定义一个callback函数,以便生成"回复消息".

在下面的示例中,我们的callback函数只是回显用户消息。我们看看到它是如何实现回显用户消息的。

"""
演示回显用户消息
"""import panel as pnpn.extension()def callback(contents: str, user: str, instance: pn.chat.ChatInterface):message = f"Echoing {user}: {contents}"return messagechat_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.pyimport panel as pn
from openai import AsyncOpenAIpn.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.contentif part is not None:message += partyield 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.pyimport google.generativeai as genai
import panel as pngenai.configure(api_key='your_api_key',#你自己的api_keytransport='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.textyield messagechat_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.pyimport os
import panel as pn
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemorypn.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机器人程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311999.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

磁盘管理-------RAID卡

目录 一、RAID概述 二、常见类型 (一)RAID 0 (二)RAID 1 (三)RAID 5 (四)RAID 6 (五)RAID 10 (六)总结 三、创建RAID &…

XTU-OJ-1452-完全平方数-笔记

参考博客 XTU-OJ 1452-完全平方数 题意 输入一个奇数&#xff0c;使得 n*(2*an-1)/2是一个完全平方数&#xff0c;求满足条件的最小的a 1<n<1e9 先输入样例数&#xff0c;再输入n 输入 2 1 3 输出 0 2 代码 #include<stdio.h>#define N 1000000010int a…

1.PHP简单入门

1.PHP代码执行方式 PHP是在服务器端执行&#xff0c;然后返回给用户结果。 如果直接使用浏览器打开&#xff0c;就会解析为文本。 意思是说&#xff0c;浏览器通过 http请求&#xff0c;才能够执行php页面。 2.PHP代码框架 开启本机服务器&#xff08;下载软件略&#xff09…

2023年度业务风险报告:四个新风险趋势

目录 倒票的黄牛愈加疯狂 暴增的恶意网络爬虫 愈加猖獗的羊毛党 层出不穷的新风险 业务风险呈现四个趋势 防御云业务安全情报中心“2023年业务风险数据”统计显示&#xff0c;恶意爬虫风险最多&#xff0c;占总数的37.8%&#xff1b;其次是虚假账号注册&#xff0c;占18.79%&am…

14个强大的JS库

文章目录 一、前言二、Handsontable&#xff1a;高效的数据网格处理库2.1、数据绑定和验证2.2、过滤和排序2.3、文件导出2.4、多框架兼容性2.5、丰富的附加功能2.6、GitHub受欢迎程度 三、Calendar&#xff1a;全功能可定制日历库3.1、多种视图类型3.2、任务和里程碑管理3.3、鼠…

操作注册表

命令说明&#xff1a; regedit&#xff08;快速打开注册表命令&#xff09; reg query 显示注册表的所有子项和值 reg delete 从注册表删除项或值 /v EntryName &#xff08;注册表项和子项名称&#xff09; 删除子项下的特定项。如果未指定子项&#xff0c;则将删除子项…

C#,入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果

C#&#xff0c;入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net/beijinghorn/article/details/123350910 C#&#xff0c;入门教程(02)—— Visual Studio 2022开发环境搭建图文教程https://blog.csdn.net/beijinghorn/article/detail…

深度学习从入门到不想放弃-5

看了一眼这个文章系列,居然第四集是11月5号写的,这25天可见发生了多少事情... 今天我们讲讲特征,算是基础篇的一个番外篇延伸,我省着在后面的文章里写了,怕扰乱了思路 严格来说这个属于基础机器学习领域里的了,我又不讲决策树,贝叶斯,隐马尔可夫啥的(不在这个系列写,…

Linux环境grep搜索方法记录

1 grep grep 命令&#xff0c;用来搜索字符串所在位置&#xff0c;可以具体到不同文件&#xff0c;不同行&#xff1b; 在Linux 下&#xff0c;查看命令释义如下 zhaocubuntu2004:~$ grep --help Usage: grep [OPTION]... PATTERNS [FILE]... Search for PATTERNS in each FI…

【Java进阶篇】什么是UUID,能不能保证唯一?

什么是UUID&#xff0c;能不能保证唯一? ✔️典型解析✔️优缺点 ✔️各个版本实现✔️V1.基于时间戳的UUID✔️V2.DCE(Distributed Computing Environment)安全的UUID✔️V3.基于名称空间的UUID(MD5)✔️V4.基于随机数的UUID✔️V5.基于名称空间的UUID(SHA1)✔️各个版本总结…

Python入门学习篇(十四)——模块文件操作

1 模块 1.1 理解 包: python中带有__init__.py文件的文件夹 模块: 文件名(不包含.py后缀),如python官方的time.py中time就是模块1.2 示例代码 import datetime# 调用datetime模块中的datetime类的now()方法 t datetime.datetime.now() # 格式化输出日期和时间 strftime(&qu…

【网络安全 | Misc】Ditf 安恒九月赛

正文 binwalk发现rar&#xff1a; 修改后缀&#xff0c;打开需要密码&#xff1a; 修改高度&#xff1a; 得到密码&#xff1a; StRe1izia得到一个流量包&#xff1a; 联系上文搜素png得到&#xff1a; 追踪流&#xff1a; 得到Base64代码&#xff1a; flag{Oz_4nd_Hir0_lov3_F…