خدمة الذكاء الاصطناعي التوليدي الفائق مع Friendli
يقدم عميل Friendli واجهة ملائمة للتفاعل مع خدمات نقطة النهاية التي تقدمها Friendli Suite، وهو الحل النهائي لخدمة نماذج الذكاء الاصطناعي التوليدية. تم تصميمه لتحقيق المرونة والأداء، وهو يدعم كلاً من العمليات المتزامنة وغير المتزامنة، مما يجعل من السهل دمج قدرات الذكاء الاصطناعي القوية في تطبيقاتك.
للبدء مع Friendli، قم بتثبيت حزمة العميل باستخدام pip
:
pip install friendli-client
مهم
يجب عليك تعيين متغير البيئة FRIENDLI_TOKEN
قبل تهيئة مثيل العميل باستخدام client = Friendli()
. وبدلاً من ذلك، يمكنك توفير قيمة رمز الوصول الشخصي الخاص بك كوسيطة token
عند إنشاء العميل، كما يلي:
from friendli import Friendli
client = Friendli ( token = "YOUR PERSONAL ACCESS TOKEN" )
تقدم Friendli Serverless Endpoint واجهة بسيطة تعمل بالنقر والتشغيل للوصول إلى النماذج الشائعة مفتوحة المصدر مثل Llama 3.1. مع فواتير الدفع لكل رمز، يعد هذا مثاليًا للاستكشاف والتجريب.
للتفاعل مع النماذج المستضافة بواسطة نقاط النهاية بدون خادم، قم بتوفير رمز النموذج الذي تريد استخدامه في وسيطة model
. ارجع إلى جدول التسعير للحصول على قائمة برموز النماذج المتاحة وأسعارها.
from friendli import Friendli
client = Friendli ()
chat_completion = client . chat . completions . create (
model = "meta-llama-3.1-8b-instruct" ,
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
)
print ( chat_completion . choices [ 0 ]. message . content )
تمكنك نقاط النهاية المخصصة من Friendli من تشغيل نماذج الذكاء الاصطناعي التوليدية المخصصة لديك على موارد وحدة معالجة الرسومات المخصصة.
للتفاعل مع نقاط النهاية المخصصة، قم بتوفير معرف نقطة النهاية في وسيطة model
.
import os
from friendli import Friendli
client = Friendli (
team_id = os . environ [ "TEAM_ID" ], # If not provided, default team is used.
use_dedicated_endpoint = True ,
)
chat_completion = client . chat . completions . create (
model = os . environ [ "ENDPOINT_ID" ],
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
)
print ( chat_completion . choices [ 0 ]. message . content )
تعتبر حاوية Friendli مثالية للمستخدمين الذين يفضلون خدمة حاملي شهادات الماجستير ضمن البنية التحتية الخاصة بهم. من خلال نشر محرك Friendli في حاويات على وحدات معالجة الرسومات المحلية أو السحابية، يمكنك الحفاظ على التحكم الكامل في بياناتك وعملياتك، مما يضمن الأمان والامتثال للسياسات الداخلية.
from friendli import Friendli
client = Friendli ( base_url = "http://0.0.0.0:8000" )
chat_completion = client . chat . completions . create (
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
)
print ( chat_completion . choices [ 0 ]. message . content )
import asyncio
from friendli import AsyncFriendli
client = AsyncFriendli ()
async def main () -> None :
chat_completion = await client . chat . completions . create (
model = "meta-llama-3.1-8b-instruct" ,
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
)
print ( chat_completion . choices [ 0 ]. message . content )
asyncio . run ( main ())
from friendli import Friendli
client = Friendli ()
stream = client . chat . completions . create (
model = "meta-llama-3.1-8b-instruct" ,
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
stream = True ,
)
for chunk in stream :
print ( chunk . choices [ 0 ]. delta . content or "" , end = "" , flush = True )
يستخدم العميل غير المتزامن ( AsyncFriendli
) نفس الواجهة لدفق الاستجابة.
import asyncio
from friendli import AsyncFriendli
client = AsyncFriendli ()
async def main () -> None :
stream = await client . chat . completions . create (
model = "meta-llama-3.1-8b-instruct" ,
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
stream = True ,
)
async for chunk in stream :
print ( chunk . choices [ 0 ]. delta . content or "" , end = "" , flush = True )
asyncio . run ( main ())
إذا كانت نقطة النهاية الخاصة بك تخدم نموذج Multi-LoRA، فيمكنك إرسال طلب إلى أحد المحولات من خلال توفير مسار المحول في وسيطة model
.
بالنسبة لنقاط نهاية Friendli المخصصة، قم بتوفير معرف نقطة النهاية ومسار المحول مفصولين بنقطتين ( :
).
import os
from friendli import Friendli
client = Friendli (
team_id = os . environ [ "TEAM_ID" ], # If not provided, default team is used.
use_dedicated_endpoint = True ,
)
chat_completion = client . lora . completions . create (
model = f" { os . environ [ 'ENDPOINT_ID' ] } : { os . environ [ 'ADAPTER_ROUTE' ] } " ,
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
)
بالنسبة لحاوية Friendli، ما عليك سوى توفير اسم المحول.
import os
from friendli import Friendli
client = Friendli ( base_url = "http://0.0.0.0:8000" )
chat_completion = client . lora . completions . create (
model = os . environ [ "ADAPTER_NAME" ],
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
)
مهم
يتم دعم gRPC فقط بواسطة Friendli Container، ولا تتوفر سوى واجهة برمجة التطبيقات المتدفقة v1/completions
.
عند تشغيل حاوية Frienldi في وضع gPRC، يمكن للعميل التفاعل مع خادم gRPC عن طريق تهيئته باستخدام الوسيطة use_grpc=True
.
from friendli import Friendli
client = Friendli ( base_url = "0.0.0.0:8000" , use_grpc = True )
stream = client . chat . completions . create (
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
stream = True , # Only streaming mode is available
)
for chunk in stream :
print ( chunk . choices [ 0 ]. delta . content or "" , end = "" , flush = True )
يستخدم العميل httpx
لإرسال طلبات HTTP. يمكنك توفير httpx.Client
المخصص عند تهيئة Friendli
.
import httpx
from friendli import Friendli
with httpx . Client () as client :
client = Friendli ( http_client = http_client )
بالنسبة للعميل غير المتزامن، يمكنك توفير httpx.AsyncClient
.
import httx
from friendli import AsyncFriendli
with httpx . AsyncClient () as client :
client = AsyncFriendli ( http_client = http_client )
import grpc
from friendli import Friendli
with grpc . insecure_channel ( "0.0.0.0:8000" ) as channel :
client = Friendli ( use_grpc = True , grpc_channel = channel )
يمكنك استخدام نفس الواجهة للعميل غير المتزامن.
import grpc . aio
from friendli import AsyncFriendli
async with grpc . aio . insecure_channel ( "0.0.0.0:8000" ) as channel :
client = AsyncFriendli ( use_grpc = True , grpc_channel = channel )
يوفر عميل Friendli عدة طرق لإدارة الموارد وتحريرها.
يمكن لعملاء Friendli
و AsyncFriendli
الاحتفاظ باتصالات الشبكة أو الموارد الأخرى خلال حياتهم. للتأكد من تحرير هذه الموارد بشكل صحيح، يجب عليك إما استدعاء الأسلوب close()
أو استخدام العميل داخل مدير السياق.
from friendli import Friendli
client = Friendli ()
# Use the client for various operations...
# When done, close the client to release resources
client . close ()
بالنسبة للعميل غير المتزامن، النمط مشابه:
import asyncio
from friendli import AsyncFriendli
client = AsyncFriendli ()
# Use the client for various async operations...
# When done, close the client to release resources
await client . close ()
يمكنك أيضًا استخدام مدير السياق لإغلاق العميل تلقائيًا وتحرير الموارد عند الخروج من الكتلة، مما يجعلها طريقة أكثر أمانًا وملاءمة لإدارة الموارد.
from friendli import Friendli
with Friendli () as client :
...
للاستخدام غير المتزامن:
import asyncio
from friendli import AsyncFriendli
async def main ():
async with AsyncFriendli () as client :
...
asyncio . run ( main ())
عند استخدام الاستجابات المتدفقة، من الضروري إغلاق اتصال HTTP بشكل صحيح بعد اكتمال التفاعل. افتراضيًا، يتم إغلاق الاتصال تلقائيًا بمجرد استهلاك جميع البيانات من الدفق (أي عندما تصل الحلقة إلى النهاية). ومع ذلك، إذا تمت مقاطعة الدفق بسبب استثناءات أو مشكلات أخرى، فقد يظل الاتصال مفتوحًا ولن يتم تحريره حتى يتم تجميع البيانات المهملة. لضمان تحرير جميع الاتصالات والموارد الأساسية بشكل صحيح، من المهم إغلاق الاتصال بشكل صريح، خاصة عند إنهاء الدفق قبل الأوان.
from friendli import Friendli
client = Friendli ()
stream = client . chat . completions . create (
model = "meta-llama-3.1-8b-instruct" ,
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
stream = True ,
)
try :
for chunk in stream :
print ( chunk . choices [ 0 ]. delta . content or "" , end = "" , flush = True )
finally :
stream . close () # Ensure the stream is closed after use
للتدفق غير المتزامن:
import asyncio
from friendli import AsyncFriendli
client = AsyncFriendli ()
async def main ():
stream = await client . chat . completions . create (
model = "meta-llama-3.1-8b-instruct" ,
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
stream = True ,
)
try :
async for chunk in stream :
print ( chunk . choices [ 0 ]. delta . content or "" , end = "" , flush = True )
finally :
await stream . close () # Ensure the stream is closed after use
asyncio . run ( main ())
يمكنك أيضًا استخدام مدير السياق لإغلاق العميل تلقائيًا وتحرير الموارد عند الخروج من الكتلة، مما يجعلها طريقة أكثر أمانًا وملاءمة لإدارة الموارد.
from friendli import Friendli
client = Friendli ()
with client . chat . completions . create (
model = "meta-llama-3.1-8b-instruct" ,
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
stream = True ,
) as stream :
for chunk in stream :
print ( chunk . choices [ 0 ]. delta . content or "" , end = "" , flush = True )
للتدفق غير المتزامن:
import asyncio
from friendli import AsyncFriendli
client = AsyncFriendli ()
async def main ():
async with await client . chat . completions . create (
model = "meta-llama-3.1-8b-instruct" ,
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
stream = True ,
) as stream :
async for chunk in stream :
print ( chunk . choices [ 0 ]. delta . content or "" , end = "" , flush = True )
asyncio . run ( main ())
عند استخدام واجهة gRPC مع الدفق، قد ترغب في إلغاء عملية الدفق المستمرة قبل اكتمالها. يعد هذا مفيدًا بشكل خاص إذا كنت بحاجة إلى إيقاف البث بسبب انتهاء المهلة أو بعض الظروف الأخرى.
لتدفق gRPC المتزامن:
from friendli import Friendli
client = Friendli ( base_url = "0.0.0.0:8000" , use_grpc = True )
stream = client . chat . completions . create (
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
stream = True ,
)
try :
for chunk in stream :
print ( chunk . choices [ 0 ]. delta . content or "" , end = "" , flush = True )
except SomeException :
stream . cancel () # Cancel the stream in case of an error or interruption
لتدفق gRPC غير المتزامن:
import asyncio
from friendli import AsyncFriendli
client = AsyncFriendli ( base_url = "0.0.0.0:8000" , use_grpc = True )
async def main ():
stream = await client . chat . completions . create (
messages = [
{
"role" : "user" ,
"content" : "Tell me how to make a delicious pancake" ,
}
],
stream = True ,
)
try :
async for chunk in stream :
print ( chunk . choices [ 0 ]. delta . content or "" , end = "" , flush = True )
except SomeException :
stream . cancel () # Cancel the stream in case of an error or interruption
asyncio . run ( main ())
يمكنك أيضًا استدعاء إنشاء واجهات برمجة التطبيقات مباشرةً باستخدام واجهة سطر الأوامر (CLI).
friendli api chat-completions create
-g " user Tell me how to make a delicious pancake "
-m meta-llama-3.1-8b-instruct
لمزيد من المعلومات حول الأمر friendli
، قم بتشغيل friendli --help
في shell الطرفي الخاص بك. سيزودك هذا بقائمة مفصلة بالخيارات المتاحة وتعليمات الاستخدام.
نصيحة
تحقق من وثائقنا الرسمية لمعرفة المزيد!