背景
Jevについてまだまだ理解が追いついていないところも多いですが、タグ付けの自動化ができそうだったので、自分のHPのアクティビティログで試してみました。
自分のHPではアクティビティログとして GitHub と note と Qiita のログを集めています。
以前Cursorでつけてもらったタグは、Qiita の公開記事38本でタグが118種あって、半数以上が1回しか使われていませんでした。
今回はJevで、低コストかつ、精度を上げられるかどうか検証していきます。
Jevとは
TypeSafe の分類用モデルであり、文章は書かず、渡した閉じた語彙から Choice(1択)、Score、Noul(確信度)を型付きで返すことが従来のモデルと大きく違う点だそうです。
つまり、プログラム的にはレスポンス形式が定型のため、システムに組み込みやすいという利点があります。
- 公式サイト typesafe.ai
- ドキュメント docs.typesafe.ai
やったこと
公式 SDK はまだ招待待ちでしたので、今回はVercelのAI Gateway から使用しました。
まず使えるタグをあらかじめ洗い出し、vocab.json にタグマスタを作りました。
その後、ログ取得はもともと GitHub Actions で回っていたので、そこに乗せてタグ付けを自動化しました。
vocab.json
先頭タグの決め方
先頭タグ用の説明は、最初かなり雑でした。Vue.js の欄に CSS や React まで書いていたので、CSS Subgrid の解説記事の先頭タグが Vue.js になってしまいました。
広く書いた例:
{
"Vue.js": "Vue、CSS、React、UI、デザインシステムのフロントエンド実装"
}
修正後:
{
"Vue.js": "Vue のコンポーネントや実装が主題。CSS 単体や React は含めない"
}
習慣化 も同じでした。健康・独立・IoT まで入れると、AWS の合格記も Nature Remo の話も全部「習慣化」になります。何が主題かと、何を含めないかをセットで書くようにしています。
候補タグは true / false の対で書く
付けるかどうかを Noul で聞くので、候補ごとに「付く条件」と「付かない条件」を対で判定させています。
本文中に固有名詞が出ただけでつくのを防ぎたかったので、false側の判定に明示しました。
{
"id": "cursor",
"tag": "cursor",
"true": "Cursor の設定・使い方・比較が本文の根拠になっている",
"false": "名前が出るだけ"
}
自分用のルールは次の3つです。
- Choice の説明に、似た技術を「含めない」と書く
- 候補の false に「名前だけ」「一般論」「別タグで足りる」を置く
- 落ちた固有名詞は、同じ true / false の型で1語ずつ足す
判定ロジック
Jev には「このログの先頭に置くタグはどれ?」と聞いて、候補から Choice で1語だけ選ばせています。2個目以降のタグを付けるか付けないかは別の質問で、残りの候補はそれぞれの Noul が 0.62 以上なら付けるようにしました。上限は5個です。
CIで自動化
GitHub Actionsのフィード同期のあとにタグ付けも回して、結果の JSON をコミットして更新するようにしました。タイトルと本文が前回と違うログだけ更新したいので、ハッシュを見てJevを呼ぶか判断するようにしました。
できたこと
記事の中身に近いタグが自動で選択できました。
一方で、OrbStack や Subgrid のようにまだ語彙に無い語はタグとして付けられていません。
まだまだ先の話ですが、記事が増えて今後タグで絞込み機能を導入するときに、自分がよく使用するライブラリなどの固有名詞を整備したいです。
コスト
記事38本をまとめて回したときの入力は 172,501 トークンで、この回は約 $0.007 でした。Gateway 上の Jev は入力 100万トークンあたり $0.042、出力は無料だそうです。
ただし、Vercel の AI Gateway には月 $5 の無料クレジットがあり、この枠から差し引かれるので実際の請求は今のところ発生していません。
今回は過去分まとめてやったので多くなりましたが、自分は1か月で記事1,2本しかかけていないので、毎月の無料枠で余裕で収まる想定です。
まだまだ余裕がありそうなので、他の使い道も考えてみたいですね!
まとめ
使用できるタグをあらかじめ決めておいて、付けるかどうかだけを返す形なら、アクティビティログのタグ付けは自動化できそうです。コストも毎月の無料枠に収まる見込みです。
まだ理解しきれていないところや、先頭タグの取り方で直したいところはありますが、しばらくはこのまま回してみます。
公式 SDK は waitlist 待ちでも、Vercel の AI Gateway から試せるので、気になった方は触ってみてください!
