【002】调用kimi实现文件上传并进行分析_#py

调用kimi实现文件上传并进行分析

  • 前言
  • 1. 上传文件并解析
  • 2. 调用方式
  • 3. 完整代码

前言

在【001】调用kimi实现AI对话_#py对Kimi有了一定的介绍,以及简单对话和连续对话的程序编写。

本次主要希望能通过kimi分析文件,总结文件的能力。

1. 上传文件并解析

本文以代码块的形式呈现,调用下面这段upload_files即可实现

注意 变量files一定是列表。

    # 多文件上传def upload_files(self, files):"""upload_files 会将传入的文件(路径)全部通过文件上传接口 '/v1/files' 上传,并获取上传后的文件内容生成文件 messages。每个文件会是一个独立的 message,这些 message 的 role 均为system,Kimi 大模型会正确识别这些 system messages 中的文件内容。:param files: 一个包含要上传文件的路径的列表,路径可以是绝对路径也可以是相对路径,请使用字符串的形式传递文件路径。:return: 一个包含了文件内容的 messages 列表,请将这些 messages 加入到 Context 中,即请求 `/v1/chat/completions` 接口时的 messages 参数中。"""file_messages = []# 对每个文件路径,我们都会上传文件并抽取文件内容,最后生成一个 role 为 system 的 message,并加入# 到最终返回的 messages 列表中。for file in files:file_object = self.client.files.create(file=Path(file), purpose="file-extract")   # 上传文件file_content = self.client.files.content(file_id=file_object.id).text	# 解析文本# 加载文件信息入聊天file_messages.append({"role": "system","content": file_content, })return file_messages

2. 调用方式

通过QFileDialog调用选择文件的对话框,并判断是否选择了文件。

    # 上传文件解析的方式def InputFile(self, content):fname, _ = QFileDialog.getOpenFileNames(self, '打开文件', '.', '')      # 多文件上传if fname != []:  # 判断是否未选择文件# self.messages.append({"role": "user", "content": "您好!kimi。"})       # 防止第一次聊天上传记录出错file_messages = self.upload_files(fname)  # 多文件上传云端self.messages.append(*file_messages)   # 我们使用 * 语法,来解构 file_messages 消息,使其成为 messages 列表的前 N 条 messages。content = content.replace("打开文件", "").replace("选择文件", "").replace("file", "")  # 处理历史文件if content != " " or content != "": self.content = input("用户(对文件的处理): "); self.answer = self.InputContent(self.content)       # 输入对文件的处理要求else: self.answer = self.InputContent(content)    # 判断原始输入的记录return self.answer      # 返回kimi的回答else: print("Kimi AI: 您未选择文件!")

同时在原来【001】调用kimi实现AI对话_#py对中的主函数中添加了触发条件

    def main(self):self.AIclient()  # 调用API# try:while True:# 检测用户输入self.content = input("用户: ")if "打开文件" in self.content or "选择文件" in self.content or "分析文件" in self.content or "file" in self.content: self.answer = self.InputFile(self.content)  # 当检测到输入内容包含上述信息后,触发上传文件的功能else: self.answer = self.InputContent(self.content)		# 正常对话print(f"Kimi AI: {self.answer}")time.sleep(2)# except Exception as e: print(f"An error occurred: {e}")

3. 完整代码

