Мы выполняем миссию, чтобы упростить ландшафт LLM, Unify позволяет вам:
? Используйте любой LLM от любого поставщика : с помощью одного интерфейса вы можете использовать все LLM от всех поставщиков, просто изменив одну строку. Нет необходимости управлять несколькими клавишами API или обрабатывать различные форматы ввода-вывода. Unify обрабатывает все это для вас!
Улучшение производительности LLM : добавьте свои собственные тесты и эвалы, а также сравните свои собственные подсказки на всех моделях и поставщиках. Сравнивая качество, стоимость и скорость, а также вытекайте в систему до тех пор, пока все тестовые примеры пройдут, и вы сможете развернуть свое приложение!
? Маршрут к лучшему 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" )
Вы можете повлиять на личность модели, используя аргумент system_message
в функции .generate
:
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 делают это очень простым с помощью аргументов по умолчанию, которые могут быть указаны в конструкторе, а также могут быть установлены в любое время, используя методы сеттеров.
Например, следующий код будет передавать temperature=0.5
во все последующие запросы, не требуя многократного передачи в метод .generate()
.
client = unify . Unify ( "claude-3-haiku@anthropic" , temperature = 0.5 )
client . generate ( "Hello world!" )
client . generate ( "What a nice day." )
Все параметры также могут быть получены с помощью Getters и установить с помощью сеттеров:
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 ))
Функциональность мудро, асинхронные и синхронные клиенты идентичны.
Вы можете включить потоковые ответы, установив stream=True
в функции .generate
.
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 = "" )
Это работает точно так же с асинхронными клиентами.
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, посетите наши всеобъемлющие документы!