2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「制約」がAIの判断のブレを抑制する。Goプログラムの生成で実験してみた。

2
Posted at

ULSパブリス 進地 です。

連載第一回、第二回では、それぞれ、業務知識を文章でAIに渡してみた結果、業務知識をGoの型と遷移表でAIに渡してみた結果をみてきました。

第一回: 差戻された申請は、もう一度出せますか? AIの答えは「出せない」
第二回: 差戻したら、それまでの承認はどうなりますか? AIの答えは4対1で割れました
コード: shinchi-p/ringi(本記事時点は ai-03 タグ)

結果、「型」では表現できない「判断」によってAIの出力結果にブレが生じることを確認できています。では、何を与えればこのブレを防ぐことができるのでしょうか?

今回(第三回)はそれを探す回になります。

frontmatter でオントロジーを作ろうとした話

入社してすぐの私は、社内で飛び交っている言葉、その文脈、関連語句、参照情報などをfrontmatter形式でまとめていけば、社内のAI基盤として使いこなせるようになるのではないかと夢想して、試しに簡単なfrontmatter付与と各語句のLinkの仕組みを作ってみたことがあります。

会社固有の知識を下記のようなメタデータに整理して、保持、メンテナンスし、AIに参照させることで
AI基盤を会社のOSとして使いこなせるようになると。

name: hecate(認証・ID 連携基盤)
type: asset
description: 認証認可と ID 連携を担う社内基盤
aliases: [Hecate, ヘカテ, 認証認可基盤, ID連携基盤]
relations:
  owned-by: [data-platform]
owner_role: Data Platform Lead (kunpe)
sources: [関連する Notion ページ]

これらのメタデータの作成、メンテナンスもAIにチャットのログから整備する仕組みを作れば初動はよさそう。

AIに会社の地図を持たせたら、3年目社員のように働き始めた 〜精度とトークン効率を上げるオントロジーの実践〜|kunpe (ymdpharm)

この仕組み自体は結局運用にはのらず、日々の忙しさの中に消えていきましたが、今でも構想自体はとても良いと思っています。

このfrontmatterのような発想で、メタデータとして「制約」を与えればAIの判断のブレを減らせるのではないでしょうか?ということで、さっそく実験してみました。

制約として書いてみる

第二回で使ったコードに下記のプロンプトを追加しました。

main.go
// 第2回で4対1に割れた判断を、遷移ではなく不変条件として書いたもの。
// いつリセットするかは書いていない。ありえない状態だけを書いている。
const constraintDoc = `
差戻し状態の申請は、承認済みの承認ステップを持ちません。
`

そして、第二回のコード(プロンプト)と今回の制約を加えたコード(プロンプト)をそれぞれ実行して、生成されるgoプログラムの違いを見てみたところ、結果は次のようになりました。

実験に使ったコードと10回分の出力は ontology/experiment3 に置いてあります。

実験結果

今回の制約を加えたコード(プロンプト)

AIの判断のブレがなくなり、全5回実行のすべてで 差戻し状態の申請は承認済みの承認ステップを持たない 実装となりました。

// リセット処理の直前の処理
// 差戻し状態の申請は承認済みの承認ステップを持たない
a.approvalRoute.resetApprovals()

追加したプロンプトには

  • いつリセットするかは書いていない
  • 遷移ではなくありえない状態を書いている

という特徴がありますが、これが「制約」として正しく効いています。

第二回のコード(プロンプト)

一方、前回の再実行の結果はどうだったか。結果は、2対1対2 にブレました。

検出回数 リセットの位置
2回 Reject の中
1回 Submit の中(差戻しからの再提出のときだけ)
2回 Submit の中(状態を問わず無条件に)

第2回のタイトルに「4対1」と書きましたが、安定した傾向とは言えなかったようです。

また、5回中1回は Reject に承認者の引数を足して、「現在の承認者のみ差し戻しできる」というルールを勝手に作っていました。今回の制約を加えたコードではこの余計な発明がありません。

制約を書くと、ブレが減るだけでなく、書いていない業務ルールの創作も減るという、予想していなかった副次効果がありました。

ハマったこと・迷っていること

今回加えた制約の一行を思いつけたのは、第2回でAIの生成結果にブレが生じたことを確認した後でした。事前に書けたかというと自信がありません。また、制約を書けばブレが減るとして、書くべき制約を網羅する方法は依然としてわかっていません。

また、制約が守られたことをどう検証するかという課題もあります。
今回は出力を目で読んだだけですので。

まとめ

  • 「制約」を加えることでAIの判断のブレは抑制できる
  • 「制約」を加えることで書いていない要件や仕様のAIによる勝手な発明を抑制できる
  • 「制約」を事前に思いつく体系的な方法、網羅する方法などはまだみえていない

次回

制約でAIのブレを抑制できることはわかりました。しかし、これを毎回プロンプトに貼るのでは運用できません。書いた制約をAIが必要なときに引ける形で届ける方法として、次回はMCPに入っていこうと思います。


コードと10回分の出力は shinchi-p/ringi の ai-03 タグにあります。記事中のコードは説明のために簡略化しています。実際に動かすうえで必要な部分はリポジトリを見てください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?