HEROZ ASKへのo1モデル導入
本文の状態
日本語全文を表示中
詳細モードで約3分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
HEROZ Tech Blog
OpenAIのo1モデルをHEROZ ASKに組み込み、LangChainを用いた実装時の留意点を共有。Azure OpenAI Service経由で2025年1月24日から利用可能。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
タイトル: HEROZ ASKへのo1の導入
昨年末の12月5日、12 Days of OpenAIにおいてついにo1が発表されました。また、Azure OpenAI Serviceでもこのo1が利用可能になったため、HEROZ ASKへ組み込みました。langchainを用いた組み込みで気になった点を記していきます。
なお、このo1はHEROZ ASKで2025年1月24日以降に使用可能です。
o1-preview時代からの共通項目
昨年9月にo1-previewがリリースされて以来、社内ではo1-previewを組み込む試作を実施していました。その時から注意点や気になった点は以下の通りです。
o1-previewやo1-miniはChatOpenAI()において、
temperatureオプションの削除、
ストリーミング(streaming)オプションの削除、
SystemMessage(システムメッセージ)の除去が行われています。
ストリーミングオプションを削除するとストリーミングを期待している時に何も出力されなくなるため、以下のようなラッピングクラスを用意しました。
class ChatOpenAI_o1(ChatOpenAI):
def _generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
results = super()._generate(
messages, stop, run_manager, **kwargs,
)
if run_manager is not None:
# on_llm_new_tokenしないと結果が表示されない
run_manager.on_llm_new_token("".join([g.text for g in results.generations]))
return results
async def _agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
results = super()._generate(
messages, stop, run_manager, **kwargs,
)
if run_manager is not None:
# on_llm_new_tokenしないと結果が表示されない
await run_manager.on_llm_new_token(
"".join([g.text for g in results.generations])
)
return resultsまた、ストリーミング時はstream_usageオプションを使用すると使用トークン数を取得できますが、これの出力トークン(completion tokens)には思考用のReasoning tokenも含まれており、助かりました。
o1はo1-previewと比べると以下の点で変更となっています。
SystemMessageへの対応: roleはdeveloper、
画像入力: 数式の入力がやりやすくなります、
Markdown出力: プロンプトにFormatting reenabled。
SystemMessageについてはlangchainにおいてはSystemMessagePromptTemplateに、
additional_kwargs = { "__openai_role__": "developer" }
を設定することで対応できます。
一方で、o1は未だにコスト計算用の単価が書かれているopenai_info.pyやtiktokenのmodel.pyが対応していないので、テーブルを動的に上書きしない限りはトークンやコストの計算時にエラーが発生します。これらのファイルについては早期に追加されることを期待します。
早速、難解な数式を画像で入力して解かせたところ、無事に正解しました。

o1の実行結果
gpt-4oより賢いと言われているo1をHEROZ ASKへ導入することができました。o1は確かに込み入った数式のような問題には抜群の能力を発揮するのですが、普通の質問や知識を問う内容だとgpt-4oと回答が変わらず、o1は時間とコストだけがかかるので、使い所が難しいように思いました。一般ユーザーを含めて導入することにより、その辺りのユースケースをもっと発掘していきたいと思います。
原文を表示
o1-preview時代からの共通項目
昨年末の12/5に12 Days of OpenAIでついにo1が発表となりました。 また、Azure OpenAI Serviceでも、このo1が使用できるようになりましたので、HEROZ ASKへと組み込みました。 langchainを用いた組み込みで気になった点を書いていきます。
なお、このo1はHEROZ ASKで2025/1/24以降で使用可能です。
o1-preview時代からの共通項目
昨年9月にo1-previewがリリースされて以来、内部的にはo1-previewを組み込む試作を実施していました。 その時から注意点や気になった点は以下となります。
o1-previewやo1-miniはChatOpenAI()
temperature: オプションの削除
ストリーミング(streaming): オプションの削除
SystemMessage: システムメッセージの除去
ストリーミングオプションを削除するとストリーミングを期待している時に何も出力されなくなるため、以下のようなラッピングクラスを用意しました。
class ChatOpenAI_o1(ChatOpenAI): def _generate( self, messages: List[BaseMessage], stop: Optional[List[str]] = None, run_manager: Optional[CallbackManagerForLLMRun] = None, kwargs: Any, ) -> ChatResult: results = super()._generate( messages, stop, run_manager, *kwargs, ) if run_manager is not None: # on_llm_new_tokenしないと結果が表示されない run_manager.on_llm_new_token("".join([g.text for g in results.generations])) return results async def _agenerate( self, messages: List[BaseMessage], stop: Optional[List[str]] = None, run_manager: Optional[AsyncCallbackManagerForLLMRun] = None, kwargs: Any, ) -> ChatResult: results = super()._generate( messages, stop, run_manager, *kwargs, ) if run_manager is not None: # on_llm_new_tokenしないと結果が表示されない await run_manager.on_llm_new_token( "".join([g.text for g in results.generations]) ) return results
また、ストリーミング時はstream_usageオプションを使用すると使用トークン数を取得できますが、これの出力トークン(completion tokens)に思考用のReasoning tokenも含まれており、助かりました。
o1はo1-previewと比べると以下の点で変更となっています。
SystemMessageへの対応: roleはdeveloper
画像入力: 数式の入力がやりやすくなります
Markdown出力: プロンプトにFormatting reenabled
SystemMessageについてはlangchainにおいてはSystemMessagePromptTemplate
additional_kwargs = { "__openai_role__": "developer" }
一方で、o1は未だにコスト計算用の単価が書かれているopenai_info.pyやtiktokenのmodel.pyが対応していないので、テーブルを動的に上書きしない限りはトークンやコストの計算時にエラーが発生します。 これらのファイルについては早期に追加されることを期待します。
早速、難解な数式を画像で入力して解かせたところ、無事に正解しました。
o1の実行結果
gpt-4oより賢いと言われているo1をHEROZ ASKへ導入することができました。 o1は確かに込み入った数式のような問題には抜群の能力を発揮するのですが、普通の質問や知識を問う内容だとgpt-4oと回答が変わらず、o1は時間とコストだけがかかるので、使い所が難しいように思いました。 一般ユーザーを含めて導入することにより、その辺りのユースケースをもっと発掘していきたいと思います。
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み