LLM-Client-SDK は、生成 AI の大規模言語モデルとのシームレスな統合のための SDK です (現在サポートしているのは、OpenAI、Google、AI21、HuggingfaceHub、Aleph Alpha、Anthropic、トランスフォーマーを備えたローカル モデルであり、今後さらに多くのモデルがサポートされます)。
私たちのビジョンは、ユーザーが柔軟性 (API パラメーター、エンドポイントなど) を失わずに、さまざまな LLM との強力かつ高速な統合を実現しながら、非同期ネイティブで本番環境に対応した SDK を提供することです。 *同期バージョンも提供しています。詳細については、以下の「使用法」セクションを参照してください。
このパッケージは、LLM とのシームレスな統合のための 2 つのシンプルなインターフェイスを公開します (将来的には、リスト モデル、編集などのより多くのタスクをサポートするためにインターフェイスを拡張する予定です)。
from abc import ABC、abstractmethodfrom dataclasses import dataclass、fieldfrom入力 import Any、Optionalfrom enum import Enumfrom dataclasses_json import dataclass_json、configfrom aiohttp import ClientSessionclass BaseLLMClient(ABC):@abstractmethodasync def text_completion(self、prompt: str、**kwargs) -> list [str]:raise NotImplementedError()async 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:Role = フィールド(metadata=config(encoder=lambda role: role.value, decoder=Role))content: strname:オプション[str] = field(default=None, metadata=config(exclude=lambda name: name is None))例: bool = field(default=False, metadata=config(exclude=lambda _: True)) @dataclassclass LLMAPIClientConfig:api_key: strsession: ClientSessionbase_url: Optional[str] = Nonedefault_model: Optional[str] = Noneheaders: dict[str, Any] = field(default_factory=dict)class BaseLLMAPIClient(BaseLLMClient, ABC):def __init__(self,構成: LLMAPIClientConfig): ...@abstractmethodasync def text_completion(self、プロンプト: str、モデル: Optional[str] = なし、max_tokens: int | None = なし、温度: Optional[float] = なし、top_p: Optional[float] = なし、* *kwargs) -> list[str]:raise NotImplementedError()async def chat_completion(self, メッセージ: list[ChatMessage],温度: float = 0、max_tokens: int = 16、モデル: Optional[str] = None、**kwargs) -> list[str]:raise NotImplementedError()async def embedding(self、text: str、model: Optional[ str] = なし、**kwargs) -> list[float]:raise NotImplementedError()async def get_chat_tokens_count(self, メッセージ: list[ChatMessage], **kwargs) -> int:raise NotImplementedError()
Python 3.9以降
パッケージのサイズが心配な場合は、必要なクライアントのみをインストールできます。デフォルトではクライアントはインストールされません。
現在のすべてのクライアントのサポート
$ pip install llm-client[all]
基本インターフェイスおよび一部のライト LLM クライアント (AI21 および Aleph Alpha) のみの場合
$ pip install llm-client
現在のすべての API クライアントのサポートについて
$ pip install llm-client[api]
ローカルクライアントサポートのみの場合
$ pip install llm-client[ローカル]
同期サポート用
$ pip install llm-client[同期]
OpenAI サポートのみの場合
$ pip install llm-client[openai]
HuggingFace サポートのみの場合
$ pip install llm-client[ハグフェイス]
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("トークンの数:", await llm_client.get_tokens_count(text)) # 5print("チャット完了のためのトークンの数:", await llm_client.get_chat_tokens_count(messages, model="gpt) -3.5-turbo")) # 23print("生成されたチャット:", await llm_client.chat_completion(messages, model="gpt-3.5-turbo")) # ['こんにちは!今日はどのようにサポートできますか?']print("生成されたテキスト:", await llm_client.text_completion(text)) # [' stringnnはい、これはテスト文字列です。テスト文字列は、']print("generated embedding:", await 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)
貢献は大歓迎です!以下の ToDo をチェックして、お気軽にイシューやプル リクエストを開いてください。
リストには順序がありません
より多くの LLM のサポートを追加する
人間的
グーグル
コヒア
LLM 経由でさらに多くの機能のサポートを追加
埋め込み
チャット
モデルをリストする
編集
もっと
貢献ガイドラインとリンターを追加する
同じプロンプトで複数の LLM を並行して実行する簡単な方法を作成する
共通モデルパラメータの変換
温度
max_tokens
トップ_p
もっと
開発モードでパッケージをインストールするには、次のコマンドを実行します。
$ pip install -e ".[all,test]"
テストを実行するには、次のコマンドを実行します。
$ pytest テスト
新しい LLMClient を追加する場合は、BaseLLMClient または BaseLLMAPIClient を実装する必要があります。
BaseLLMAPIClient を追加する場合は、LLMAPIClientFactory にも追加する必要があります。
pyproject.toml で LLMClient に依存関係を追加することもできます。また、test.yml に matrix.flavor を追加していることを確認してください。