为什么我的Python脚本无法调用GPT-3.5-turbo API?
情况
我的Python脚本编译和运行都没问题。它创建了一个输出文件(edited.txt),但是文件里什么内容都没有。API的仪表盘显示没有使用记录,所以我猜这个脚本可能从来没有成功调用过API。不过,我没有收到任何错误代码。
目标:
我正在写一个Python脚本,从一个文件中读取文本块。这些文本块分为两部分:一个提示和一个大约2000个字符的正文。这个脚本应该把这些文本块传给OpenAI的API,然后把返回的结果写入一个叫“edited.txt”的文件里。
目的:
我在帮助100 Devs训练营把他们的视频转录文本转换成HTML文档,这样盲人和视力障碍人士就能更方便地浏览这些视频转录文本。我已经写了三个Python脚本,功能包括:
- 去掉时间戳
- 根据字符数量把文本分成小块(使用TikToken)
- 在每段开头加上相同的提示
这个脚本是用来对原始转录文本进行第一次编辑,之后我会手动编辑并添加HTML格式。
示例输入:
(这是输入到这个脚本的文本文件里的内容示例)
格式:
提示文本:原始转录文本
提示文本:原始转录文本
示例:
充当软件开发者。你的任务是让以下文本更易读,同时保持代码语法:我们回来了,又来了,又来了。走吧。只用手指。嘿,早上好。下午好。晚上好。不管你来自哪里。希望大家都很好。欢迎回来,大家。...
充当软件开发者。你的任务是让以下文本更易读,同时保持代码语法:如果你从未接触过代码,这些东西一开始可能会让人感到很痛苦。所以我们这里有各种各样的人。有些人已经构建了完整的应用程序,他们来这里学习能帮助他们找到工作的东西。...
源代码:
from flask import Flask, request, redirect, url_for, render_template
import os
from dotenv import load_dotenv
import openai
import json
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
MODEL_ENGINE = "gpt-3.5-turbo"
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file:
data = file.read().decode('utf-8')
blocks = data.split('\n\n')
edited_text = ''
for block in blocks:
try:
response = openai.chat.completions.create(
model=MODEL_ENGINE,
messages=[{"role": "user", "content": block}],
max_tokens=4000,
)
edited_text += response.choices[0].text.strip() + '\n\n'
except Exception as e:
print(f"An error occurred: {e}")
with open('edited.txt', 'w', encoding='utf-8') as f:
f.write(edited_text)
return render_template('upload.html')
if __name__ == '__main__':
app.run(debug=True, port=8080)
备注:
这是我第一次访问OpenAI的API。而且我失明,所以使用调试工具有点困难。从我能访问的内容来看,我在GET和POST请求中听到的都是200响应代码。但可能我无法访问某些东西。
任何你能提供的帮助都非常感谢!
我尝试过的:
阅读了所有可用的OpenAI文档
在终端检查Flask事件(都返回200)
尝试在VS Code中使用Copilot
确认.env文件在同一目录下,并且API密钥格式正确。
检查API仪表盘,确认密钥是激活的,有权限,并且没有使用记录
确认脚本按预期创建了输出文件,但没有写入内容。
1 个回答
当我在我这边运行你的代码时,出现了这个错误:
Choice对象没有text这个属性
edited_text += response.choices[0].text.strip() + '\n\n'
所以我把代码换成了:
edited_text += response.choices[0].message.content.strip() + '\n\n'
我也没有从请求中访问文件,而是这样做的:
file = "Hi I am the text if you read this message please respond with I red you message \n\n Hi I am the text if you read this message please respond with I red your 2nd Message"
if file:
data = file
blocks = data.split('\n\n')
edited_text = ''
现在代码运行得很好,没有任何错误。
openai.chat.completions.create这个方法是专门为聊天互动设计的。它可以在一系列消息中保持上下文,非常适合用来创建对话式的人工智能。所以如果你不打算构建对话式人工智能,可以使用以下代码:
response = client.completions.create(
model="gpt-3.5-turbo-instruct",
prompt="Write a tagline for an ice cream shop."
)
这样做是个好习惯。