以下の内容はhttps://nikkie-ftnext.hatenablog.com/entry/ell-ai-simple-decorator-practiceより取得しました。


docstringを持ち文字列を返す関数をデコレートするだけでGPTなどのLLMを呼び出せる! ell-aiの @ell.simple 素振りの記

はじめに

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でプロンプトを書きました)

@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-aiの@ell.simpleデコレータを触り、ソースコードも覗きました。
ユーザに関数を定義させ、それをデコレートするだけでLLMのWeb APIを呼び出せる、さらにいくつかを切り替えられるというのは目を見張るものがあります。
一方ell-aiに完全に乗り換えられるかは今の時点では保留です
(あとell-ai、LangChainに喧嘩をふっかけるのは「めっ」なのですよ。表面上だけでも仲良くしてください)


  1. アイマス給湯室参照。同時再生のための、Welcome!!掛け声
  2. DifyもLangChainを下げていたので、アンチが出るくらいLangChainは大きくなったのだと思います。LangChainの貢献はとても大きいと思いますが、LLMのAPIを単純に呼ぶときにLangChainはあまりに煩雑ということをell-aiは指摘していると、私の目には映ります (2024/11/02 自分のツイートを思い出したので追加)
  3. そのツイートは見つけられていないのですが、たしかOpenAIの中の人だったと思います
  4. 関連
  5. アイマスハッカソンのこちらをプロンプトの参考にしています



以上の内容はhttps://nikkie-ftnext.hatenablog.com/entry/ell-ai-simple-decorator-practiceより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14