우리는 LLM 환경을 단순화하는 임무를 수행하고 있습니다. Unify는 다음과 같습니다.
? 모든 공급자의 LLM을 사용하십시오 . 단일 인터페이스를 사용하면 하나의 문자열을 단순히 변경하여 모든 제공 업체의 모든 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 )LLM을 쿼리 할 때 프롬프트의 여러 측면을 고정하고 각 후속 호출에서 프롬프트의 작은 하위 집합 만 변경하려고합니다.
예를 들어, 다운 스트림 애플리케이션에서 나오는 다른 사용자 메시지를 전달하는 동안 온대, 시스템 프롬프트 및 사용 가능한 도구를 수정할 수 있습니다. 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." )모든 매개 변수는 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 ))기능성 현명하고 비동기 및 동기식 클라이언트는 동일합니다.
.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 = "" )비동기 클라이언트와 정확히 같은 방식으로 작동합니다.
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 라우팅에 대한 자세한 내용은 포괄적 인 문서를 확인하십시오!