質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

ChatGPT

ChatGPTは、OpenAI社の提供するインタラクティブなテキストコミュニケーションを行うことができるAIサービスまたは、そのアルゴリズムのモデル名です。

Q&A

解決済

1回答

507閲覧

[OpenAI]ファイルをアップロードした後に、ファイルを参照する方法がわからない

kaneko_

総合スコア10

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

ChatGPT

ChatGPTは、OpenAI社の提供するインタラクティブなテキストコミュニケーションを行うことができるAIサービスまたは、そのアルゴリズムのモデル名です。

0グッド

0クリップ

投稿2024/09/15 15:25

実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroki-o

2024/09/15 16:13

ローカルでテキストファイルを読み込んで、質問文に連結して送る、ではどうでしょう?
guest

回答1

0

ベストアンサー

FilesのAPIの冒頭の説明によると、このファイルのアップロード機能は、AssistantsFine-tuningBatch APIなどで利用するためのものとありますので、おそらく利用されているopenai.chat.completions.create()関数(Chat機能)では利用することができません。

目的の論文がわかっているのであれば、ソースの52行目を

{"role": "user", "content": f"次の論文を、できるだけ詳細に、論文中の数式をたくさん引用して要約してください。\n\n{PDFからテキスト抽出した内容}"},

といった形にして、PDFから抽出したテキストを全部その場で渡してしまうのがシンプルで良いかと思います。

投稿2024/09/16 02:42

編集2024/09/16 02:45
segavvy

総合スコア1034

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問