HAL_DATA_techBlog

HALDATAの技術ブログです。

Smolagentsの「安定した出力形態」でReACTを止めない仕組み

CodeAgentの仕組み


AIサービス開発中「LLMが生成する出力形式が安定しない」ことが問題となるケースが少なくありません。たとえば、JSON形式のデータが必要なのに、回答が途中で自然言語に変わったり、タグが欠けてパースに失敗したりすることがあります。こうした不安定さが原因で後続の処理が止まってしまい、業務フローに支障が出ることもあるのです。

| Pythonコードを生成するSmolagents(CodeAgent)

これに対し、オープンソースのAIエージェント開発フレームワークであるSmolagentsは、LLMが最終的にPythonコードを生成し、そのコードの実行結果をもとに回答を出す仕組みを提供しています。(CodeAgent)

ポイントは「最終的な出力を直接自然言語で返すのではなく、コードが出力した結果を返す」という点です。

  • ユーザーからの問いを受け取る
  • LLMが応答する代わりにPythonコードを生成
  • 生成されたコードを実行して結果(completion)を得る
  • その結果を最終回答として返したり、次のステップで再利用したりする

このように「コードを介して出力を受け取る」ことで、データの構造を厳密にコントロールしやすくなります。出力がJSONやCSV形式であれば、Pythonコード内で確実にフォーマットを整えてから返すことができるため、「タグが欠ける」「文字列が混在してパースに失敗する」といった問題が大幅に減るのです。

| ReACTを止めない仕組み

Smolagentsが行うのは、いわゆるReACT(思考→行動の連鎖)です。ユーザーの問いを一度に解決するのではなく、段階的にコードを生成し、実行結果を確認しながら次のステップを考えます。途中の思考プロセスもコードとして蓄積されるため、仮に一度エラーが出ても修正コードを再度生成して再チャレンジすることが可能です。

この一連の流れはすべて「コード生成 → 実行 → 結果確認」という形を取るため、自然言語でのやり取り中にフォーマットが崩れて処理が中断される心配がありません。結果として、後続のLLMやシステムとの連携もスムーズに行えるようになります。

| 具体事例:レポート生成の自動化

たとえば、データ分析の結果から定型レポートを自動生成する場面を考えてみましょう。通常のLLMを使ってレポート文書を直接出力させると、段落の構成や見出しの形式が崩れてしまい、後続のシステムが取り込めないケースがあります。

しかしSmolagentsであれば、まずはPythonコードを介して「分析結果の要約」「グラフの生成」「表形式への変換」といったステップを順に実行できます。最終的な出力を確実に整ったJSONやHTML形式で返すようにコード側で制御することで、レポート生成を途切れなく完了させられるのです。

| TrendViewerの課題にも応用

HALDATAのサービス「TrendViewer」でも、出力形態の不安定さに悩まされていました。LLMが途中で意図しない文字列を出力すると、可視化やレポート生成が止まってしまうリスクがあったのです。しかし、Smolagentsのアプローチを用いることで、「最終的に出力する形式をコードで保証する」ことが可能になります。これにより、後続の処理がエラーで止まらず、安定した自動化が実現しやすくなりました。

| まとめ

LLMの出力形式が不安定だと、ビジネスフローの自動化が難しくなります。Smolagentsは「Pythonコードを生成し、実行結果を回答とする」仕組みで、出力形態を安定化するため、途中でフォーマットが崩れず後続処理も止まらないという利点があります。