LLM-Client-SDK는 생성 AI 대규모 언어 모델(현재 OpenAI, Google, AI21, HuggingfaceHub, Aleph Alpha, Anthropic, 변환기가 있는 로컬 모델 등 지원 예정)과의 원활한 통합을 위한 SDK입니다.
우리의 비전은 사용자가 유연성(API 매개변수, 엔드포인트 등)을 잃지 않고 다양한 LLM과 강력하고 빠른 통합을 생성하는 동시에 비동기 네이티브 및 프로덕션 준비 SDK를 제공하는 것입니다. *동기화 버전도 제공됩니다. 자세한 내용은 아래 사용 섹션을 참조하세요.
패키지는 LLM과의 원활한 통합을 위해 두 가지 간단한 인터페이스를 제공합니다(향후 목록 모델, 편집 등과 같은 더 많은 작업을 지원하기 위해 인터페이스를 확장할 예정입니다).
from abc import ABC, abstractmethodfrom dataclasses import dataclass, fieldfrom looking import Any, Optionalfrom enum import Enumfrom dataclasses_json import dataclass_json, configfrom aiohttp import ClientSessionclass BaseLLMClient(ABC):@abstractmethodasync def text_completion(self, 프롬프트: str, **kwargs) -> 목록 [str]:NotImplementedError()비동기 def 인상 get_tokens_count(self, text: str, **kwargs) -> int:raise NotImplementedError()class Role(Enum):SYSTEM = "system"USER = "user"ASSISTANT = "assistant"@dataclass_json@dataclassclass ChatMessage:role: 역할 = field(metadata=config(encoder=lambda 역할: role.value, 디코더=Role))content: strname: 선택 사항[str] = field(기본값=없음, 메타데이터=config(제외=람다 이름: 이름은 없음))예: bool = 필드(기본값=False, 메타데이터=config(제외=람다 _: True)) @dataclassclass LLMAPIClientConfig:api_key: strsession: ClientSessionbase_url: 선택 사항[str] = Nonedefault_model: 선택 사항[str] = Noneheaders: dict[str, Any] = field(default_factory=dict)class BaseLLMAPIClient(BaseLLMClient, ABC):def __init__(self, 구성: LLMAPIClientConfig): ...@abstractmethodasync def text_completion(self, 프롬프트: str, model: Optional[str] = None, max_tokens: int | None = None, 온도: Optional[float] = None, top_p: Optional[float] = None, * *kwargs) -> 목록[str]:NotImplementedError()async def chat_completion(self, 메시지: 목록[ChatMessage], 온도: float = 0, max_tokens: int = 16, model: Optional[str] = None, **kwargs) -> list[str]:raise NotImplementedError()async def embedding(self, text: str, model: Optional[str] = None, * *kwargs) -> 목록[float]:NotImplementedError()async def get_chat_tokens_count(self, 메시지: 목록[ChatMessage], **kwargs) -> int:raise NotImplementedError()
파이썬 3.9+
패키지 크기가 걱정된다면 필요한 클라이언트만 설치할 수 있습니다. 기본적으로 클라이언트는 전혀 설치되지 않습니다.
현재 모든 고객 지원
$ pip install llm-클라이언트[모두]
기본 인터페이스 및 일부 가벼운 LLM 클라이언트(AI21 및 Aleph Alpha)에만 해당
$ pip 설치 llm-클라이언트
현재 모든 API 클라이언트 지원
$ pip install llm-클라이언트[api]
로컬 클라이언트 지원에만 해당
$ pip 설치 llm-클라이언트[로컬]
동기화 지원의 경우
$ pip install llm-클라이언트[동기화]
OpenAI 지원에만 해당
$ pip 설치 llm-클라이언트[openai]
HuggingFace 지원에만 해당
$ pip install llm-client[huggingface]
OpenAIClient를 통해 직접 OpenAI 사용 - 프로덕션에서 최대 제어 및 모범 사례
import osfrom aiohttp import ClientSessionfrom llm_client import ChatMessage, Role, OpenAIClient, LLMAPIClientConfigOPENAI_API_KEY = os.environ["API_KEY"]OPENAI_ORG_ID = os.getenv("ORG_ID")async def main():async with ClientSession() as session:llm_client = OpenAIClient(LLMAPIClientConfig(OPENAI_API_KEY, session, default_model="text-davinci-003", headers={"OpenAI-Organization": OPENAI_ORG_ID})) # 헤더는 선택 사항입니다.text = "이것은 실제로 테스트입니다."messages = [ChatMessage(role =Role.USER, content="안녕하세요!"),ChatMessage(role=Role.SYSTEM, content="안녕하세요! 방법 오늘 도와드릴까요?")]print("토큰 수:", wait llm_client.get_tokens_count(text)) # 5print("채팅 완료를 위한 토큰 수:", wait llm_client.get_chat_tokens_count(messages, model="gpt -3.5-turbo")) # 23print("생성된 채팅:", wait llm_client.chat_completion(messages, model="gpt-3.5-turbo")) # ['안녕하세요! 오늘 무엇을 도와드릴까요?']print("generated text:", wait llm_client.text_completion(text)) # [' stringnn예, 테스트 문자열입니다. 테스트 문자열은']print("generated embedding:", wait llm_client.embedding(text)) # [0.0023064255, -0.009327292, ...]에 사용됩니다.
LLMAPIClientFactory 사용 - 빠르게 이동하고 클라이언트 세션을 직접 처리하지 않으려는 경우 적합합니다.
import osfrom llm_client import LLMAPIClientFactory, LLMAPIClientTypeOPENAI_API_KEY = os.environ["API_KEY"]async def main():async with LLMAPIClientFactory() as llm_api_client_factory:llm_client = llm_api_client_factory.get_llm_api_client(LLMAPIClientType.OPEN_AI, api_key=OPENAI_API_KEY, default_model="text-davinci-003")await llm_client.text_completion(prompt="이것은 실제로 테스트입니다.")await llm_client.text_completion(prompt="이것은 실제로 테스트입니다.", max_tokens=50) # 또는 asyncfrom llm_client를 사용하고 싶지 않은 경우 import init_sync_llm_api_clientllm_client = init_sync_llm_api_client(LLMAPIClientType.OPEN_AI, api_key=OPENAI_API_KEY, default_model="text-davinci-003")llm_client.text_completion(prompt="이것은 실제로 test")llm_client.text_completion(prompt="이것은 실제로 테스트입니다.", max_tokens=50)
지역 모델
import osfrom 변환기 import AutoModelForCausalLM, AutoModelForSeq2SeqLM, AutoTokenizerfrom llm_client import LocalClientConfig, LocalClientasync def main():try:model = AutoModelForCausalLM.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])제외 ValueError:model = AutoModelForSeq2SeqLM.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])tokenizer = AutoTokenizer.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])llm_client = LocalClient(LocalClientConfig(model, tokenizer, os.environ["TENSORS_TYPE"]), os.environ["DEVICE"]))await llm_client.text_completion(prompt="이것은 실제로 테스트입니다.")await llm_client.text_completion(prompt="이것은 실제로 테스트입니다.", max_tokens=50)# 또는 그렇지 않은 경우 asyncimport async_to_synctry:model =를 사용하고 싶지 않습니다. AutoModelForCausalLM.from_pretrained(os.environ["MODEL_NAME_OR_PATH"]) 제외 ValueError:model = AutoModelForSeq2SeqLM.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])tokenizer = AutoTokenizer.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])llm_client = LocalClient(LocalClientConfig(model, tokenizer, os.environ["TENSORS_TYPE"], os.environ["DEVICE"]))llm_client = async_to_sync.methods(llm_client)llm_client.text_completion(prompt="이것은 실제로 테스트입니다.")llm_client .text_completion(prompt="이것은 실제로 테스트입니다.", max_tokens=50)
기여를 환영합니다! 아래의 할 일을 확인하고 자유롭게 이슈를 열거나 풀 리퀘스트를 보내주세요.
목록이 정렬되지 않았습니다.
더 많은 LLM에 대한 지원 추가
인류학
코히어
LLM을 통해 더 많은 기능에 대한 지원 추가
임베딩
채팅
모델 목록
편집
더
기여 지침 및 린터 추가
동일한 프롬프트로 여러 LLM을 병렬로 실행하는 쉬운 방법 만들기
공통 모델 매개변수 변환
온도
max_tokens
top_p
더
개발 모드에서 패키지를 설치하려면 다음 명령을 실행하십시오.
$ pip install -e ".[모두,테스트]"
테스트를 실행하려면 다음 명령어를 실행하세요.
$ pytest 테스트
새 LLMClient를 추가하려면 BaseLLMClient 또는 BaseLLMAPIClient를 구현해야 합니다.
BaseLLMAPIClient를 추가하는 경우 LLMAPIClientFactory에도 추가해야 합니다.
pyproject.toml에서 LLMClient에 종속성을 추가할 수 있으며 test.yml에 matrix.flavor를 추가하는지 확인하세요.