from PyQt5.QtWidgets import *
from openai import OpenAI
import time
import sys
from pathlib import Pathclass Main_Name(QWidget):def __init__(self):super().__init__()self.main()def AIclient(self):self.client = OpenAI(api_key="MOONSHOT_API_KEY",  # 在这里将 MOONSHOT_API_KEY 替换为你从 Kimi 开放平台申请的 API Keybase_url="https://api.moonshot.cn/v1",)self.messages = [{"role": "system", "content": "你是 Kimi。"}, ]  # 初始对话内容及预设def InputContent(self, content):self.messages.append({"role": "user", "content": content})completion = self.client.chat.completions.create(model="moonshot-v1-8k",messages=self.messages,temperature=0.3,)# 通过 API 我们获得了 Kimi 大模型给予我们的回复消息(role=assistant)assistant_message = completion.choices[0].message# 为了让 Kimi 大模型拥有完整的记忆,我们必须将 Kimi 大模型返回给我们的消息也添加到 messages 中self.messages.append(assistant_message)# 返回回答内容return completion.choices[0].message.content# 上传文件解析的方式def InputFile(self, content):fname, _ = QFileDialog.getOpenFileNames(self, '打开文件', '.', '')      # 多文件上传if fname != []:  # 判断是否未选择文件# self.messages.append({"role": "user", "content": "您好!kimi。"})       # 防止第一次聊天上传记录出错file_messages = self.upload_files(fname)  # 多文件上传云端self.messages.append(*file_messages)   # 我们使用 * 语法,来解构 file_messages 消息,使其成为 messages 列表的前 N 条 messages。content = content.replace("打开文件", "").replace("选择文件", "").replace("file", "")  # 处理历史文件if content != " " or content != "": self.content = input("用户(对文件的处理): "); self.answer = self.InputContent(self.content)       # 输入对文件的处理要求else: self.answer = self.InputContent(content)    # 判断原始输入的记录return self.answer      # 返回kimi的回答else: print("Kimi AI: 您未选择文件!")# 多文件上传def upload_files(self, files):"""upload_files 会将传入的文件(路径)全部通过文件上传接口 '/v1/files' 上传,并获取上传后的文件内容生成文件 messages。每个文件会是一个独立的 message,这些 message 的 role 均为system,Kimi 大模型会正确识别这些 system messages 中的文件内容。:param files: 一个包含要上传文件的路径的列表,路径可以是绝对路径也可以是相对路径,请使用字符串的形式传递文件路径。:return: 一个包含了文件内容的 messages 列表,请将这些 messages 加入到 Context 中,即请求 `/v1/chat/completions` 接口时的 messages 参数中。"""file_messages = []# 对每个文件路径,我们都会上传文件并抽取文件内容,最后生成一个 role 为 system 的 message,并加入# 到最终返回的 messages 列表中。for file in files:file_object = self.client.files.create(file=Path(file), purpose="file-extract")file_content = self.client.files.content(file_id=file_object.id).textfile_messages.append({"role": "system","content": file_content, })return file_messagesdef main(self):self.AIclient()  # 调用API# try:while True:# 检测用户输入self.content = input("用户: ")if "打开文件" in self.content or "选择文件" in self.content or "分析文件" in self.content or "file" in self.content: self.answer = self.InputFile(self.content)else: self.answer = self.InputContent(self.content)print(f"Kimi AI: {self.answer}")time.sleep(2)# except Exception as e: print(f"An error occurred: {e}")# 通过 API 我们获得了 Kimi 大模型给予我们的回复消息(role=assistant)
if __name__ == '__main__':app = QApplication(sys.argv)ex = Main_Name()ex.show()sys.exit(app.exec_())

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

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

相关文章

《近似线性可分支持向量机的原理推导》 目标函数 公式解析

本文是将文章《近似线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 公式 9-38 解释: min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 C ∑ i 1 N ξ i \min_{w, b, \xi} \quad \frac{1}{2} \|w\|^2 C \sum_{i1}^{N} \x…

httpd服务

文章目录 1、搭建一个网络yum源2、基于域名访问的虚拟主机3、基于端口来访问域名4、搭建个人网站5、加密访问显示自定义网页内容 1、搭建一个网络yum源 [roottest01 conf.d]# cat repo.conf <virtualhost *:80>documentroot /var/www/html/ServerName 10.104.43.154ali…

react18中的jsx 底层渲染机制相关原理

jsx 底层渲染机制 渲染 jsx 时&#xff0c;会先解析 jsx&#xff0c;生成一个虚拟 dom(virtual dom)。然后将虚拟 dom 渲染成真实 dom。如果 jsx 中包含事件&#xff0c;会将事件绑定到真实 dom 上。 虚拟 dom 对象&#xff0c;是框架内部构建的一套对象体系&#xff0c;对象…

常用环境部署(二十二)——MySQL的数据库迁移到另一个机器上

1、导出原数据库的数据 mysqldump -u [用户名] -p[密码] [数据库名] > database_dump.sql 命令示例&#xff1a; mysqldump -u root -p123456 wd > /opt/wd.sql 2、在新机器上创建数据库 mysql -u [用户名] -p -e "CREATE DATABASE [新数据库名]" 命令示…

无废话、光速上手 React-Router

React-Router React Router 是一个用于 React 应用的声明式路由库。它允许开发者通过组件化的方式定义应用的路由结构&#xff0c;使得路由管理更加直观和可维护 安装 pnpm i react-router-dom定义路由 定义路由有两种方式&#xff0c;分别是对象路由和路由组件&#xff0c…

k8s部署minio

k8s 部署minio 1.编辑yaml #编辑pvc cat > 01-minio-pvc.yaml <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata:name: minio-pvcnamespace: minio spec:accessModes:- ReadWriteManyresources:requests:storage: 10GistorageClassName: nfs-boge EOFcat …

AIGC时代 | 从零到一,打造你的专属AI Chat应用!

文章目录 目标功能概要&#xff08;1&#xff09;Chat 交互界面&#xff08;2&#xff09;流式接口&#xff08;3&#xff09;多轮会话&#xff08;4&#xff09;打字效果 系统架构&#xff08;1&#xff09;大模型服务层&#xff08;2&#xff09;应用服务层&#xff08;3&…

深入解析东芝TB62261FTG,步进电机驱动方案

TB62261FTG是一款由东芝推出的两相双极步进电机驱动器&#xff0c;采用了BiCD工艺&#xff0c;能够提供高效的电机控制。这款芯片具有多种优秀的功能&#xff0c;包括PWM斩波、内置电流调节、低导通电阻的MOSFET以及多种步进操作模式&#xff0c;使其非常适合用于需要精确运动控…

微信小程序的日期区间选择组件的封装和使用

组件化开发是一种将大型软件系统分解为更小、更易于管理和复用的独立模块或组件的方法。这种方法在现代软件开发中越来越受到重视&#xff0c;尤其是在前端开发领域。微信小程序的日期区间选择组件的使用 wxml 代码 <view><view bind:tap"chooseData">…

深度剖析:电商 API 接口如何成就卓越用户体验

在电商领域的激烈竞争中&#xff0c;提供卓越的用户体验已成为企业脱颖而出的关键。而电商 API 接口在其中扮演着举足轻重的角色&#xff0c;它如同电商平台的神经系统&#xff0c;连接着各个关键环节&#xff0c;为用户带来无缝、高效且个性化的购物之旅。 一、极速响应&#…

融合ASPICE与敏捷开发:探索汽车软件开发的最佳实践

ASPICE&#xff08;Automotive SPICE&#xff0c;即汽车软件过程改进和能力dEtermination&#xff09;与敏捷开发在软件开发领域各自具有独特的价值和特点&#xff0c;它们之间的关系可以归纳为既相互区别又相互补充。 一、ASPICE的特点 ASPICE是汽车行业对软件开发流程的一个评…

第一个Qt程序

创建项目 进入ui界面拖一个按钮 在头文件中添加函数说明 #ifndef HELLO_H #define HELLO_H#include <QMainWindow>QT_BEGIN_NAMESPACE namespace Ui { class Hello; } QT_END_NAMESPACEclass Hello : public QMainWindow {Q_OBJECTpublic:Hello(QWidget *parent nullpt…

上海亚商投顾:沪指缩量调整 NMN概念股逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天震荡调整&#xff0c;三大指数午后一度跌超1%&#xff0c;北证50指数则涨超4%&#xff0c;北交所个股…

探寻电商 API 接口提升用户体验之道

在当今数字化时代&#xff0c;电商平台已成为人们购物的主要渠道之一。而电商 API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;接口则是连接电商平台与各种应用和服务的桥梁&#xff0c;对于提升用户体验起着至关重要的作用。 一、…

当遇到 502 错误(Bad Gateway)怎么办

很多安装雷池社区版的时候&#xff0c;配置完成&#xff0c;访问的时候可能会遇到当前问题&#xff0c;如何解决呢&#xff1f; 客户端&#xff0c;浏览器排查 1.刷新页面和清除缓存 首先尝试刷新页面&#xff0c;因为有时候 502 错误可能是由于网络临时波动导致服务器无法连…

前端发送请求格式

1.multipart/form-data格式发送请求参数 什么时候用&#xff1a; 当后端API要求以表单的形式接收数据时&#xff0c;比如<input type"text" name"username">和<input type"password" name"password">&#xff0c;这些数据…

html全局属性、框架标签

常用的全局属性&#xff1a; 属性名含义id 给标签指定唯一标识&#xff0c;注意&#xff1a;id是不能重复的。 作用&#xff1a;可以让label标签与表单控件相关联&#xff1b;也可以与css、JavaScript配合使用。 注意&#xff1a;不能再以下HTML元素中使用&#xff1a;<hea…

自动化部署-01-jenkins安装

文章目录 前言一、下载安装二、启动三、问题3.1 jdk版本问题3.2 端口冲突3.3 系统字体配置问题 四、再次启动五、配置jenkins5.1 解锁5.2 安装插件5.3 创建管理员用户5.4 实例配置5.5 开始使用5.6 完成 总结 前言 spingcloud微服务等每次部署到服务器上&#xff0c;都需要本地…

鸿蒙到底是不是纯血?到底能不能走向世界?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 2016年5月鸿蒙系统开始立项。 2018年美国开始经济战争&#xff0c;其中一项就是制裁华为&#xff0c;不让华为用安卓。 2019年8月9日华为正式发布鸿蒙系统。问题就出在这里&#xff0c;大家可以仔细看。 安卓一…

从零开始学五笔(三):横区字根

从 1 区开始讲解字根&#xff1a; 先介绍按键的区位号、口诀内容、口诀说明然后列每个字根能组成什么汉字&#xff0c;难拆字将用中括号标出 ‍ G 键 区位号&#xff1a;11 口诀&#xff1a;王旁青头戋&#xff08;兼&#xff09;五一 说明&#xff1a; 王旁&#xff1a…