Loading [MathJax]/jax/output/HTML-CSS/config.js

2025年4月1日火曜日

バイブコーディング

これまでも生成AIでプログラムをつくることはあった。しばらく前にそれがバイブコーデイングVibe coding)という看板を与えられた。

バイブコーディングは,従来のようにプログラマがコードを直接記述するのではなく,自然言語によって生成AIに対話的指示を与え,それによって生成されたコードでプログラミング開発サイクルを進める。エラーが出ればそれをそのまま生成AIに投入する。このためには要求仕様をなるべく正確に言語化しなければならない。プログラミング能力=自然言語能力というわけだ。


動機:TBSの報道特集でも話題になったクラウドワークス問題。グレイゾーンの隙をみて,原理的には違法な選挙ビジネスが横行している。その仕事依頼ガイドラインは放送直後に改訂されてごまかしを図っている,その新旧対照表をつくろうと考えた(菅野完のチャンネルでクラウドワークスの出した新旧対照表を紹介していた)。

さっそくバイブコーディングを意識して,ChatGPT o3-mini-high でプログラミングしてみた。最初は新旧の仕事依頼ガイドラインのテキストの差分をdiffコマンドでとったもので試したがうまくいかなかった。次に,データグレンジングのためガイドラインのすべての項目に条番号をつけて章でまとめることにした。それが以下の報告である。ただし3ターン目かな。なお,Gemini 2.0 Flash,DeepSeek,Qwen2.5-Max などはうまくいかなかった。

Q(koshix):
各種の規程案で,新旧対照表というものがあります。 新旧の2列が対照できるように並んだ表であり, (1) 第一条から通し番号で番号付けされた条文ごとに, 新規程では新設部分(新設項目や修正後表現)にマーク(強調)がされ, 旧規程では削除部分(削除項目や修正前表現)にマーク(取り消し線)がされて, 新旧条文の比較対照ができるようになっているものとします。 (2) 条文番号以外に内容変更がない項目は新規程の欄に条文番号と内容を 記述し旧規程側は,旧規程の条文番号をつけて(同上)とします。 この場合,新規程側には強調マークがつきません。 (3) ある番号の条文全体が新設された場合は,旧規程側に条文番号 なしで「(新設)」と表記されます。つまり,条文番号は同期しないことが あります。 (4) ある番号の条文全体が削除された場合は,新規程側に条文番号 なしで「(削除)」と表記されます。つまり,条文番号は同期しないことが あります。 (5) 章番号と章名は,変化がない場合でも, 新旧両方ともそのまま記述してください。

 これを実現するpythonプログラムは次のように考えています。 (1) 入力は条文番号付きの新と旧のテキストファイルです。 (2) 図表や文字の修飾情報などは含まれません。 (3) 出力はmarkdownであり,強調と取り消し線の情報を含めます。 (4) 内容が同一というのは完全に文言が一致することを指します。 (5) 条文間の対応に関する指示はありませんので,出現する表現の一致度から 適当なアルゴリズム(difflibなど)を用いて条文の対応関係を判断する必要が あります。ただし,章をまたいで対応する条文はないものとします。 (6) 章内の条文の順序は入れ替わっていることもあるので,対応関係を 探す際のアルゴリズムには工夫する必要があるかもしれません。

 参考となる新ファイル,cw1.txtの一部はつぎのとおりです。 「クラウドワークス仕事依頼ガイドライン 第1条 仕事依頼ガイドラインでは、利用規約に基づき本サービスにおける依頼の順守事項および利用条件を定めています。 第2条 本サービスでは、以下のような行為や依頼を禁止しています。これに違反した場合、投稿の削除やアカウントの利用制限などの対応をおこなう場合があります。 第1章 公序良俗に反する仕事 第3条 社会規範に反する内容や、道徳観念から外れた行為など、一般的な公序良俗に反する内容への賛同・助長につながるような仕事の依頼を禁止しています。 第4条 一般社会通念上、明らかに第三者に嫌悪感・不快感を与えるような文面や画像、暴力的な表現、猥褻な表現やデータなどを閲覧する必要がある、または意図せずに閲覧してしまうよう公開している、あるいはそれらを作成する依頼質問があればお願いします

A(ChatGPT 03-mini-high):
(内容の問い合わせ,略)

Q(koshix):
(1) 出力は Markdown の「表形式」で作成してください。 (2) 新設部分は太字で,削除部分は取り消し線で (3) 差分検出アルゴリズムの類似度50%以上で一致と判断します。 (4) 変更箇所だけを強調(新規程側)・取り消し線(旧規程側)にする形でお願いします。 (5) 各条文は最初の2つを除いて,各章に包摂されます。 (6) 1つの条文は1行で収まります。 (7) 章内で条文の順序が入れ替わるので,マッチングの際は章単位で処理します。 (8) 新旧で部分的に変更がある場合は,新規程側の変更箇所のみ強調、 旧規程側の変更前部分のみ取り消し線という解釈でOKです。 (9) UTF-8です。macOSのテキストファイルです。 (10) 結果は標準出力にお願いします。

A(ChatGPT 03-mini-high):
(内容の確認,略)

Q(koshix):
OKなので進めてください。

A(ChatGPT 03-mini-high):
(実装の流れとコードとプログラムの使い方)

Q(koshix):
ほぼ期待どおりです。ありがとうございました。 新規程側の条文順はそのままの維持された形で出力してください。 最後に条文と同じように制作年月日の新旧の欄を作ってください。

Q(koshix):
入力ファイルの末尾に改訂年月日の記述があるので,制作年月日というところをそれで置き換えてください。これには条文番号が付いていないので注意してください。 なお,新規程の条文番号順に出力するというミッションは達成されていません。

Q(koshix):
新規程のファイル末尾の2行は,以下のとおりです。 第117条 その他、特に弊社が不適切と判断する内容を含む依頼 令和7年3月14日改訂 この「令和7年3月14日改訂」というテキストをmarkdownファイルの最終行の項目として加えてほしいという希望なのですが,わかりますか?

Q(koshix):
そういうことです。どうぞよろしくお願いします。

Q(koshix):
旧規程側にも同様の行があって,同じように対応することを希望していたのですけれど,大丈夫ですかね。

A(ChatGPT 03-mini-high):
(大丈夫です,最終コードが完成する)

cw1.txt:クラウドワークスの仕事依頼ガイドライン(令和7年3月14日改訂)の整形版
cw2.txt:クラウドワークスの仕事依頼ガイドライン(令和6年12月18日改訂)の整形版
no2m.py:ChatGPTが出力したpythonコード(上記のVibeコーディングで作成したもの)
cw4.md:no2m.py cw1.txt cw2.txt > cw4.md で出力したmarkdownファイル
cw5.docx:pandoc cw4.md -f markdown -t docx -o cw5.docx で出力した修飾済み新旧対照表



図:整形後のcw5.docx の一部見本



0 件のコメント: