フォーム読み込み中
こんにちは。AutoInfra開発チームの夏山です。
普段はサーバやクラウドのインフラの開発、検証、運用などを行っていますが、以下のような課題を感じていました。
私達は、このような課題をAIを用いて抜本的に効率化・自動化を目指すツール AutoInfra (オートインフラ) をチームで開発しています。現時点でAutoInfraは社内用のツールとして開発をしています。
まだ開発途中ではありますが、効果の見込みが見えてきているので、本記事ではAutoInfraの開発背景やその概要、検証結果について紹介したいと思います!今後シリーズ化して本ブログで紹介していきます。
AutoInfraは文字で説明するよりも実際の動作イメージを見てもらったほうがわかりやすいと思うので、まず画面イメージや概要を紹介した後に、開発背景を説明し、検証結果を紹介します。
ぜひ、AIを用いたアプリ開発やインフラ業務の自動化などに興味がある方は最後まで読んでいただけたらと思います!
この記事では…
インフラ業務を効率化・自動化可能とするAutoInfraというソフトバンク社内で開発しているツールを紹介します。
プライベートLLMと、連携したWebアプリという構成です。
AIを用いた業務改革・ツール開発に興味がある方、インフラ業務に携わっている方などに読んでいただきたいです。
開発チームのメンバーを紹介します。同じ部署の4名で開発しています。
クラウドエンジニア
李 尚弦
クラウドエンジニア
末益 航洋
クラウドエンジニア
前田 流
クラウドエンジニア
夏山 健斗
まずはどのようなツールかを知ってもらうために、今回開発したAutoInfraというツールのインタフェースを紹介します。
基本的にはSSHクライアント(画像1の右側②)なのですが、同一画面上にLLMチャット(画像1の左側①)があるのが大きな特徴です。
ユーザーは同一インターフェースでAIと対話しながらターゲット機器のコマンド操作を効率的に実行することができます。
※マルチAI Agentも利用可能ですが、次回以降の記事で紹介します。
AutoInfraとはAutonomous Infrastructureの略で、SSHクライアント、LLMチャットおよびAI Agentを統合した新たなインターフェースを持ったインフラ管理ツールです。現時点ではソフトバンク社内向けのツールとなっています。
AutoInfraでは同一インターフェースでSSHクライアントおよびLLMチャットを活用できるため、エンジニアは異なるツール・ウィンドウを切り替える必要はなく、SSHクライアントで操作した内容はLLMと自動的に連携されるので、LLMチャットはインフラ機器の実データを元に回答してくれるのが大きな特徴です。
さらに、マルチAI AgentもAutoInfraから操作できることによって、より柔軟な自動化が可能になります。AI Agent連携については今後詳しく紹介していきます。ここではそんな機能もあるんだと認識していただくだけでOKです。
まとめると、AutoInfraはあらゆるインフラ業務をAIを用いて効率化および自動化を実現可能とするツールを目指して開発をしています。
インフラエンジニアが抱える多くの課題をAutoInfraで解決できるように開発していきます。
インフラ機器に対してSSH経由でコマンド操作をしている中、不慣れなコマンドのオプションをWebで調べたり、知らないエラーメッセージに出会うとどういう意味なのかWebやChatGPTに調べてもらったりしますよね。
そうすると、SSHクライアント、Webブラウザで調査、ChatGPTとのチャットと複数のウィンドウを立ち上げる必要があり、ウィンドウを行き来する手間がありました。複数のターミナルを開いていたりすると、ターミナルの取り違えリスクも増加します。
また、インターネットやAIの情報は基本的に一般情報のため、調べた結果のコマンドや操作手順は、そのままでは操作機器に対しては実行することは出来なく、自身の環境に合わせて修正しないといけない手間もありました。
また、各顧客ごとにカスタマイズ設定が入ったインフラ機器に対して、不具合対応やメンテナンス対応をする際に、膨大な工数を取られるという状態がありました。
その他にも、インフラ業務には以下のような課題があります。
こういった課題を、「AIを用いてどうにかできないか?」と考えた結果、ターミナルに表示される情報をAIが参照しながら回答できるようにすることで、操作対象機器に対して適切なアドバイスをしてくるのではないかと考え付き、AutoInfraというツールを開発することにしました。
AutoInfraは、このようなインフラエンジニアが抱える課題を解決可能だと考えています。
どのように解決していくかは、後続の連載記事を通して解説していければと考えていますが、本記事ではシステム構成や実行検証の結果を紹介します。
現在開発中のAutoInfraのシステムアーキテクチャを紹介します。
画像3. AutoInfraシステムアーキテクチャ
ユーザーからのリクエストを受け付け、静的コンテンツ (HTML, CSS, JavaScript) を提供します。
動的な処理が必要な場合は、WSGIサーバーコンテナにリクエストを転送します。
Flaskフレームワークで構築されたWebアプリケーションが動作します。
Gunicornは、WSGIアプリケーションサーバーとして動作し、複数リクエストを並列処理します。
ユーザーとAIとのチャットなどのデータをデータベースとやり取りを行います。
チャット履歴などのアプリケーションで使用するデータを格納します。
MongoDBは、ドキュメント指向データベースであり、柔軟なデータ構造を扱うことができます。
機械学習モデルの学習や推論処理を高速化するために、GPUを搭載したサーバーを利用します。
OllamaというOSSのローカル環境で実行できるLLMアプリケーションをインストールしました。様々なLLMをOllamaにインストール可能ですが、現状はLlama3.1:8Bモデルを利用しています。
WSGIサーバーコンテナから、GPUサーバーに処理を依頼します。
ターゲットのインフラ機器(サーバーやネットワーク機器など)へFlaskアプリからSSHで接続できます。
これによりLLMとインフラ機器が連携可能となります。(詳細は次項参照)
AutoInfraは、普通のSSHクライアントとして使えますので、LLMが不要な作業は普通にコマンドを打って作業をしていきます。
しかし、コマンドのオプションを忘れたり、パイプでつなぐコマンドをどう書くんだっけ?と分からなくなったりすることがありますよね。そういったときに活用できるのがLLMチャットです。
まずは、LLMでコマンドが生成・実行ができる仕組みについて紹介します。
AutoInfraのChatBoxからターゲット機器に対して、実行したいタスクを自然言語で入力すると、AIがコマンドを生成してくれます。そのコマンドを実行および実行後の出力を自然言語で解説する機能になります。
以下は、LLMに質問をして、コマンドを実行、実行結果の解説までのフローを示しています。
AutoInfraではLLMが生成したコマンドはコピーして右側に貼り付けると言った作業を必要としません。コピーして貼り付けると、コピーミスなども発生するリスクがあります。コマンドを実行するにはExecuteボタンを押すだけです。
AutoInfraの右側のターミナルから、ターゲット機器にSSHしたうえでコマンド操作を実行すると、ターミナルの表示データがLLMに連携される仕組みになります。そのため、ユーザは左側のChatBoxでエラーログの内容を問い合わせると、ターゲット機器で出力されたログデータをもとに、AIが回答してくれます。
Apacheで起動しているターゲットサーバに対して、Listenポートを80から85に変更するシナリオ検証を実施してみました。
画像8を見てわかるように、プロンプトの工夫は必要ですがsedコマンドでhttpd.confの内容を書き換え、その後、httpdサービスの再起動を実施するコマンドを生成してくれています。コマンド内容を確認後、Executeボタンを押下するとコマンドが実行されます。コマンド実行させると、正常にコマンドがターゲットサーバで実行されました。
※この例では、標準出力がないケースでしたので、コマンド実行後のAIのレスポンス内容は少し想定と違った内容でした。ここは今後改善する必要があります。
ついでに、正常にListenポートが変更されているかのテストも同じように実施してみました。
こちらも問題なく想定通りのコマンドが生成され、コマンド実行の結果も問題なさそうです。このケースは標準出力があるコマンドでしたので、コマンド実行後のAIのレスポンスではコマンド実行結果を自然言語で解説してくれています。
tail /var/log/httpd/error_logを実行後、ChatBoxでAIにerror_logで出力されたログについて問合せます。
ssl:warnというログが見られたので、それについてAIに問い合わせました。
AIはTerminalで出力されたコマンド結果を参照しながら回答することが可能ですので、対象のログを分析してくれます。
以下がAIが出力した分析結果です。
`ssl:warn` ログは、Apache HTTP Server の `mod_ssl` モジュールによって生成されるログレベルです。このログレベルは、SSL/TLS 証明書に関する警告メッセージを表示するために使用されます。このログには、証明書の検証が不十分であることを示すメッセージが出ています。具体的には、以下の2つのログメッセージがあります。1. `AH01909: www1.web.com:443:0 server certificate does NOT include an ID which matches the server name` * このログメッセージは、サーバーの証明書に、`www1.web.com` と同じドメイン名のIDが存在していないことを示しています。2. `AH01909: www1.web.com:443:0 server certificate does NOT include an ID which matches the server name` * このログメッセージは、サーバーの証明書に、`www1.web.com` と同じドメイン名のIDが存在していないことを示しています。これらのログメッセージの意味は同じです。つまり、サーバー上のSSL/TLS 証明書には、`www1.web.com` というドメイン名を含むIDが存在していません。この問題の解決策は以下の通りです。* `mod_ssl` モジュールの設定を確認してみましょう。* SSL/TLS 証明書を再度設定し、ドメイン名にマッチするIDを含めます。* Apache HTTP Server のサービスを再起動して、新しい設定が反映されます。以上で、httpdのerror_logについての分析が完了しました。
このように、今までは読みづらいログを人がインターネットなどで調べながら解釈する必要があったと思うのですが、本機能を活用すればこの手間や工数が大幅に改善されると考えています!
AutoInfraはまだ開発途中であるため、今回の検証においても、まだ解決すべき課題が出てきました。
課題:コマンド生成機能において、単一のコマンドしか生成されないため、タスクを遂行するのに何度もコマンド生成をしないといけない
基本的にタスクを遂行するためには、複数コマンドが前提です。ただ、現状の仕様だと1つのコマンドしかAIは生成してくれないのが不便だと感じています。複数コマンドを生成できるように改善する予定です。
課題:AIのレスポンスの表示スタイルが見づらい
改行がされない・Markdownの生データで表示されるという状態が現状あります。これはChatGPTなどの王道なLLMチャットボットと合わせる形でより見やすいスタイルに今後は改善する予定です。
本記事では内製かつアジャイルで開発したAutoInfraというツールについて、その背景や概要、そして主な機能について紹介しました。
ソフトバンク社内では、業務改善に向けて内製ツールも開発していることを知っていただけると嬉しいです。
今後も何回かに分けてAutoInfraの紹介をしていきます。次回はマルチAI Agentの機能や実装方法などについて紹介できればと考えています。
ぜひ、興味あれば次回の記事もご一読いただけたらと思います!
条件に該当するページがございません