Python实现AI助手

news2024/11/28 0:54:54

目录

1.介绍

2.准备工作

(1)登录百度智能云

(2)创建应用

(3) 获取Key

3.代码实现

4.效果展示


1.介绍

        本文将介绍使用python调用百度云千帆大语言模型的API实现一个简单的AI助手,并且将在本文的第三部分贴出完整源码,供学习交流!

        如果你觉得本篇文章对你有用,希望你动动宝贵的小手,给作者整一个👍+⭐!

        其次,你还可以访问我的主页查看其他文章:

 一只程序猿子的CSDN博客

2.准备工作

(1)登录百度智能云

        登录百度智能云后,找到千帆大模型平台.

(2)创建应用

        必填项填写完成后点击创建,就完成了应用创建! 

(3) 获取Key

        Key包含API Key和Secret Key.

        现在已经获取到需要的Key了,在平台上可以找到调用API的示例代码,不过你也可以查看我下面的代码!

3.代码实现

ai_assistant.py:

# 导入 requests 库,用于发送 HTTP 请求
import requests
# 导入 json 库,用于处理 JSON 数据
import json

# 定义一个名为 AIAssistant 的类,该类用于实现 AI 助手的各项功能
class AIAssistant():

	# 初始化函数,实例化后会首先运行这个函数
	def __init__(self):
		# 定义 API_KEY 和 SECRET_KEY,它们是调用百度云AI模型API的凭证,用于鉴权和请求资源
		self.API_KEY = "换成你的Key"
		self.SECRET_KEY = "换成你的Key"
		# 设置请求头部信息,其中 Content-Type 设置为 application/json 表示发送的数据是 JSON 格式
		self.HEADER = {'Content-Type': 'application/json'}


	# 定义一个函数 get_access_token,用于获取访问令牌 Access Token
	def get_access_token(self):
		"""
		使用 AK,SK 生成鉴权签名(Access Token)
		:return: access_token,或是None(如果错误)
		"""
		# 定义 url,这是请求的目标地址
		url = "https://aip.baidubce.com/oauth/2.0/token"
		# 定义参数字典,包含鉴权所需的参数,例如 grant_type(授权类型),client_id(客户端 ID),client_secret(客户端密钥)等
		params = {"grant_type": "client_credentials", "client_id": self.API_KEY, "client_secret": self.SECRET_KEY}
		# 使用 requests.post 方法发送 POST 请求到定义的 url,并传入参数字典 params,然后将返回的 JSON 数据中的 access_token 字段转化为字符串
		access_token = str(requests.post(url, params=params).json().get("access_token"))

		return access_token


	# 定义一个函数 ai_assistant,接收一个名为 data 的列表作为参数,这个列表中包含用户输入的消息
	def ai_assistant(self, data):
		# 定义 url,拼接上通过 get_access_token 函数获取的 Access Token,用于向 AI 服务器发送请求
		url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + AIAssistant().get_access_token()

		# 将用户输入的消息打包成 JSON 格式的 payload(有效负载)
		payload = json.dumps({
			"messages": data
		})

		# 使用 requests.request 方法发送 POST 请求到定义的 url,并传入头部信息和 payload,然后返回响应的 JSON 数据
		response = requests.request("POST", url, headers=self.HEADER, data=payload)

		# 从响应的 JSON 数据中取出 result 字段并返回,可能包含 AI 对用户输入的回答
		return response.json()['result']


	# 定义一个函数 run,这个函数是整个 AI 助手对话的核心逻辑所在,它负责接收用户的输入并返回 AI 的回答
	def run(self):
		# 定义一个空列表 data,用于存储用户的输入和 AI 的回答
		data = []

		# 定义一些用于控制台输出的颜色代码
		COLOR_BLUE = "\033[34m"  # 绿色
		COLOR_RED = "\033[31m"  # 红色
		RESET = "\033[0m"  # 黑色
		BOLDEN = "\033[1m"  # 加粗文本

		# 打印欢迎信息,提示用户可以通过输入 'q' 来结束对话
		print(f"{BOLDEN}{COLOR_BLUE}********************欢迎使用AI助手!********************\n{RESET}(tips:输入'q'结束对话)\n")
		# 进入无限循环,除非用户输入 'q' 才结束循环
		while True:
			# 获取用户的输入
			quetion = input(f"{COLOR_RED}用  户: {RESET}")

			# 如果用户输入 'q',则跳出循环
			if quetion == 'q':
				print("再见!")
				break
			else:
				# 创建字典,包含用户的角色和内容,添加到 data 列表中
				user_massage = {"role": "user", "content": quetion}
				data.append(user_massage)

				print('*****正在生成回答,请稍后...*****')
				# 调用 ai_assistant 函数,传入用户输入的数据,获取 AI 的回答,并添加到 data 列表中
				result = AIAssistant().ai_assistant(data)

				assistant_massage = {"role": "assistant", "content": result}
				data.append(assistant_massage)

				# 从 data 列表中取出最后一条消息,也就是AI助手回答的内容,根据 role 字段判断,并输出到控制台
				answer = data[-1]['content'].replace('\n\n', '\n')
				print(f"{COLOR_RED}AI助手:{RESET} {BOLDEN}{answer}\n\n{RESET}")


