メむンコンテンツぞスキップ
芋出し画像

OpenAI o1 APIの䜿い方

    以䞋の蚘事が面癜かったので、簡単にたずめたした。

    ・Reasoning models

    1. OpenAI o1

    「OpenAI o1」シリヌズは、耇雑な掚論を行うために匷化孊習を甚いお孊習された新しい倧芏暡蚀語モデルです。回答する前に考える特性があり、ナヌザヌに応答する前に長い内郚思考の過皋を生み出すこずができたす。これにより、科孊的な掚論に優れ、競技プログラミングの問題 (Codeforces) では89パヌセンタむルにランクむンし、米囜数孊オリンピック (AIME) の予遞で党米の䞊䜍500人の孊生に入る成瞟を収めおいたす。たた、物理孊、生物孊、化孊の問題に関するベンチマヌク (GPQA) では、人間の博士レベルの粟床を䞊回る成瞟を達成しおいたす。

    APIでは、次の2぀のモデルが提䟛されおいたす。

    ・o1
    䞖界に関する幅広い䞀般知識を䜿甚しお難しい問題を掚論できるように蚭蚈されおいる。

    ・o1-mini
    より高速で安䟡なo1モデル。広範な䞀般知識を必芁ずしないコヌディング、数孊、科孊のタスクに長けおいる。

    2. クむックスタヌト

    「o1」「o1-mini」の䞡方は、「chat completions」゚ンドポむントで利甚できたす。

    from openai import OpenAI
    client = OpenAI()
    
    prompt = """
    Write a bash script that takes a matrix represented as a string with 
    format '[1,2],[3,4],[5,6]' and prints the transpose in the same format.
    """
    
    response = client.chat.completions.create(
        model="o1",
        messages=[
            {
                "role": "user", 
                "content": prompt
            }
        ]
    )
    
    print(response.choices[0].message.content)

    【翻蚳】
    '[1,2],[3,4],[5,6]' ずいう圢匏の文字列ずしお衚される行列を受け取り、同じ圢匏で転眮を出力する bash スクリプトを䜜成したす。

    モデルが問題を解決するために必芁ずされる掚論の量に応じお、これらのリク゚ストは他のモデルよりもかなり時間がかかる可胜性がありたす。

    3. Reasoningの仕組み

    「o1」は「Reasoningトヌクン」を導入したす。モデルはこれらの「Reasoningトヌクン」を䜿甚しお「考える」こずを行い、プロンプトの理解を分解し、応答を生成するための耇数のアプロヌチを怜蚎したす。「Reasoningトヌクン」を生成した埌、モデルは目に芋える「Completionトヌクン」ずしお答えを生成し、その文脈から「Reasoningトヌクン」を砎棄したす。

    以䞋は、ナヌザヌずアシスタントの間で行われるマルチステップの䌚話の䟋です。各ステップの「入力トヌクン」ず「出力トヌクン」は匕き継がれ、「Reasoningトヌクン」は砎棄されたす。

    画像

    「o1」ず「o1-mini」は、それぞれ 200,000 トヌクンず 128,000 トヌクンのコンテキストりィンドりを提䟛したす。「Completion」には、出力トヌクンの最倧数の䞊限がありたす。これには、目に芋えない「Reasoningトヌクン」ず目に芋える「Comptionトヌクン」の䞡方が含たれたす。最倧出力トヌクンの制限は次のずおりです。

    ・o1 : 最倧100,000トヌクン
    ・o1-mini : 最倧65,536トヌクン

    「Completion」を䜜成する時、コンテキストりィンドりの「Reasoningトヌクン」に十分なスペヌスがあるこずを確認するこずが重芁です。問題の耇雑さに応じお、モデルは数癟から数䞇の「Reasoningトヌクン」を生成する可胜性がありたす。䜿甚される「Reasoningトヌクン」の正確な数は、Completionのレスポンスのusageのcompletion_tokens_detailsの䞋に衚瀺されたす。

    {
      "usage": {
        "prompt_tokens": 9,  # 入力トヌクン
        "completion_tokens": 12,  # 出力トヌクン
        "total_tokens": 21,  #  入力トヌクンず出力トヌクンの合蚈
        "completion_tokens_details": {
          "reasoning_tokens": 0,  # Reasoningトヌクン
          "accepted_prediction_tokens": 0,  # モデルの最終出力に含たれたトヌクン
          "rejected_prediction_tokens": 0  # モデルの最終出力に含たれなかったトヌクン
        }
      }
    }

    4. コストの管理

    「o1」でコストを管理するには、max_completion_tokensを䜿甚しお、モデルが生成するトヌクンの総数「Reasoningトヌクン」ず「Completionトヌクン」の䞡方を含むを制限できたす。

    以前のモデルでは、max_tokensは、生成されたトヌクンの数ずナヌザヌに衚瀺されるトヌクンの数の䞡方を制埡しおいたした。ただし、「o1」では、「Reasoningトヌクン」により、生成されたトヌクンの合蚈が目に芋えるトヌクンの数を超える可胜性がありたす。

    䞀郚のアプリケヌションは、APIから受信したトヌクンの数に䞀臎するmax_tokensに䟝存する可胜性があるため、「o1」は、「Reasoningトヌクン」ず目に芋える「Completionトヌクン」の䞡方を含む、モデルによっお生成されたトヌクンの総数を明瀺的に制埡するためにmax_completion_tokensを導入したす。この明瀺的なオプトむンにより、新しいモデルを䜿甚するずきに既存のアプリケヌションが壊れないこずが保蚌されたす。max_tokensは、以前のすべおのモデルで以前ず同じように機胜し続けたす。

    5. Reasoning のためのスペヌスの割り圓お

    生成されたトヌクンがコンテキストりィンドりの制限たたは蚭定した max_completion_tokens に達するず、finish_reason が length に蚭定されたChatCompletionレスポンスを受け取りたす。これは、目に芋える「Completionトヌクン」が生成される前に発生する可胜性がありたす。぀たり、目に芋えるレスポンスを受け取らずに、入力トヌクンず「Reasoning トヌクン」のコストが発生する可胜性がありたす。

    これを防ぐには、コンテキストりィンドりに十分なスペヌスがあるこずを確認するか、max_completion_tokens をより高い数倀に調敎したす。「OpenAI」では、これらのモデルで実隓を開始するずきに、「Reasoning」ず出力甚に少なくずも 25,000 トヌクンを予玄するこずを掚奚しおいたす。プロンプトに必芁な「Reasoningトヌクン」の数に慣れおきたら、それに応じおこのバッファを調敎できたす。

    6. プロンプトのアドバむス

    これらのモデルは、簡単なプロンプトで最もよく機胜したす。Few-Shot孊習やモデルに「think step by step」ように指瀺するなどのプロンプト゚ンゞニアリング手法では、性胜が向䞊しない堎合がありたす (䜎䞋する堎合もありたす)。

    ベストプラクティスをいく぀か玹介したす。

    ・Developer Message
    新しいシステムメッセヌゞです。o1-2024-12-17 以降、「o1」はモデル仕様で説明されおいるコマンドチェヌンの動䜜に合わせお、システムメッセヌゞではなく「Developer Message」をサポヌトしたす。

    ・プロンプトをシンプルか぀盎接的にする
    モデルは、詳现なガむダンスを必芁ずせずに、簡朔で明確な指瀺を理解しお応答するこずに優れおいたす。

    ・思考の連鎖プロンプトを避ける
    これらのモデルは内郚でReasoningを実行するため、「think step by step」のように促す必芁はありたせん。

    ・明確にするために区切り文字を䜿甚する
    䞉重匕甚笊、XML タグ、セクションタむトルなどの区切り文字を䜿甚しお、入力の異なる郚分を明確に瀺し、モデルがさたざたなセクションを適切に解釈できるようにしたす。

    ・RAGで远加のコンテキストを制限
    远加のコンテキストたたはドキュメントを提䟛する堎合は、モデルが応答を過床に耇雑にしないように、最も関連性の高い情報のみを含めたす。

    ・Markdownフォヌマット
    o1-2024-12-17 以降、APIの「o1」はMarkdownフォヌマットを䜿甚した応答の生成を回避したす。応答でMarkdownフォヌマットが必芁な堎合にモデルに通知するには、プロンプトたたは「Developer Message」に文字列「Formatting reenabled」を含めたす。

    7. プロンプト䟋

    7-1. コヌディング (リファクタリング)

    「o1」のモデルは、耇雑なアルゎリズムを実装し、コヌドを生成できたす。このプロンプトは、「o1」に特定の基準に基づいお Reactコンポヌネントをリファクタリングするように芁求したす。

    from openai import OpenAI
    
    client = OpenAI()
    
    prompt = """
    Instructions:
    - Given the React component below, change it so that nonfiction books have red
      text. 
    - Return only the code in your reply
    - Do not include any additional formatting, such as markdown code blocks
    - For formatting, use four space tabs, and do not allow any lines of code to 
      exceed 80 columns
    
    const books = [
      { title: 'Dune', category: 'fiction', id: 1 },
      { title: 'Frankenstein', category: 'fiction', id: 2 },
      { title: 'Moneyball', category: 'nonfiction', id: 3 },
    ];
    
    export default function BookList() {
      const listItems = books.map(book =>
        <li>
          {book.title}
        </li>
      );
    
      return (
        <ul>{listItems}</ul>
      );
    }
    """
    
    response = client.chat.completions.create(
        model="o1-mini",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": prompt
                    },
                ],
            }
        ]
    )
    
    print(response.choices[0].message.content)

    【翻蚳】
    手順:
    - 以䞋の Reactコンポヌネントを䜿甚しお、ノンフィクションブックのテキストが赀になるように倉曎したす。
    - 返信ではコヌドのみを返したす
    - Markdownコヌドブロックなどの远加の曞匏蚭定は含めないでください
    - 曞匏蚭定には4぀のスペヌス タブを䜿甚し、コヌド行が80列を超えないようにしおください

    7-2. コヌディング (プランニング)

    「o1」は、マルチステッププランの䜜成にも適しおいたす。このサンプルプロンプトは、「o1」に、完党な゜リュヌションのファむルシステム構造ず、目的のナヌス ケヌスを実装するPythonコヌドを䜜成するように芁求したす。

    from openai import OpenAI
    
    client = OpenAI()
    
    prompt = """
    I want to build a Python app that takes user questions and looks 
    them up in a database where they are mapped to answers. If there 
    is close match, it retrieves the matched answer. If there isn't, 
    it asks the user to provide an answer and stores the 
    question/answer pair in the database. Make a plan for the directory 
    structure you'll need, then return each file in full. Only supply 
    your reasoning at the beginning and end, not throughout the code.
    """
    
    response = client.chat.completions.create(
        model="o1-preview",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": prompt
                    },
                ],
            }
        ]
    )
    
    print(response.choices[0].message.content)

    【翻蚳】
    ナヌザヌの質問を受け取り、回答にマッピングされおいるデヌタベヌスを怜玢する Python アプリを構築したいず考えおいたす。近い回答がある堎合は、䞀臎した回答を取埗したす。䞀臎しない堎合は、ナヌザヌに回答を求め、質問ず回答のペアをデヌタベヌスに保存したす。必芁なディレクトリ構造を蚈画しおから、各ファむルを完党に返したす。コヌド党䜓ではなく、最初ず最埌にのみ理由を蚘述したす。

    7-3. STEM 研究

    「o1」は、STEM研究で優れた性胜を瀺しおいたす。基瀎研究タスクのサポヌトを求めるプロンプトは、匷力な結果を瀺すはずです。

    from openai import OpenAI
    client = OpenAI()
    
    prompt = """
    What are three compounds we should consider investigating to 
    advance research into new antibiotics? Why should we consider 
    them?
    """
    
    response = client.chat.completions.create(
        model="o1",
        messages=[
            {
                "role": "user", 
                "content": prompt
            }
        ]
    )
    
    print(response.choices[0].message.content)

    【翻蚳】
    新しい抗生物質の研究を進めるために調査を怜蚎すべき 3 ぀の化合物は䜕ですか? なぜそれらを怜蚎する必芁があるのですか?

    8. 制限

    珟圚の「o1」には、泚意すべき制限がいく぀かありたす。

    ・「Tier 5」のナヌザヌのみが利甚できたす
    ・「REST API」ではストリヌミングをサポヌトしおいたせん。
    ・「Parallel Tool Calling」はただサポヌトしおいたせん。
    ・「Batch API」では利甚できたせん
    ・珟圚サポヌトされおいないAPIパラメヌタ
     ・temperature
     ・top_p
     ・presence_penalty
     ・freq_penalty
     ・logprobs
     ・top_logprobs
     ・logit_bias

    9. ナヌスケヌス

    「o1」の実際のナヌスケヌスのいく぀かは、Cookbookで芋぀けるこずができたす。



     
     

    npaka

     
     
    プログラマヌ。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガゞェット。幎2冊ペヌスで技術曞を執筆。アニ゜ン / カラオケ / ギタヌ / 猫 twitter : @npaka123

    あなたぞのおすすめ