実現したいこと
OpenAIをAPIから動かすプログラムを作成したい。
TXTファイルを読み込み、アップロードし、そのファイルを要約して出力して欲しい
具体的には、client.uploads.upload_file_chunked()
関数を用いてTXTファイルをアップロードして、アップロードしたファイルのIDを取得し、そのIDを用いて、openai.chat.completions.create()
関数で出力(今回は、TXTファイルの要約)をしたい
発生している問題・分からないこと
エラーは出ないが、出力したファイルには、アップロードしたファイルにアクセスできないと書かれている
エラーメッセージ
error
1---download_file.md--- 2 3申し訳ありませんが、ファイルのアップロードや直接的な内容の確認はできません。ただし、論文の要約や数式の解説などについてお手伝いすることは可能です。論文の内容や主要なテーマを教えていただければ、それに基づいて詳しく要約することもできます。具体的な情報を提供していただけますか?
該当のソースコード
python
1import webbrowser 2import requests 3import threading 4import signal 5from flask import Flask, send_file, request, jsonify 6import os 7import openai 8import rich 9from pathlib import Path 10import pdfplumber 11 12openai.api_key = "省略" 13 14app = Flask(__name__) 15 16pdf_path = Path("省略.pdf") 17 18txt_path = Path("省略.txt") 19 20def extract_text_from_pdf_and_save_as_txt(pdf_path, txt_path): 21 """PDFファイルからテキストを抽出してTXTファイルに保存する関数""" 22 with pdfplumber.open(pdf_path) as pdf: 23 text = '' 24 for page in pdf.pages: 25 page_text = page.extract_text() 26 if page_text: # 抽出したテキストがNoneでないことを確認 27 text += page_text 28 29 # 抽出したテキストをTXTファイルに保存 30 with open(txt_path, 'w', encoding='utf-8') as txt_file: 31 txt_file.write(text) 32 33def from_disk(client,txt_path) -> None: 34 print("uploading file from disk") 35 36 upload = client.uploads.upload_file_chunked( 37 file=txt_path, 38 mime_type="txt", 39 purpose="batch", 40 ) 41 rich.print(upload) 42 43 # アップロードされたファイルのIDを取得 44 return upload.id 45 46def generate_text_from_chatgpt(file_id): 47 """ChatGPT APIを使ってテキストを生成する関数""" 48 response = openai.chat.completions.create( 49 model="gpt-4o-mini-2024-07-18", 50 messages=[ 51 {"role": "system", "content": "あなたは経験豊富な大学教授です。"}, 52 {"role": "user", "content": f"次のアップロードされたファイルの論文を、できるだけ詳細に、論文中の数式をたくさん引用して要約してください。ファイルID: {file_id}"}, 53 54 ], 55 stream=False, 56 ) 57 return response.choices[0].message.content.strip() 58 59def generate_markdown(text): 60 """テキストをMarkdownに変換し、そのパスを返す関数""" 61 markdown_output = "generated_file.md" 62 with open(markdown_output, "w") as file: 63 file.write(text) 64 return markdown_output 65 66@app.route('/download', methods=['GET']) 67def download_file(): 68 """生成したPDFファイルをクライアントに送信するエンドポイント""" 69 # OpenAIのAPIキーを設定 70 client = openai.OpenAI( 71 # This is the default and can be omitted 72 api_key="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", 73 ) 74 75 text = extract_text_from_pdf_and_save_as_txt(pdf_path, txt_path) # ChatGPTからテキストを生成 76 file_id = from_disk(client,txt_path) 77 text = generate_text_from_chatgpt(file_id) 78 file_path = generate_markdown(text) # テキストをPDFに変換 79 response = send_file(file_path, as_attachment=True) # ファイルを送信 80 os.remove(file_path) # ファイルを削除(オプション) 81 return response 82 83def run_flask(): 84 """Flaskサーバーを実行する関数""" 85 app.run(debug=True, use_reloader=False) 86 87if __name__ == '__main__': 88 # Flaskサーバーをバックグラウンドで実行 89 flask_thread = threading.Thread(target=run_flask) 90 flask_thread.start() 91 92 # ブラウザでURLを開く 93 webbrowser.open('http://127.0.0.1:5000/download') 94 95 # ファイルをダウンロードする(オプション) 96 response = requests.get('http://127.0.0.1:5000/download') 97 if response.status_code == 200: 98 with open('downloaded_file.md', 'wb') as file: 99 file.write(response.content) 100 print("ファイルがダウンロードされました。") 101 else: 102 print("ファイルのダウンロードに失敗しました。") 103 104
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
参考にしたGitのリポジトリ
https://github.com/openai/openai-python/blob/main/examples/uploads.py
この公式のリポジトリのExampleファイルのように、```Python
client.uploads.upload_file_chunked()
関数を用いている ### 補足 openai 1.44.0 python 3.12.4
回答1件
あなたの回答
tips
プレビュー