NuGetパッケージ検索をAIで自動化!Gemini & OpenAIを使った便利ツール開発

先日、30歳の誕生日を迎えました。
妻は「せっかく節目だし、ちゃんと祝うか」って言われていたのですが、見事にコロナにかかりまして、病床より三十路の幕を開けました。

まぁ無事に完治いたしまして、30代はこれ以上しんどいことはないだろうと思いつつ、日々をすごしております。

しんどいことと言えば、そう! ライブラリの検索に時間が取られるのって、意外としんどい!!!
もっと楽に便利な先人の知恵を拝借したい!!!!

というわけで今回はこちら。

AIを使ってNuGetを検索できるツールを作ってみた!

「長い人生なので、一回くらい自分でOpenAIのAPIとかを呼んで動くツールが作ってみたかった」っていうのが本音です。

目次

  1. NuGetとは
  2. 作ったものの概要
  3. 面白かったポイント
  4. 実際に使ってみよう
  5. 感想

1. NuGetとは

まず、.NETのNuGetに馴染みのない方のために紹介です。馴染みのある方は読み飛ばしていただいてOKです。

公式のドキュメントを引用してまいりましょう。

Microsoft がサポートする .NET (.NET Core を含む) のコード共有メカニズムである NuGet では、.NET 用のパッケージを作成、ホスト、使用する方法が定義されており、それらの各ロール用のツールが提供されています

いわゆるパッケージマネージャーというやつですね。

例えば「CSVの出力をしたい!」と思った時に、1から作ることも勿論できますが、
誰かが作ってくれたCSVの出力のコードを使えれば開発の手間がぐんと少なくなります。

こういうツールを管理するためのツールになるのですが、、、
色んなツールが公開されていて、しかも機能が被ったりしているので、自分のやりたいことに合うツールを探すのって結構面倒なんですよね。

なので、そこをAIの手を借りて簡単にしたい!というのが今回の目的になります。

 

2. 作ったものの概要

今回のリポジトリはこちらです。

コンソールアプリになっておりまして、ユーザーが要望を入力すると、
その要件にマッチしそうなパッケージを3つピックアップして教えてくれるというものになります。

処理の流れは以下の通りです。

  1. ユーザーが「やりたいこと」を1行で入力する
    例:「暗号化に関するライブラリを使いたい」

  2. AIが、NuGet APIに渡す検索キーワードを生成
    例:「encryption」「cryptography」など

  3. NuGet APIを呼び出し、上位3件のパッケージを取得

  4. AIが検索結果を要約して出力

要するに、人間は自然言語で要望を入力するだけで、AIが「検索キーワード生成」と「結果の要約」を代行してくれるようなものになります。

AIって書いている部分は、GeminiとOpenAIになってます。二つある理由は後ほど。

 

3. 面白かったポイント

①AIの呼び出しって意外と簡単

なんだかんだAI活用しているとか言いつつ、自分で一から作るってなるとかなりハードルが高いんじゃないかと思って、正直ビビってました。
結果が綺麗にとれるようにしたりとか、独特の呼出し手順があったりとか、ごちゃごちゃと準備しないと呼べないのかなと思っていたんです。

でも実際にやってみると、他のAPIとたいして変わらないんだなぁというのが分かりました。

心理的なハードルが結構下がったのが自分の中で大きくて、これだったらどんどんツールを作っていきたいなぁと思えました。
まぁ、金銭的なハードルがあるんですけどね。

②OpenAIとGeminiのよくばりセットにしてみた

①で味をしめたので、うまいことOpenAIとGeminiを切り替えて使えるようにしたらいいんじゃないかと思い、両方使えるように作ってみました。
(執筆時点ではGeminiしかデバッグしてないので、OpenAIの方にバグ残ってるかも)

--- ここからコーディングの話になるので、読み飛ばしていただいてもOK

今回AIを使うメソッドとしては、キーワード抽出と要約の部分だけなので、その二つのメソッドをインターフェイスとして切り出しておいてます。
それを継承してGemini用のクラスとOpenAI用のクラスを作り、どっちを使うかはenumを使って指定できるようにしています。

なので、他のAIの選択肢を増やしたいときに、enumとインターフェイスを継承したクラスを作ればすぐに追加できるので、メンテナンス性が上がっていい感じにできたかなと思っています。

やり残した点としては、各AIのモデルもいい感じに指定できるようにしたかったのですが、コンフィグに直書きしてもらう感じになっています。
最新のモデル名をうまいこと取得してユーザーに選ばせられるようにとかできたら、もっと手軽に使えるツールにできるかなぁと思ってます。

---

 

4. 実際に使ってみよう

ではどんな感じで出力されるのかをお見せしたいと思います。

まず、お試しとして「PDFを操作できるNuGetパッケージ」という文言で検索してみます。

ikeda_16_01.png

こんな感じで、検索するワードと、検索結果が出てくれます。
イイ感じに絞れてそうですね。

一応実在するか確認したところ、大丈夫そうでした。
PDFix.PdfToHtml
Aspose.Page.cpp
PDFix.OcrTesseract

続いて、もうすこし抽象的に聞いてみましょうか。
「ユーザーが絵文字をいろいろ使えるように、うまいことやりたい」

ikeda_16_02.png

いけてますね。特にこちらからは伝えてないですが、Unicodeとかで検索してくれています。
ちなみに、該当するライブラリが少なかったのか、3件取得するはずのところを2件しか取得できませんでした。

ラスト、さらに抽象度を上げちゃいましょう!
「画面のデザインをいい感じにしたい。」

これがいけたら、世のデザイナーさんたちは大助かりなのでは?!

ikeda_16_03.png

そうだよね、知ってました。
実はテストしているときには、該当がないパターンが見れてなかったので、こういう出力になると知れてよかったです。

 

感想

今回は、APIでAIを呼んでみるツールを作ってみました。

中盤でも触れましたが、なかなか腰が重い分野ではあったので、今回触ってみて意識を変えられたのはよかったです。

これからもガンガンAI活用していきたいと思います!

 

最後に

弊社では、AI活用やDXの支援を行っております。

上記のような1からの開発だけでなく、Copilotや既存のツールを活用した業務の改善のご提案などもさせていただいております。

お客様の要件に合わせて、最適な開発をご提案いたしますので、AI活用や開発でお困りの際には、ぜひ弊社にお声がけいただけたらと思います。

お気軽にご依頼・ご相談ください

前へ

Power Appsが突然動かない!運用・保守で困ったときの解決策