LLM-Client-SDK เป็น SDK สำหรับการบูรณาการอย่างราบรื่นกับโมเดลภาษาขนาดใหญ่ของ AI ที่สร้าง (ปัจจุบันเรารองรับ - OpenAI, Google, AI21, HuggingfaceHub, Aleph Alpha, Anthropic, โมเดล Local พร้อมหม้อแปลง - และอีกมากมายในเร็วๆ นี้)
วิสัยทัศน์ของเราคือการจัดเตรียม SDK แบบเนทีฟแบบอะซิงค์และการผลิตที่พร้อมใช้งาน ในขณะเดียวกันก็สร้างการผสานรวมที่มีประสิทธิภาพและรวดเร็วกับ LLM ที่แตกต่างกัน โดยไม่ปล่อยให้ผู้ใช้สูญเสียความยืดหยุ่นใดๆ (พารามิเตอร์ API, ตำแหน่งข้อมูล ฯลฯ) *เรายังให้บริการเวอร์ชันการซิงค์อีกด้วย ดูรายละเอียดเพิ่มเติมด้านล่างในส่วนการใช้งาน
แพคเกจนี้แสดงอินเทอร์เฟซที่เรียบง่ายสองอินเทอร์เฟซสำหรับการผสานรวมกับ LLM ได้อย่างราบรื่น (ในอนาคต เราจะขยายอินเทอร์เฟซเพื่อรองรับงานเพิ่มเติม เช่น โมเดลรายการ การแก้ไข ฯลฯ):
จาก abc นำเข้า ABC, วิธีนามธรรมจากคลาสข้อมูลนำเข้าคลาสข้อมูล, ฟิลด์จากการพิมพ์นำเข้าใด ๆ , ทางเลือกจาก enum นำเข้า Enum จาก dataclasses_json นำเข้า dataclass_json, configจาก aiohttp นำเข้า ClientSessionclass BaseLLMClient (ABC): @ abstractmethodasync def text_completion (ตนเอง, พรอมต์: str, ** kwargs) -> รายการ [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: บทบาท = field(metadata=config(encoder=lambda Role: Role.value, decoder=Role))เนื้อหา: 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: ตัวเลือก[str] = Nonedefault_model: ตัวเลือก[str] = ไม่มีส่วนหัว: dict[str, ใดๆ] = field(default_factory=dict)class BaseLLMAPIClient(BaseLLMClient, ABC):def __init__(self, กำหนดค่า: LLMAPIClientConfig): ...@abstractmethodasync def text_completion(self, prompt: str, model: Optional[str] = None, max_tokens: int | none = none, อุณหภูมิ: Optional[float] = None, top_p: Optional[float] = None, * *kwargs) -> list[str]:raise NotImplementedError()async def chat_completion(self, ข้อความ: list[ChatMessage], อุณหภูมิ: float = 0, max_tokens: int = 16, model: Optional[str] = None, **kwargs) -> list[str]:raise NotImplementedError()async def embedding (ตนเอง, ข้อความ: str, model: Optional[str] = ไม่มี , **kwargs) -> list[float]:raise NotImplementedError()async def get_chat_tokens_count(self, ข้อความ: รายการ [ChatMessage], **kwargs) -> int:raise NotImplementedError()
ไพธอน 3.9+
หากคุณกังวลเกี่ยวกับขนาดของแพ็คเกจ คุณสามารถติดตั้งได้เฉพาะไคลเอนต์ที่คุณต้องการ โดยค่าเริ่มต้น เราจะไม่ติดตั้งไคลเอนต์ใดเลย
สำหรับการสนับสนุนลูกค้าปัจจุบันทั้งหมด
$ pip ติดตั้ง llm-client [ทั้งหมด]
สำหรับอินเทอร์เฟซพื้นฐานและไคลเอนต์ LLM แบบเบาบางรุ่นเท่านั้น (AI21 และ Aleph Alpha)
$ pip ติดตั้ง llm-client
สำหรับการสนับสนุนไคลเอนต์ API ปัจจุบันทั้งหมด
$ pip ติดตั้ง llm-client [api]
สำหรับการสนับสนุนลูกค้าในพื้นที่เท่านั้น
$ pip ติดตั้ง llm-client [ท้องถิ่น]
สำหรับการสนับสนุนการซิงค์
$ pip ติดตั้ง llm-client [ซิงค์]
สำหรับการสนับสนุน OpenAI เท่านั้น
$ pip ติดตั้ง llm-client [openai]
สำหรับการสนับสนุน HuggingFace เท่านั้น
$ pip ติดตั้ง llm-client [กอดหน้า]
การใช้ OpenAI โดยตรงผ่าน OpenAIClient - การควบคุมสูงสุดและแนวปฏิบัติที่ดีที่สุดในการผลิต
นำเข้า osfrom aiohttp นำเข้า ClientSessionfrom llm_client นำเข้า ChatMessage, บทบาท, OpenAIClient, LLMAPIClientConfigOPENAI_API_KEY = os.environ["API_KEY"]OPENAI_ORG_ID = os.getenv("ORG_ID")async def main():async กับ ClientSession() เป็นเซสชัน:llm_client = OpenAIClient (LLMAPIClientConfig (OPENAI_API_KEY, เซสชัน, default_model = "text-davinci-003", headers = { "OpenAI-Organization": OPENAI_ORG_ID})) # ส่วนหัวเป็นข้อความเสริม = "นี่คือการทดสอบจริงๆ" ข้อความ = [ChatMessage (บทบาท =Role.USER, content="สวัสดี!"),ChatMessage(role=Role.SYSTEM, content="สวัสดี! วันนี้ฉันจะช่วยคุณได้อย่างไร?")]print("จำนวนโทเค็น:", await llm_client.get_tokens_count(text)) # 5print("จำนวนโทเค็นสำหรับการแชทให้เสร็จสิ้น:", await llm_client.get_chat_tokens_count (ข้อความ model="gpt-3.5-turbo")) # 23print("แชทที่สร้าง:", รออยู่ llm_client.chat_completion(messages, model="gpt-3.5-turbo")) # ['สวัสดี! วันนี้ฉันจะช่วยคุณได้อย่างไร']print("generated text:", await llm_client.text_completion(text)) # [' stringnnใช่ นี่คือสตริงทดสอบ สตริงทดสอบใช้ในการ ']print("generated embedding:", await llm_client.embedding(text)) # [0.0023064255, -0.009327292, ...]
การใช้ LLMAPIClientFactory - สมบูรณ์แบบหากคุณต้องการดำเนินการอย่างรวดเร็วและไม่จัดการเซสชันไคลเอ็นต์ด้วยตัวเอง
นำเข้า osfrom llm_client นำเข้า LLMAPIClientFactory, LLMAPIClientTypeOPENAI_API_KEY = os.environ["API_KEY"]async def main():async พร้อมด้วย LLMAPIClientFactory() เป็น 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")รอ llm_client.text_completion(prompt="นี่คือการทดสอบจริงๆ")รอ llm_client.text_completion(prompt="นี่คือการทดสอบจริงๆ ", สูงสุด_โทเค็น=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)
โมเดลท้องถิ่น
นำเข้า osfrom หม้อแปลงนำเข้า AutoModelForCausalLM, AutoModelForSeq2SeqLM, AutoTokenizerfrom llm_client นำเข้า 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="This is really a test")await llm_client.text_completion(prompt="This is really a test", 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
การฝัง
แชท
รายการรุ่น
แก้ไข
มากกว่า
เพิ่มแนวทางการสนับสนุนและ linter
สร้างวิธีง่ายๆ ในการเรียกใช้ LLM หลายรายการพร้อมกันด้วยข้อความแจ้งเดียวกัน
แปลงพารามิเตอร์โมเดลทั่วไป
อุณหภูมิ
max_tokens
ท็อป_พี
มากกว่า
หากต้องการติดตั้งแพ็กเกจในโหมดการพัฒนา ให้รันคำสั่งต่อไปนี้:
$ pip ติดตั้ง -e '.[ทั้งหมด,ทดสอบ]"
หากต้องการรันการทดสอบ ให้รันคำสั่งต่อไปนี้:
การทดสอบ $ pytest
หากคุณต้องการเพิ่ม LLMClient ใหม่ คุณต้องใช้ BaseLLMClient หรือ BaseLLMAPIClient
หากคุณกำลังเพิ่ม BaseLLMAPIClient คุณต้องเพิ่มเขาใน LLMAPIClientFactory ด้วย
คุณสามารถเพิ่มการพึ่งพาให้กับ LLMClient ของคุณใน pyproject.toml และต้องแน่ใจว่าคุณกำลังเพิ่ม matrix.flavor ใน test.yml