私たちはLLMランドスケープを簡素化するという使命にあります。
?プロバイダーから任意のLLMを使用します。単一のインターフェイスを使用すると、1つの文字列を変更するだけで、すべてのプロバイダーのすべてのLLMを使用できます。いくつかのAPIキーを管理したり、異なる入出力形式を処理する必要はありません。 Unifyはあなたのためにそのすべてを処理します!
LLMパフォーマンスの向上:独自のカスタムテストとEVALを追加し、すべてのモデルとプロバイダーに独自のプロンプトをベンチマークします。品質、コスト、速度を比較し、すべてのテストケースが通過するまでシステムのプロンプトを繰り返すと、アプリを展開できます!
?最高のLLMへのルーティング:個々のプロンプトの完璧なモデルとプロバイダーへのルーティングにより、品質、コスト、速度を向上させます。
パッケージをインストールするだけです。
pip install unifyai
その後、サインアップしてAPIキーを取得すると、準備ができています!
import unify
client = unify . Unify ( "gpt-4o@openai" , api_key = < your_key > )
client . generate ( "hello world!" )
注記
python-dotenvを使用して、 UNIFY_KEY="My API Key"
を.env
ファイルに追加して、上記のようにapi_key
引数を使用する必要性を回避することをお勧めします。残りのREADMEについては、キーを環境変数として設定すると仮定します。
次のように、すべてのモデル、プロバイダー、エンドポイント( <model>@<provider>
ペア)をリストできます。
models = unify . list_models ()
providers = unify . list_providers ()
endpoints = unify . list_endpoints ()
これらの関数内で次のようにフィルタリングすることもできます。
import random
anthropic_models = unify . list_models ( "anthropic" )
client . set_endpoint ( random . choice ( anthropic_models ) + "@anthropic" )
latest_llama3p1_providers = unify . list_providers ( "llama-3.1-405b-chat" )
client . set_endpoint ( "llama-3.1-405b-chat@" + random . choice ( latest_llama3p1_providers ))
openai_endpoints = unify . list_endpoints ( "openai" )
client . set_endpoint ( random . choice ( openai_endpoints ))
mixtral8x7b_endpoints = unify . list_endpoints ( "mixtral-8x7b-instruct-v0.1" )
client . set_endpoint ( random . choice ( mixtral8x7b_endpoints ))
endpoint
、 model
、またはprovider
を変更したい場合は、それぞれ.set_endpoint
、 .set_model
、 .set_provider
メソッドを使用して行うことができます。
client . set_endpoint ( "mistral-7b-instruct-v0.3@deepinfra" )
client . set_model ( "mistral-7b-instruct-v0.3" )
client . set_provider ( "deepinfra" )
.generate
関数のsystem_message
引数を使用して、モデルのペルソナに影響を与えることができます。
response = client . generate (
user_message = "Hello Llama! Who was Isaac Newton?" , system_message = "You should always talk in rhymes"
)
.generate
関数を使用して複数のメッセージを送信する場合は、次のようにmessages
の引数を使用する必要があります。
messages = [
{ "role" : "user" , "content" : "Who won the world series in 2020?" },
{ "role" : "assistant" , "content" : "The Los Angeles Dodgers won the World Series in 2020." },
{ "role" : "user" , "content" : "Where was it played?" }
]
res = client . generate ( messages = messages )
LLMSを照会するときは、プロンプトの多くの側面を固定し、その後の各呼び出しでプロンプトの小さなサブセットのみを変更することがよくあります。
たとえば、ダウンストリームアプリケーションからの異なるユーザーメッセージを渡しながら、温帯、システムプロンプト、および利用可能なツールを修正することをお勧めします。 Unifyのすべてのクライアントは、コンストラクターで指定できるデフォルトの引数を介してこれを非常にシンプルにし、セッターメソッドを使用していつでも設定できます。
たとえば、次のコードは、 .generate()
メソッドに繰り返し渡す必要なく、その後のすべてのリクエストにtemperature=0.5
を渡します。
client = unify . Unify ( "claude-3-haiku@anthropic" , temperature = 0.5 )
client . generate ( "Hello world!" )
client . generate ( "What a nice day." )
すべてのパラメーターは、ゲッターが取得し、セッターを介して設定することもできます。
client = unify . Unify ( "claude-3-haiku@anthropic" , temperature = 0.5 )
print ( client . temperature ) # 0.5
client . set_temperature ( 1.0 )
print ( client . temperature ) # 1.0
値を.generate()
メソッドに渡すと、クライアントに指定されたデフォルト値が上書きされます。
client = unify . Unify ( "claude-3-haiku@anthropic" , temperature = 0.5 )
client . generate ( "Hello world!" ) # temperature of 0.5
client . generate ( "What a nice day." , temperature = 1.0 ) # temperature of 1.0
チャットボットアプリケーションなど、複数のユーザーリクエストを同時に処理するのに最適なパフォーマンスを行うには、それらを非同期に処理することをお勧めします。 AsyncUnify
を使用した最小限の例を以下に示します。
import unify
import asyncio
async_client = unify . AsyncUnify ( "llama-3-8b-chat@fireworks-ai" )
asyncio . run ( async_client . generate ( "Hello Llama! Who was Isaac Newton?" ))
より適切な例として、複数のリクエストを並行して処理すると、次のように実行できます。
import unify
import asyncio
clients = dict ()
clients [ "gpt-4o@openai" ] = unify . AsyncUnify ( "gpt-4o@openai" )
clients [ "claude-3-opus@anthropic" ] = unify . AsyncUnify ( "claude-3-opus@anthropic" )
clients [ "llama-3-8b-chat@fireworks-ai" ] = unify . AsyncUnify ( "llama-3-8b-chat@fireworks-ai" )
async def generate_responses ( user_message : str ):
responses_ = dict ()
for endpoint_ , client in clients . items ():
responses_ [ endpoint_ ] = await client . generate ( user_message )
return responses_
responses = asyncio . run ( generate_responses ( "Hello, how's it going?" ))
for endpoint , response in responses . items ():
print ( "endpoint: {}" . format ( endpoint ))
print ( "response: {} n " . format ( response ))
機能的には、非同期クライアントと同期クライアントは同一です。
.generate
関数でstream=True
を設定することにより、ストリーミング応答を有効にできます。
import unify
client = unify . Unify ( "llama-3-8b-chat@fireworks-ai" )
stream = client . generate ( "Hello Llama! Who was Isaac Newton?" , stream = True )
for chunk in stream :
print ( chunk , end = "" )
Asyncクライアントとまったく同じように機能します。
import unify
import asyncio
async_client = unify . AsyncUnify ( "llama-3-8b-chat@fireworks-ai" )
async def stream ():
async_stream = await async_client . generate ( "Hello Llama! Who was Isaac Newton?" , stream = True )
async for chunk in async_stream :
print ( chunk , end = "" )
asyncio . run ( stream ())
より高度なAPI機能、ベンチマーク、LLMルーティングの詳細については、包括的なドキュメントをご覧ください!