はじめに
1、2、3、4、せーの!1 nikkieです。
LLM関係の気になるライブラリ ell-ai を小さく素振りしました
目次
ell-ai
ご存知ですか、ell-ai?
ドキュメントより
https://docs.ell.so/#prompts-are-programs-not-strings
import ell @ell.simple(model="gpt-4o-mini") def hello(world: str): """You are a helpful assistant""" # System prompt name = world.capitalize() return f"Say hello to {name}!" # User prompt hello("sam altman") # just a str, "Hello Sam Altman! ..."
めちゃめちゃ簡単じゃないですか!?
- 関数を定義
- システムプロンプトをdocstringに書く
- ユーザプロンプトを返り値とする(なので返り値は文字列)
- 関数の引数を使ってユーザプロンプトを組み立てられる!
@ell.simpleデコレータをつける
たったこれだけです!
定義した関数を実行すると、LLMのWeb APIにプロンプトが送られ、生成したテキストが返ってきます。
この簡単さを売りに(LangChainを下げながら2)拡散しているツイート3を見て、存在を知りました
ell-ai素振り
環境変数OPENAI_API_KEYを設定しています。
PEP 723を使ってスクリプトを書いています4
こちらの記事のプロンプトをell-aiでも試しました。
% hatch run try_ell.py Hello, fellow producers! It's Nikkun in Schemer Mode!
他にはアイドルのセリフを生成させてみた例5
(few-shotでプロンプトを書きました)
#imas_hack で知ったアイドルなりきりプロンプトをell-aiの素振りも兼ねて。
— nikkie / にっきー (@ftnext) 2024年10月13日
かなり琴葉ちゃん!やはりfew-shot
「青空の下、心も晴れやかになっていく感じがします。プロデューサーと一緒にいると、私自身も成長できる気がするんです。…こんな気持ち、どうかプロデューサーにも伝わりますように。」
@ell.simple、"魔法"の仕組みの一端をのぞき見る
ソースコードを覗きました。
simpleデコレータの実態はcomplexです。
https://github.com/MadcowD/ell/blob/b44bb1a0d573319e76058b17d27b8ea3f2cfc5b5/src/ell/lmp/simple.py#L7-L14
complexの実装ですが
https://github.com/MadcowD/ell/blob/b44bb1a0d573319e76058b17d27b8ea3f2cfc5b5/src/ell/lmp/complex.py#L16-L77
デコレートしている関数(prompt)の呼び出し(=ユーザプロンプトを得る)
# promt -> str res = prompt(*prompt_args, **prompt_kwargs) # Convert prompt into ell messages messages = _get_messages(res, prompt)
さらに_get_message()関数でシステムプロンプトも取得しています。
https://github.com/MadcowD/ell/blob/b44bb1a0d573319e76058b17d27b8ea3f2cfc5b5/src/ell/lmp/complex.py#L96-L110
has_system_prompt = prompt.__doc__ is not None and prompt.__doc__.strip() != ""
ユーザによる関数定義を元に、ell-ai側でプロンプトを組み立てられるわけですね!
ell-ai 今後知りたいこと
第一印象はなかなかよかったですが、これだけで判断しきれず、宿題事項を書いておきます
@ell.simpleは触ったが、@ell.complexはまだ- complexの方はLangChainと比べてずっと簡単と主張できる出来なのかは要検証
- modelはどこまで切り替えられる?
- 切り替えられそうなのは、groqやClaude(anthropic)(未検証)
- Geminiはどうなんだろう?
- 呼べない報告(Can't use OpenAI compatible providers anymore · Issue #222 · MadcowD/ell · GitHub)
- OpenRouter対応プルリク(Add OpenRouter Provider for Enhanced Integration by nmehran · Pull Request #229 · MadcowD/ell · GitHub)
- これで解決したんだろうか?(要確認)
終わりに
ell-aiの@ell.simpleデコレータを触り、ソースコードも覗きました。
ユーザに関数を定義させ、それをデコレートするだけでLLMのWeb APIを呼び出せる、さらにいくつかを切り替えられるというのは目を見張るものがあります。
一方ell-aiに完全に乗り換えられるかは今の時点では保留です
(あとell-ai、LangChainに喧嘩をふっかけるのは「めっ」なのですよ。表面上だけでも仲良くしてください)
-
アイマス給湯室参照。同時再生のための、Welcome!!掛け声
↩♦︎•♣︎•━━━━#アイマス給湯室 🍵
— ミリオンライブ! シアターデイズ【公式】 (@imasml_theater) 2024年10月29日
ミリオンライブ!特集
━━━━•♠︎•♥︎
ご視聴いただいた皆様、ありがとうございました!
見逃した方もぜひアーカイブをチェック✨
これからも #ミリシタ を
引き続きよろしくお願いします🎉
▼発表内容はこちらhttps://t.co/vl0GUFqa7y -
DifyもLangChainを下げていたので、アンチが出るくらいLangChainは大きくなったのだと思います。LangChainの貢献はとても大きいと思いますが、LLMのAPIを単純に呼ぶときにLangChainはあまりに煩雑ということをell-aiは指摘していると、私の目には映ります (2024/11/02 自分のツイートを思い出したので追加)
↩ell-aiは簡単度合いがすごいですね。
— nikkie / にっきー (@ftnext) 2024年10月13日
関数のdocstringにシステムプロンプト、返り値にユーザプロンプト。
ell.simpleでデコレートしてモデルを指定。
この関数の返り値はLLMが生成したテキスト。https://t.co/0vNPnVvOue
LangChainに対して特大マサカリという印象。こんな簡単にすみますよ? - そのツイートは見つけられていないのですが、たしかOpenAIの中の人だったと思います↩
- 関連 ↩
-
アイマスハッカソンのこちらをプロンプトの参考にしています
↩#imas_hack
— しょうゆ (@shsub) 2024年10月12日
今日の発表を共有します。https://t.co/OuvVPBEs1Shttps://t.co/JXYE6clU2t