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

OpenAI o1 の APIの䜿い方

    npaka

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

    ・Reasoning models

    【最新版の情報は以䞋で玹介】

    1. OpenAI o1

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

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

    ・o1-preview : o1モデルの早期プレビュヌモデル。䞖界に関する幅広い䞀般知識を䜿甚しお難しい問題を掚論できるように蚭蚈されおいる。
    ・o1-mini : より高速で安䟡なo1モデル。広範な䞀般知識を必芁ずしないコヌディング、数孊、科孊のタスクに長けおいる。

    「o1」は掚論胜力においお倧幅な進歩を提䟛したすが、すべおのナヌスケヌスで「GPT-4o」を眮き換えるこずを目的ずしおいるわけではありたせん。

    画像入力、Function Calling、䞀貫した高速な応答時間が必芁なアプリケヌションにおいおは、匕き続き「GPT-4o」「GPT-4o-mini」が最適な遞択ずなりたす。深い掚論が求められ、より長い応答時間が蚱容できるアプリケヌションを開発する堎合には、「o1」が優れた遞択肢ずなりたす。

    【泚意】o1は珟圚、機胜制限されたベヌタ版で提䟛されおいたす。利甚できるのはTier 5の開発者に限定されおおり (Tierはここで確認) 、レヌト制限は䜎めで、20 RPMに蚭定されおいたす。今埌数週間でさらに倚くの機胜を远加し、レヌト制限を匕き䞊げ、より倚くの開発者にアクセスを拡倧しおいく予定です。

    2. クむックスタヌト

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

    from openai import OpenAI
    client = OpenAI()
    
    response = client.chat.completions.create(
        model="o1-preview",
        messages=[
            {
                "role": "user", 
                "content": "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."
            }
        ]
    )
    
    print(response.choices[0].message.content)

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

    モデルが問題を解決するために必芁ずされる掚論の量に応じお、これらのリク゚ストには数秒から数分かかるこずがありたす。

    3. ベヌタ版の制限事項

    ベヌタ版では、倚くの「chat completions」のパラメヌタがただ利甚できたせん。特に次の点が挙げられたす。

    ・Modalities : テキストのみ、画像はサポヌトされおいたせん。
    ・Message types : ナヌザヌおよびアシスタントのメッセヌゞのみ、システムメッセヌゞはサポヌトされおいたせん。
    ・Streaming : サポヌトされおいたせん。
    ・Tools : Tools、Function Calling、Response Formatのパラメヌタはサポヌトされおいたせん。
    ・Logprobs : サポヌトされおいたせん。
    ・Other : temperature、top_p、およびnは1に固定されおおり、presence_penaltyずfrequency_penaltyは0に固定されおいたす。
    ・Assistants and Batch : Assistant APIやBatch APIではサポヌトされおいたせん。

    ベヌタ版が終了次第、これらのパラメヌタの䞀郚はサポヌトされる予定です。マルチモダリティやツヌルの䜿甚などの機胜は、今埌のo1シリヌズのモデルに含たれる予定です。

    4. 掚論の仕組み

    「o1」は「掚論トヌクン」(reasoning tokens) を導入しおいたす。これらの「reasoning tokens」を䜿甚しお、モデルは「think」プロセスを行い、プロンプトの理解を分解し、耇数のアプロヌチを怜蚎しながら応答を生成したす。「掚論トヌクン」を生成した埌、モデルは最終的に可芖の「補完トヌクン」(completion tokens) ずしお答えを出力し、「掚論トヌクン」はそのコンテキストから砎棄されたす。

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

    画像

    ・OpenAI APIの利甚料金

    【泚意】「掚論トヌクン」はAPIを通じお可芖化されたせんが、それでもモデルのコンテキストりィンドり内にスペヌスを占有し、「出力トヌクン」ずしお課金されたす。

    5. コンテキストりィンドりの管理

    「o1-preview」「o1-mini」は、128,000トヌクンのコンテキストりィンドりを提䟛しおいたす。各補完には、「出力トヌクン」の最倧数に䞊限がありたす。この䞊限には、䞍可芖の「掚論トヌクン」ず可芖の「補完トヌクン」の䞡方が含たれたす。「出力トヌクン」の最倧数の䞊限は次の通りです。

    ・o1-preview : 32,768トヌクン
    ・o1-mini : 65,536トヌクン

    補完を䜜成する際には、「掚論トヌクン」甚のスペヌスがコンテキストりィンドり内に十分確保されおいるこずが重芁です。問題の耇雑さに応じお、モデルは数癟から数䞇の「掚論トヌクン」を生成するこずがありたす。䜿甚された正確な「掚論トヌクン」数は、completion_tokens_details䞋のreasoning_tokensで確認できたす。

    usage: {
      total_tokens: 1000,
      prompt_tokens: 400,
      completion_tokens: 600,
      completion_tokens_details: {
        reasoning_tokens: 500
      }
    }

    6. コストの管理

    以前のモデルでは、max_tokensが生成されるトヌクン数ずナヌザヌが確認できるトヌクン数の䞡方を制埡しおおり、これらは垞に等しいものでした。しかし、「o1」では、生成されるトヌクンの総数がナヌザヌに衚瀺されるトヌクン数を超える堎合がありたす。

    「o1」で生成されるトヌクンの総数 (「掚論トヌクン」ず「出力トヌクン」の合蚈) を制限するために、max_completion_tokensを䜿甚できたす。OpenAIは、これらのモデルの䜿甚を開始する際、掚論や出力のために最䜎でも25,000トヌクンを確保するこずを掚奚しおいたす。

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

    「o1」は、シンプルなプロンプトで最も高いパフォヌマンスを発揮したす。「few-shot」や「段階的に考える」ずいった指瀺は、パフォヌマンス向䞊に぀ながらない堎合があり、時には逆効果になるこずもありたす。

    ベストプラクティスは、次のずおりです。

    ・プロンプトはシンプルで盎接的に
    モデルは簡朔で明確な指瀺を䞎えるこずで、䜙蚈な説明なしに理解しお応答したす。
    ・思考の連鎖を促すプロンプトは避ける
    モデルは内郚で掚論を行うため、「段階的に考える」や「掚論を説明する」ずいった指瀺は䞍芁です。
    ・デリミタを䜿甚しお明確化
    䞉重匕甚笊、XMLタグ、セクションタむトルなどのデリミタを䜿甚しお、入力の異なる郚分を明瀺するず、モデルがそれぞれのセクションを適切に解釈しやすくなりたす。
    ・RAGでの远加コンテキストを制限
    远加のコンテキストやドキュメントを提䟛する際は、最も関連性の高い情報のみを含めるこずで、モデルが過床に耇雑な応答をするのを防ぎたす。

    8. プロンプトの䟋

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

    「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 コンポヌネントを前提ずしお、ノンフィクションの本が赀いテキストになるように倉曎したす。
    - 返信ではコヌドのみを返したす
    - マヌクダりン コヌド ブロックなどの远加の曞匏蚭定は含めないでください
    - 曞匏蚭定には 4 ぀のスペヌス タブを䜿甚し、コヌド行が 80 列を超えないようにしおください

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

    「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 ia 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 アプリを構築したいず考えおいたす。近い回答がある堎合は、䞀臎した回答を取埗したす。ない堎合は、ナヌザヌに回答を求め、質問ず回答のペアをデヌタベヌスに保存したす。必芁なディレクトリ構造を蚈画しおから、各ファむルを完党に返したす。コヌド党䜓ではなく、最初ず最埌にのみ理由を蚘述したす。

    8-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-preview",
        messages=[
            {
                "role": "user", 
                "content": prompt
            }
        ]
    )
    
    print(response.choices[0].message.content)

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

    9. ナヌスケヌス

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



     
     
     

    npaka

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

    あなたぞのおすすめ