编写调用GPT接口的Python程序,实现本地歌曲与视频的自动播放

前提准备

1.本地歌曲、本地视频。
2.PotPlayer播放器,打开网络加速器后可在官网下载。https://potplayer.daum.net/
3.openai的api_key,可在官方网站或者某宝买一个key,并把key放入电脑环境里面。

重难点

  1. 首先需要实现播放音乐和视频,这个函数定义是一个难点;
  2. 然后调用GPT API接口需要models,messages, functions这三个参数,functions函数是第二个难点;
  3. 如何调用API接口是第三难点。

关于为何需要functions函数,通过询问GPT给出的回答是:
在这里插入图片描述

代码

实现函数

import potplayer
import difflib
import json
import glob
import openai
import subprocess
openai.api_key = os.getenv("OPENAI_API_KEY")
# 调用本地音乐播放器实现函数
def playMusic(kw):  #定义一个曲名关键字函数,需要传入的参数是曲名
    potplayer_path = '..\\PotPlayerMini64.exe'  #potplayer播放器的位置
    fs = glob.glob('..\\*.mp3')  #指定音乐文件夹里所有MP3文件列出来
    matches = difflib.get_close_matches(kw, fs, cutoff=0.01)  #根据字符串匹配找出与曲名参数最相近的文件名(即不用写出准确的文件名)
    best = matches[0]
    subprocess.call([potplayer_path, best])  #播放地址文件

# 调用本地视频播放器实现函数
def playMovie(kw):
    potplayer_path = '..\\PotPlayerMini64.exe'
    fs = glob.glob('..\\*.mp4')
    matches = difflib.get_close_matches(kw, fs, cutoff=0.01)
    best = matches[0]
    subprocess.call([potplayer_path, best])

# 这个函数接收一个包含对话消息的列表作为参数,并按照角色和内容的格式打印每条消息
def pretty_print_conversation(messages): 
    for message in messages:
        role = message["role"]
        content = message["content"]
        print(f"{role}: {content}")

描述函数

# 描述函数
# 定义两个函数并封装,一个是播放音乐的函数,一个是播放视频的函数
functions = [{"name": "playMusic",
              "description": "根据用户提供的曲名关键字播放音乐",  #描述
              #针对函数的参数进行的定义。它指定了参数的类型、属性和必需性。
              "parameters": {"type": "object",  # 参数类型为对象(object)
                             "properties": {"kw": {"type": "string","description": "曲名关键字"}},#参数包含一个属性,该属性的键是kw,值是一个字符串类型(string)。kw属性描述是曲名关键字。
                             "required": ["kw"], #kw属性是必需的,即在调用函数时必须提供该参数。
                            }  
              },
               {"name": "playMovie",
                "description": "根据用户提供的视频关键字播放视频",
                "parameters": {"type": "object",
                               "properties": {"kw": {"type": "string","description": "视频关键字"}},
                               "required": ["kw"],
                               }
               }
               ]

调用GPT API


# 调用GPT API来进行对话生成,并根据回复执行相应的函数
messages = []  #创建一个空的消息列表messages,需要向其中添加系统消息和用户消息
messages.append({"role": "system","content" : "Don't make assumptions about"}) #作为系统,不要臆断??
messages.append({"role": "user","content":"我想听北京东路的日子"})  #作为用户,输入需求
chat_response = openai.ChatCompletion.create(model='gpt-3.5-turbo',messages=messages,functions=functions) #使用openai.ChatCompletion.create方法调用GPT API,利用gpt3.5作为模型、消息列表和函数列表作为参数
assistant_message = chat_response["choices"][0]["message"]  #从API响应中提取回复消息
print(assistant_message)
messages.append(assistant_message) #将回复消息添加到消息列表中
#如果回复中包含函数调用信息,则提取函数名称和参数,根据函数名称调用相应的函数,传递解析后的参数
if assistant_message.get( "function_call"):
    fn = assistant_message["function_call"]["name"]
    arguments = json.loads(assistant_message["function_call"]["arguments"]) 
    if fn == "playMusic":playMusic(**arguments)
    elif fn == "playMovie":playMovie(**arguments)
pretty_print_conversation(messages)  #打印整个对话的内容

通过以上三部分可以基本实现本地歌曲与视频的自动播放。
也可以实现与GPT的对话,当识别到不需要调用自定义函数时,GPT会直接回答相应的问题。例如:

在这里插入图片描述

不足与改进

针对以上代码可改进的地方有:
1.多轮对话,实现连续不断的命令交互。
2.语音控制,识别人声需求回答问题。
3.制作网页,将这一实现放入自己的网页中,高级的可以自己开发网站。

本文章的撰写参考哔哩哔哩视频:

免费教程系列(一)手把手教你用GPT点歌放电影 实例讲解新特性Function Calling

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值