
OpenAI Responses API å ¥é (8) - Reasoningã¢ãã«
ãResponses APIãã®ãReasoningã¢ãã«ãã€ããŠãŸãšããŸããã
åå
1. Reasoningã¢ãã«
ãReasoningã¢ãã«ã(o1ão3-miniãªã©)ã¯ãè€éãªæšè«ãå®è¡ããããã«åŒ·ååŠç¿ãããæ°ããLLMã¢ãã«ã§ãããReasoningã¢ãã«ãã¯çããåã«èãããŠãŒã¶ãŒã«å¿çããåã«é·ãå éšæèãã§ãŒã³ãçæããŸãããã®ãããè€éãªåé¡è§£æ±ºãã³ãŒãã£ã³ã°ãç§åŠçæšè«ããšãŒãžã§ã³ãã¯ãŒã¯ãããŒã®ãã«ãã¹ãããèšç»ã«åªããŠããŸãã
2. OpenAI API ã®æºå
ãGoogle Colabãã§ã®ãOpenAI APIãã®æºåæé ã¯æ¬¡ã®ãšããã§ãã
(1) ããã±ãŒãžã®ã€ã³ã¹ããŒã«ã
ãResponses APIããšãAgent SDKãã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã
# ããã±ãŒãžã®ã€ã³ã¹ããŒã«
!pip install -U openai openai-agents(2) ç°å¢å€æ°ã®æºåã
巊端ã®éµã¢ã€ã³ã³ã§ãOPENAI_API_KEYããèšå®ããŠããã以äžã®ã»ã«ãå®è¡ããŠãã ããã
import os
from google.colab import userdata
# ç°å¢å€æ°ã®æºå (巊端ã®éµã¢ã€ã³ã³ã§OPENAI_API_KEYãèšå®)
os.environ["OPENAI_API_KEY"] = userdata.get("OPENAI_API_KEY")(3) ã¯ã©ã€ã¢ã³ãã®æºåã
from openai import OpenAI
# ã¯ã©ã€ã¢ã³ãã®æºå
client = OpenAI()3. Reasoningã¢ãã«ã®å®è¡
(1) ã¡ãã»ãŒãžãªã¹ãã®æºå
# ã¡ãã»ãŒãžãªã¹ãã®æºå
messages = [
{
"role": "user",
"content": "[1,2],[3,4],[5,6]' ãšãã圢åŒã®æååãšããŠè¡šãããè¡åãåãåããåã圢åŒã§è»¢çœ®ãåºåããbashã¹ã¯ãªãããäœæããŠãã ããã"
}
](2) æšè«ã®å®è¡ã
# æšè«ã®å®è¡
response = client.responses.create(
model="o3-mini",
reasoning={"effort": "medium"},
input=messages
)
print(response.output_text)次ã®ãã㪠bash ã¹ã¯ãªããäŸããåèãã ããããã®ã¹ã¯ãªããã¯ãåŒæ°ãšããŠ
ââ"[1,2],[3,4],[5,6]"
ã®ãããªæååãåãåããè¡åã®è»¢çœ®ïŒãã®å Žå㯠"[1,3,5],[2,4,6]"ïŒãåã圢åŒã§åºåããŸãã
å
容ã¯ä»¥äžã®éãã§ãã
------------------------------------------------
#!/bin/bash
# äœ¿ãæ¹:
# ./transpose.sh "[1,2],[3,4],[5,6]"
#
# å
¥å㯠"[æ°å,æ°å],...[æ°å,æ°å]" ãšãã圢åŒãæåŸ
ããŠããŸãã
if [ "$#" -eq 0 ]; then
echo "Usage: $0 '[1,2],[3,4],[5,6]'"
exit 1
fi
# åŒæ°ããå
¥åè¡åã®æååãååŸ
input="$1"
# äœèšãªç©ºçœãã·ã³ã°ã«ïŒããã«ã¯ã©ãŒããããã°é€å»
matrix=$(echo "$input" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//; s/^[\'"]*//; s/[\'"]*$//')
# è¡ã®åºåã "],[" ãæ¹è¡ã«å€æããå
é ã® "[" ãšæ«å°Ÿã® "]" ãé€å»ããŠ
# è¡ããšã«ã1,2ããªã©ã®åœ¢åŒã«ããŸãã
rows=$(echo "$matrix" | sed 's/],\[/\n/g; s/^\[//; s/\]$//')
# awk ãçšããŠè»¢çœ®ã宿œ
# ã»åè¡ãã³ã³ãåºåãã§åå²ããé
å a[è¡çªå·, åçªå·] ã«æ ŒçŽ
# ã»å
šäœã®è¡æ°ãšåè¡ã®åæ°ïŒmax åæ°ïŒãèšé²
# ã»è»¢çœ®ã§ã¯å
ã®åæ°ãæ°ããè¡æ°ãå
ã®è¡æ°ãæ°ããåæ°ãšããŠåºå
transposed=$(echo "$rows" | awk -F, '
{
for (i = 1; i <= NF; i++) {
a[NR, i] = $i
}
if (NF > max) {
max = NF
}
rows = NR
}
END {
output = ""
for (i = 1; i <= max; i++) {
line = "["
for (j = 1; j <= rows; j++) {
line = line a[j, i] (j < rows ? "," : "")
}
line = line "]"
output = output (i < max ? line "," : line)
}
print output
}')
# çµæã衚瀺
echo "$transposed"
------------------------------------------------
ïŒã¹ã¯ãªããã®è§£èª¬ïŒ
1. sed ã«ãã£ãŠå
¥åæååã®ååŸã®äžèŠãªç©ºçœãã¯ã©ãŒããé€å»ãã
ãŸã "],[â ãæ¹è¡ã«çœ®æããŠåè¡ã«ã1,2ãã®ãããªæååãå
¥ãããã«æŽåœ¢ããŸãã
2. awk ã¯ãã£ãŒã«ãåºåãæåãã³ã³ã (,) ã«ããŠåè¡ãåè§£ãã
2 次å
é
å a[è¡,å] ã«å€ãæ ŒçŽããŸãã
3. END ãããã¯ã§è»¢çœ®ãè¡ããåæ°ããè¡ïŒïŒå
ã®åïŒã®æ°å€ã "[" ãš "]" ã§å²ã¿ã
è¡å士ã¯ã³ã³ãã§é£çµããŠæçµçãªæååãšããŠåºåããŸãã
å®è¡äŸ:
$ ./transpose.sh "[1,2],[3,4],[5,6]"
[1,3,5],[2,4,6]
ããã§ãå
¥åãããè¡åã®è»¢çœ®ãåã圢åŒã§åºåããããšãã§ããŸããäžèšã®äŸã§ã¯ããreasoning_effortãã¯ãããã³ãããžã®å¿çãäœæããåã«ã¢ãã«ãçæãã¹ãReasoningããŒã¯ã³ã®æ°ã«é¢ããã¬ã€ãã³ã¹ãæäŸããããã«äœ¿çšãããŸãããã®ãã©ã¡ãŒã¿ã«ã¯ãlowãmediumãhigh ã®ãããããæå®ã§ããŸããlow ã¯é床ãšããŒã¯ã³ã®çµæžçãªäœ¿çšãåªå ããhigh ã¯ããå€ãã®ããŒã¯ã³ãçæãããå¿çãé ããªãããšãç ç²ã«ããŠãããå®å šãªæšè«ãåªå ããŸããããã©ã«ãå€ã¯ medium ã§ãéåºŠãšæšè«ã®ç²ŸåºŠã®ãã©ã³ã¹ãåããŠããŸãã
4. Reasoningã®ããã¿
4-1. Reasoningã®ããã¿
ãReasoningã¢ãã«ãã§ã¯ãå ¥åããŒã¯ã³ãšåºåããŒã¯ã³ã«å ããŠReasoningããŒã¯ã³ãå°å ¥ãããŠããŸããã¢ãã«ã¯ãããã®ReasoningããŒã¯ã³ã䜿çšããŠãèããããããããã³ããã®çè§£ãåè§£ããå¿çãçæããããã®è€æ°ã®ã¢ãããŒããæ€èšããŸããReasoningããŒã¯ã³ãçæããåŸãã¢ãã«ã¯ç®ã«èŠããCompletionããŒã¯ã³ãšããŠåçãçæããReasoningããŒã¯ã³ãã³ã³ããã¹ãããç Žæ£ããŸãã
ãŠãŒã¶ãŒãšã¢ã·ã¹ã¿ã³ãéã®è€æ°ã¹ãããã®äŒè©±ã®äŸã次ã«ç€ºããŸããåã¹ãããã®å ¥åããŒã¯ã³ãšåºåããŒã¯ã³ã¯åŒãç¶ãããæšè«ããŒã¯ã³ã¯ç Žæ£ãããŸãã

ReasoningããŒã¯ã³ã¯ API çµç±ã§ã¯è¡šç€ºãããŸããããã¢ãã«ã®ã³ã³ããã¹ããŠã£ã³ããŠå ã®ã¹ããŒã¹ãå æããåºåããŒã¯ã³ãšããŠèª²éãããŸãã
4-2. ã³ã³ããã¹ããŠã£ã³ããŠã®ç®¡ç
å¿çãäœæãããšãã«ãã³ã³ããã¹ããŠã£ã³ããŠã«ReasoningããŒã¯ã³çšã®ååãªã¹ããŒã¹ãããããšã確èªããããšãéèŠã§ããåé¡ã®è€éãã«å¿ããŠãã¢ãã«ã¯æ°çŸããæ°äžã®ReasoningããŒã¯ã³ãçæããå ŽåããããŸãã䜿çšãããReasoningããŒã¯ã³ã®æ£ç¢ºãªæ°ã¯ãå¿çãªããžã§ã¯ãã®äœ¿çšç¶æ³ãªããžã§ã¯ãã® output_tokens_details ã®äžã«è¡šç€ºãããŸãã
(1) 䜿çšç¶æ³ã®ç¢ºèªã
# 䜿çšç¶æ³ã®ç¢ºèª
print(response.usage)ResponseUsage(
input_tokens=115,
output_tokens=2359,
output_tokens_details=OutputTokensDetails(
reasoning_tokens=1536
),
total_tokens=2474,
input_tokens_details={'cached_tokens': 0}
)4-3. ã³ã¹ãã®ç®¡ç
Reasoningã¢ãã«ã§ã³ã¹ãã管çããã«ã¯ãmax_output_tokens ã䜿çšããŠãã¢ãã«ãçæããããŒã¯ã³ã®åèšæ° (ReasoningããŒã¯ã³ãšæçµåºåããŒã¯ã³ã®äž¡æ¹ãå«ã) ãå¶éã§ããŸãã
4-4. Reasoningçšã®ã¹ããŒã¹ã®å²ãåœãŠ
çæãããããŒã¯ã³ãã³ã³ããã¹ããŠã£ã³ããŠã®å¶éãŸãã¯èšå®ãã max_output_tokens å€ã«éãããšãã¹ããŒã¿ã¹ã incomplete ã§ incomplete_details ã®å¿çãè¿ãããreason 㯠max_output_tokens ã«èšå®ãããŸããããã¯ãç®ã«èŠããåºåããŒã¯ã³ãçæãããåã«çºçããå¯èœæ§ããããŸããã€ãŸããç®ã«èŠããå¿çãåä¿¡ããã«ãå ¥åããŒã¯ã³ãšReasoningããŒã¯ã³ã®ã³ã¹ããçºçããå¯èœæ§ããããŸãã
ãããé²ãã«ã¯ãã³ã³ããã¹ããŠã£ã³ããŠã«ååãªã¹ããŒã¹ãããããšã確èªããããmax_output_tokens å€ãããé«ãæ°å€ã«èª¿æŽããŸããOpenAI ã§ã¯ããããã®ã¢ãã«ã§å®éšãéå§ãããšãã«ãReasoningãšåºåçšã«å°ãªããšã 25,000 ããŒã¯ã³ãäºçŽããããšãæšå¥šããŠããŸããããã³ããã«å¿ èŠãªReasoningããŒã¯ã³ã®æ°ã«æ £ããŠããããããã«å¿ããŠãã®ãããã¡ã調æŽã§ããŸãã
(1) åºåããŒã¯ã³æ°ãå¶éããŠæšè«ã®å®è¡ã
# æšè«ã®å®è¡
response = client.responses.create(
model="o3-mini",
reasoning={"effort": "medium"},
input=messages,
max_output_tokens=300,ã# åºåããŒã¯ã³æ°ã®å¶é
)
if response.status == "incomplete" and response.incomplete_details.reason == "max_output_tokens":
print("ããŒã¯ã³ããªããªã£ãã")
if response.output_text:
print("éšååºå:", response.output_text)
else:
print("Reasoningäžã«ããŒã¯ã³ããªããªã£ãã")ããŒã¯ã³ããªããªã£ãã
Reasoningäžã«ããŒã¯ã³ããªããªã£ãã
5. ããã³ããã®ã¢ããã€ã¹
ãReasoningã¢ãã«ããšã GPTã¢ãã«ããããã³ããããå Žåãèæ ®ãã¹ãéããããã€ããããŸããäžè¬çã«ããReasoningã¢ãã«ãã¯ãé«ã¬ãã«ã®ã¬ã€ãã³ã¹ã®ã¿ã§ã¿ã¹ã¯ã«å¯ŸããŠããè¯ãçµæãæäŸããŸããããã¯ãéåžžã«æ£ç¢ºãªæç€ºã®æ©æµãåããããšãå€ããGPTã¢ãã«ããšã¯å€å°ç°ãªããŸãã
ã»ãReasoningã¢ãã«ãã¯ãäžçŽã®ååã®ãããªãã®ã§ããéæãã¹ãç®æšãäžããŠã詳现ã解決ããŠããããšä¿¡é Œã§ããŸãã
ã»ãGPTã¢ãã«ãã¯ãåŸèŒ©ã®ååã®ãããªãã®ã§ããç¹å®ã®åºåãäœæããããã®æç€ºçãªæç€ºãããã°ãæé«ã®ããã©ãŒãã³ã¹ãçºæ®ããŸãã
Reasoningã¢ãã«ã䜿çšããéã®ãã¹ããã©ã¯ãã£ã¹ã®è©³çްã«ã€ããŠã¯ããã®ã¬ã€ããåç §ããŠãã ããã