
OpenAI o1 APIã®äœ¿ãæ¹
以äžã®èšäºãé¢çœãã£ãã®ã§ãç°¡åã«ãŸãšããŸããã
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ã§èŠã€ããããšãã§ããŸãã