
OpenAI o1 ã® APIã®äœ¿ãæ¹
以äžã®èšäºãé¢çœãã£ãã®ã§ãç°¡åã«ãŸãšããŸããã
ãææ°çã®æ å ±ã¯ä»¥äžã§ç޹ä»ã
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)ãåŒãç¶ãããŸããããæšè«ããŒã¯ã³ãã¯ç Žæ£ãããŸãã

ãæ³šæããæšè«ããŒã¯ã³ãã¯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ã§èŠã€ããããšãã§ããŸãã