AI for Software Engineering

最近 Devin というのが話題になっています。コード開発の支援程度ではなくソフトウェア開発の全体に渡っての支援をしてくれるようです。どの程度実用的なのかはまだ未知数です。なお、OpenDevin というのもあります。

MS社からも AutoDev: Automated AI-Driven Development という名前の論文が公開されています。AI-DrivenというのがModel-Drivenを思い出させますね。こちらもまだ研究段階のようです。

いずれにせよ、しばらくすると、こういったものがでてくると想定しておく必要があります。ChatGPT だけでもそれなり以上のことを助けてくれたので、Software Engineering に特化したこういう AI アプリがどんな働きをしてくれるか注目しましょう。

私としては、どうモデリングと繋ぐかが関心事ですので、前に ChatGTP でやったことを改めて試してみるところからでしょうか。

AI for Software Engineering

Generative AI の FineTuning

Generative AI の世界である領域に特化した language model を作成するには、ゼロから育てるか、既存のモデルをファインチューンするかのようで、作業量の観点で手をつけやすいのが後者のようです。

    この考え方は、UML でカバーしきれない部分を UML Profile という拡張メカニズムを用意することでモデリングの範囲を拡大できるようにした、ことに近いと感じます。

    既存の言語モデル(UML相当)を使い 、FineTuneというメカニズム(UML Profile相当)を用意し特定領域に特化した生成AIにするということです。特定の領域を深掘りするという意味でDSLにも近いですね。

    以前専用 GPT を作成した際には知識としてpdfファイルを与えましたが、Fine Tuningの方が直接的なのだろうとは思います(準備が大変そうですが)。

    Generative AI の FineTuning

    Sirius Webinar 動画情報

    先日あった Eclipse Sirius の今後を語った Webinar ですが、動画が公開されています。 ただ、誰でもアクセスできる訳ではないようです。 もし LinkedIn のアカウントをお持ちであれば、”Eclipse Sirius” で検索して貰えると最初の方に表示されると思います。 ひょっとすと何か登録しないといけないかもしれません。 以上、ご参考までに。

    Sirius Webinar 動画情報

    ECLIPSE IDE 2024-03

    Eclipse が2024年最初のリリースを行いました。 3月、6月、9月、12月と年に4回のペースです。 リリースノートは次の URL にあります。 なお、ダウンロードのページには説明動画のリンクもあります。

    https://eclipseide.org/release/noteworthy

    また、以前試したのですが、しばらく触れていなかった Chromebook でこの Eclipse がどの程度実用的に使えるのかやってみたいと思います。 家の iPad がそろそろ使いづらくなっているので、しばらく Chromebook で代用することを考えています。

    ECLIPSE IDE 2024-03

    Generative AI の利用について

    ここではモデル開発という文脈での Generative AI の利用方法について書いています。

    LLM の説明を読むと、大量の文書他を学習し、ある単語の次に出現する可能性の高い単語を順次つないで行くことでテキスト生成を行なっている、というようなことが書かれています。

    だとすると、このようなことが言えないでしょうか? 学習に使われた文書というのは、過去に書かれた新聞・雑誌・Web の記事や論文などだと思いますが、その範囲内で「次に出現する可能性の高い単語」を探しても、既に知られている範囲の(知識)単語しか出てこない、つまり「全く新しい発想のようなものはまず得られない」と言えるような気がします。

    しかし、逆目線でのメリットがあります。人は何かに集中するときどうしても視野が狭くなりがちです。Generative AI は、その視野から外れてしまったものを、過去の知識・常識で補ってくれる可能性があるからです。何かについて質問して、幾つもの項目が返ってくるというのは、そういうことのような気がします。

    私は AI の研究者ではありませんし、モデリングに関連した話題では、これ以上のこと(特に二つ目のポイントについて)をやってくれているのも体験もしています。AI のご専門の方から「そんな単純な話ではない」というご指摘があるとは思います。それでも、利用者として試行錯誤することで経験を積み重ねることはできます。

    結論としては、アカデミックな話ではありませんが、こういう文脈で、こういう使い方をすれば、こういう結果が期待できる、という知識を蓄積してゆき、必要に応じてそこから使い方を取捨選択し利用する、というのが当面の実用的な Generative AI の利用方法ではないかと感じています。ご意見等をコメントでいただけると幸いです。

    なお、こういった知識ベースを自作し、サービスとして提供するというビジネス形態もありそうです。コンサル会社のようなところではもうやっているのかもしれません。

    Generative AI の利用について

    Xtextを用いた既存システムへの機能追加

    今年に入ってからかかわっていた話の検討材料として私が作った図があります。これは、既存のEnterprise Systemに新たな機能要素Xを追加するというときに、機能要素Xに関わる領域についてXtextで文法を作り、モデルを作り、最終的にはコード生成して既存システムに埋め込み、システム更新を行う、といった話です。全般的な流れを書いてみたのが下の図です。当たり前と言えば当たり前で、機構要素Xが既存の機能からある程度独立した機能でないとこうはゆきません。Xtextということで書きましたが、これも(e)MOFやDSLベースで追加分の作業をすれば同じことになりますね。

    Xtextを用いた既存システムへの機能追加

    Xtext grammar for StateMachine

    Fowler 本にでてくる secret compartment のモデルを ChatGTP に与えて、Xtext grammar を生成してもらいました。

    与えたモデル

    events
    doorClosed
    drawOpened
    lightOn
    reset doorOpened
    panelClosed
    end

    commands
    unlockPanel
    lockPanel
    lockDoor
    unlockDoor
    end

    state idle
    actions {unlockDoor lockPanel}
    doorClosed => active
    end

    state active
    drawOpened => waitingForLight
    lightOn => waitingForDraw
    end

    state waitingForLight
    lightOn => unlockedPanel
    end

    state waitingForDraw
    drawOpened => unlockedPanel
    end

    state unlockedPanel
    actions {unlockPanel lockDoor}
    panelClosed => idle
    end

    ChatGTP が導きだした文法

    grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

    generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

    Model:
    (events=Events)?
    (commands=Commands)?
    (states+=State)*;

    Events:
    'events' events+=Event+ 'end';

    Event:
    name=ID ('reset' resetEvent=ID)?;

    Commands:
    'commands' commands+=Command+ 'end';

    Command:
    name=ID;

    State:
    'state' name=ID
    ('actions' '{' actions+=[Command]+ '}')?
    transitions+=Transition*
    'end';

    Transition:
    event=[Event] '=>' state=[State];

    このままでは使わないと思いますが、十分参考になると思います。なお、上の結果テキストでは分かりませんが、結果ボックスの枠には antlr という文字が見えます。

    今回は比較的有名な例だったのですが、結局インプットがしっかりしていないと期待するアウトプットを出すことはできない、という当然の話につながります。要件やシナリオなどから次の段階に進める場合にも、インプットが大切になります。

    Xtext grammar for StateMachine

    Papyrus + Sirius

    昨夜(というか今日の朝1時から)Obeo 社による Webinar があり、Sirius のこれからの展開についての説明がありました。Sirius は Desktop 版と Web 版があり、今力を入れているのは Web 版だということがわかります。Web 版はブラウザで使うものなので、多分大きなスクリーンがあれば使い易いのかと思いますが、現状見た目では Desktop 版の方が完成度が高く感じています。しかし、今後は Web 版に多くの機能追加が行われる模様で、1年少々で印象が逆転するかもしれません。

    さて、Eclipse の UML tool である Papyrus ですが、開発主体は Obeo 社と協力して基盤部分を Sirius Desktop 版に置き換えようと作業しています。それが終わればSirius Web版にも対応する計画だそうです。そこに、Eclipse SysON という新たな要素が加わり、SysML v2 の機能を取り込む予定だそうです。そして、これは Papyrus だけでなく Capella にも適用されるそうです。

    こういう展開になるのであれば、皆で Sirius Web 版に慣れておく必要がありそうですね。

    Papyrus + Sirius

    Xtext の拡張系

    これまで何度も触れてきた Eclipse / Xtext ですが、本家の TypeFox 社は Eclipse Langium という Xtext を Web に拡張した技術を開発し、Web の世界をターゲットにしています。Eclipse の Newsletter に掲載された記事を紹介します。なお、Google Translate などでページごと翻訳することができます。

    Eclipse Langium: https://newsroom.eclipse.org/eclipse-newsletter/2024/february/eclipse-langium-next-generation-language-toolbox

    また、以前別のところで紹介しました textX という TypeFox 社の外で開発された Python の世界に向けた Xtext に触発されたフレームワークもあります。

    textX: https://textx.github.io/textX/stable/

    いろいろな形での拡張系がありますので、機会があれば「新しい Xtext 」を試してみてください。面白い結果を得られた場合には、ぜひどこかで結果を公開・共有して貰えると嬉しいです。

    Xtext の拡張系