# 主函数
if __name__ == '__main__':
	# 运行AI助手程序
	AIAssistant().run()

        源码中我已经添加了非常详细的注释,相信聪明的你一定能理解源码 !!!

注意:把源码里的self.API_KEY和self.SECRET_KEY换成你自己的!!!

4.效果展示

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单片机毕设实物买的成品,论文是自己查资料和照着实物写的

单片机毕设实物买的成品,论文是自己查资料和照着实物写的,算学术不端吗? 很多人的想法可能是这样的: 一般来说,毕业论文是独立完成的学术研究,需要表明作者自己的思考和研究成果,应该包括自己的…

2020年09月 Scratch(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共15题,每题2分,共30分) 第1题 执行下面程序,输入4和7后,角色说出的内容是? A:4,7 B:7,7 C:7,4 D:4,4 答案:B 第2题 执行下面程序,输出是? A:大学 中庸 孟子 论语 B:论语 大学 孟子 中庸 C:大…

steam游戏搬砖新手最容易掉的五大坑

steam搬砖,月入5-8K 进入任何行业,起初都可能看起来很简单,但要稳定获得利润,需要一些努力和理解行业内的思维逻辑。steam搬砖项目有两条路可以选择:一是通过不断踩坑和试错来积累经验;二是进行知识付费&am…

python+feon有限元分析|feon安装

目录 1、查找 2、下载 3、解压 4、安装 Feon是湖北工业大学土木建筑与环境学院教师裴尧尧基于Python开发的一个开源免费的有限元计算框架。这是一个致力于有限元编程教学和有限元理论研究的框架,上手快,可扩展性强,代码开源。 1、查找 …

1998-2021年全国各地级市PM2.5平均浓度数据

1998-2021年全国各地级市PM2.5平均浓度数据 1、时间:1998-2021年 2、指标:省、省代码、市、市代码、年份、均值、总和、最小值、最大值、标准差 3、来源:Washington university Atmospheric Composition Analysis Group 4、范围&#xff…

【JMeter】运行方式

第一种: 使用GUI 操作: 在JMeter界面菜单导航上点击运行按钮 一般用作创建TestPlan和调试脚本增加java堆空间来满足测试环境 第二种:使用CLI(Command Line) 性能测试一般请求量比较大,为了节省资源 CLI参数用法: 字段…

Java开发者的Python快速进修指南:自定义模块及常用模块

自定义模块 我来举一个在Java开发中常用的开发方式作为例子。在我们进行项目开发时,通常会在项目的结构中创建一个util包,用于存放一些工具类。同样,Python也可以采用类似的方式来组织代码结构,让大家更容易理解。 在同目录下 如果…

数据中台具体是怎么解决数据孤岛的?_光点科技

在数字化时代,数据已成为企业的核心资产。然而,由于历史遗留问题、部门壁垒等因素,很多企业面临着“数据孤岛”的问题。数据孤岛是指在一个组织内,数据被分散在不同的系统中,彼此隔离,不能有效整合和利用。…

GWAS 分析模型 | FaST-LMM

GWAS 分析模型 | FaST-LMM FaST-LMM (Factored Spectrally Transformed Linear Mixed Models) 是一个用于进行全基因组关联分析(GWAS)的模型。与标准混合线性模型相比,FaST-LMM 通过对遗传相似性矩阵进行单次谱分解来减少计算资源消耗并提升运…

智慧城市交通大屏|助力解决城市交通问题

2017年起,数字孪生连续三年被Gartner列入“未来科技十大趋势”,由此可见数字孪生技术正屹立在数字化发展的风口之中。 数字孪生作为物理世界的数字映射,将流程、物体的信息利用数字技术实时映射到系统中,可以对某个设备、某个企业…

vivado产生报告阅读分析25-复杂性报告

对于顶层设计和 / 或包含 1000 个以上叶节点单元的层级单元 , 复杂性报告会显示每个叶节点单元类型的“ Rent Exponent” ( Rent 指数 ) 、“ Average Fanout ” ( 平均扇出 ) 和分布。 Rent 指数是指在使用最小割 …

Ubuntu+Tesla V100环境配置

系统基本信息 nvidia-smi’ nvidia-smi 470.182.03 driver version:470.182.03 cuda version: 11.4 查看系统体系结构 uname -aUTC 2023 x86_64 x86_64 x86_64 GNU/Linux 下载miniconda https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/?CM&OA https://mi…

无效的目标发行版: 21 和springboot爆错

目录 问题描述 原因分析: 问题描述 springboot爆红 调整一下这个:把这里的version调低一点应该就可以了 无效的目标发行版: 21 调整一下这个把这里的Java version调整一下,我是调整到1.8(其他没有试过) 原因分析&a…

数据结构 / day05 作业

1. 双向循环链表作图 双向循环链表节点创建 双向循环链表节点头部插入 双向循环链表节点尾插 双向循环链表节点头部删除 双向循环链表节点尾部删除 2.思维导图

入侵redis之准备---VMware安装部署kail镜像服务器【详细包含云盘镜像】

入侵redis之准备—VMware安装部署kail镜像服务器【详细包含云盘镜像】 kail是一个很好玩的操作系统,不多说了哈 下载kail镜像 kail官网:https://www.kali.org/get-kali/#kali-platforms 百度云盘下载: 链接:https://pan.baidu.com/s/1PRjo…

用Zoho Projects项目管理系统进行直播管理的策略与方法

使用Zoho Projects项目管理系统进行直播管理。优化团队直播流程,明确职责,增进默契!助力团队一丝不苟,确保无懈可击的直播效果。汲取经验,固化流程,多角度剖析关键数据,深入复盘,便于…

C++标准模板库 STL 简介(standard template library)

在 C 语言中,很多东西都是由我们自己去实现的,例如自定义数组,线程文件操作,排序算法等等,有些复杂的东西实现不好很容易留下不易发现的 bug。而 C为使用者提供了一套标准模板库 STL,其中封装了很多实用的容器&#xf…

任意文件上传漏洞挖掘(getshell)

任意文件上传漏洞挖掘(getshell) 1.在漏洞挖掘过程中进行找到该子域名页面, 2.没有内容就扫目录,成功发现filemanager/,点击访问 看到upload页面感觉有惊喜, 果然有上传功能,点击上传抓包,经测试发现普通j…

【第六节:微信小程序 小程序UI组件C】微信小程序入门,以思维导图的方式展开6

如果图文字看不清,可以私信我给发大图哈。 6、小程序UI组件C 导航(Navigation) navigator 应用链接 url String 应用内的跳转链接 open-type String navigate 可选值 navigate、redirect、switchTab、reLaunch&#…

RAM++(recognize anything++)—— 论文详解

一、概述 1、是什么 RAM(RAM plus plus)论文全称 《Open-Set Image Tagging with Multi-Grained Text Supervision》。区别于图像领域常见的分类、检测、分割,他是标记任务——多标签分类任务(一张图片命中一个类别)&…