AR ▾
stableaudio.top

واجهة برمجة تطبيقات للنصوص بدون رقابة لمسار عمل الصوت الخاص بك

احصل على مفتاح API

LangChain وLangGraph بدون مفتاح API

لا يمكنك تشغيل نموذج مستضاف بدون مفتاح على الإطلاق، لكن يمكنك تشغيل LangChain وLangGraph بدون دفع أولاً. مفتاح تجربة بنقرة واحدة وتغيير نقطة النهاية كافيان.

رسم بياني عقدية متماثل مع مكعبات متصلة متوهجة تمثل سير عمل وكيل LangGraph

تم التحديث

نقاط رئيسية

  1. تحتاج كل نقطة نهاية مستضافة إلى مفتاح؛ مفتاح التجربة لا يحتاج إلى بطاقة ويتم الحصول عليه بنقرة واحدة.

  2. تعمل فئة ChatOpenAI في LangChain بمجرد ضبط base_url وmodel على uncensored.

  3. تعمل وكلاء LangGraph مع استدعاء الدوال كما هي، لكن يجب أن تحترم الفروع المتفرعة حدّ التوازي.

  4. تكلفة تشغيل وكيل نموذجي يتكون من ست طلبات حوالي $0.0039، لذا يغطي رصيد التجربة بقيمة $0.50 حوالي 128 من هذه التشغيلات.

ما يمكن أن تعنيه "بدون مفتاح API" بشكل واقعي

البحث عن langchain وlangraph بدون مفتاح api يعني عادةً أحد ثلاثة أشياء. قد ترغب في تجنب الدفع قبل معرفة أن النظام يعمل. قد لا ترغب في إعطاء بطاقة ائتمان لمورد آخر. أو قد تأمل في تشغيل رسم بياني للوكلاء بدون أي بيانات اعتماد على الإطلاق.

لا يمكن تحقيق الرغبة الثالثة بأي خدمة مستضافة: يجب أن يعرف الخادم الذي يؤدي العمل من الذي يستدعيه. ما يمكنك الحصول عليه هو مفتاح لا يكلف شيئًا ولا يطلب بطاقة. يمكن للمستخدمين الجدد في هذا الموقع المطالبة برصيد تجريبي مجاني بقيمة $0.50 بنقرة واحدة على صفحة مفتاح API بعد تسجيل الدخول باستخدام Google أو عبر البريد الإلكتروني وكلمة المرور. هذا واحد لكل شخص صالح لمدة 7 أيام.

المسار الآخر إلى "بدون مفتاح" هو نموذج محلي تديره خدمة على جهازك الخاص. هذا يعمل، لكنك تتحمل عبء الأجهزة، ولن يتطابق جهاز الكمبيوتر المحمول مع نقطة نهاية مستضافة لعمليات تشغيل الوكيل الطويلة. تجربة الاستضافة هي الطريقة الأسرع لمعرفة ما إذا كان منطق الرسم البياني سليمًا، والكود الذي تكتبه مطابق تماماً لما ستشغله لاحقاً بمفتاح ممول.

نظرًا لأن نقطة النهاية متوافقة مع OpenAI، فإن LangChain لا يحتاج إلى تكامل خاص. تشير فئته ChatOpenAI إلى عنوان URL أساسي مختلف، تعطيه المفتاح، وتحدد اسم النموذج uncensored. يفترض كل ما يلي هذا الإعداد.

الخطوة 1: احصل على مفتاح التجربة واضبط البيئة

سجّل الدخول، افتح صفحة المفتاح واضغط على زر التجربة. انسخ المفتاح واحتفظ به خارج مستودعك. ضع المفتاح في متغير بيئة بحيث يعمل نفس السكربت بمفتاح تجريبي اليوم ومفتاح كامل لاحقًا.

export UNCENSORED_API_KEY="paste-your-key-here"
pip install -U langchain-openai langgraph langchain-core

قبل إشراك أي إطار عمل، تحقق من صحة المفتاح بطلب بسيط. دقيقتان هنا توفران ساعة من قراءة تتبعات المكدس التي هي في الواقع أخطاء مصادقة.

curl https://api.stableaudio.top/v1/chat/completions \
  -H "Authorization: Bearer $UNCENSORED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"uncensored","messages":[{"role":"user","content":"Reply with one word: ready"}]}'

مكالمة GET /v1/models هي فحص سريع آخر؛ يجب أن تسرد uncensored. يسمح مفتاح التجربة بـ 2 طلب متزامن و 60 طلب في الدقيقة، وهو الكثير لتطوير الرسم البياني لكنه يستحق التذكر عند إضافة عقد متوازية.

الخطوة 2: وجّه LangChain إلى نقطة النهاية

الفئة التي يجب استخدامها هي ChatOpenAI من langchain-openai. وسيطان يؤديان العمل: base_url و api_key. اسم النموذج هو uncensored، وتنتقل إعدادات أخذ العينات المعتادة.

import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="uncensored",
    base_url="https://api.stableaudio.top/v1",
    api_key=os.environ["UNCENSORED_API_KEY"],
    temperature=0.7,
    max_retries=3,
)

print(llm.invoke("Give me three titles for an ambient track about rain.").content)

إذا طبع هذا النص، فإن الاتصال جيد. يعمل البث المتدفق بنفس الطريقة: قم بالتكرار عبر llm.stream(...) وتصل القطع عبر أحداث الإرسال من الخادم، مع الإبلاغ عن الاستخدام في نهاية البث.

خطأ شائع هو ترك متغير OPENAI_API_KEY مضبوطًا من مشروع قديم. سترسل LangChain هذه القيمة إلى عنوان URL الأساسي المخصص الخاص بك إذا نسيت تمرير api_key. مرر المفتاح صراحةً لإزالة التخمين.

الخطوة 3: رسم بياني بسيط لـ LangGraph

يُمثّل LangGraph الوكيل الخاص بك كحالة تتحرك بين العقد. الرسم البياني المفيد الأصغر يحتوي على عقدة واحدة تستدعي النموذج وتضيف الرد إلى قائمة الرسائل. يوفر لك MessagesState هذه القائمة مجانًا.

from langgraph.graph import StateGraph, MessagesState, START, END

def call_model(state: MessagesState):
    reply = llm.invoke(state["messages"])
    return {"messages": [reply]}

builder = StateGraph(MessagesState)
builder.add_node("model", call_model)
builder.add_edge(START, "model")
builder.add_edge("model", END)
graph = builder.compile()

out = graph.invoke({"messages": [("user", "Outline a three-act short story about a lighthouse keeper.")]})
print(out["messages"][-1].content)

هذا مقصود به أن يكون بسيطًا. النقطة هي أنه لا يعرف شيء في LangGraph ولا يهتم بمزود الذي يقف خلف llm. يمكن لأي عقدة أن تأخذ كائن نموذج مختلف، لذا يمكنك لاحقًا إعطاء خطوة تخطيط رخيصة وخطوة كتابة أطول إعداداتها الخاصة، مثل درجة حرارة أقل للتخطيط.

الخطوة 4: أضف الأدوات والحلقة

تثير الوكلاء الاهتمام عندما يتمكن النموذج من استدعاء الدوال. تدعم نقطة النهاية استدعاء الأدوات مع tools وtool_choice، وتعود نتائج الأدوات كرسائل role: "tool". تتعامل LangChain وLangGraph مع البنية التحتية لذلك نيابةً عنك.

from langchain_core.tools import tool
from langgraph.prebuilt import ToolNode, tools_condition

@tool
def word_count(text: str) -> int:
    'Count the words in a piece of text.'
    return len(text.split())

tools = [word_count]
llm_with_tools = llm.bind_tools(tools)

def agent(state: MessagesState):
    return {"messages": [llm_with_tools.invoke(state["messages"])]}

builder = StateGraph(MessagesState)
builder.add_node("agent", agent)
builder.add_node("tools", ToolNode(tools))
builder.add_edge(START, "agent")
builder.add_conditional_edges("agent", tools_condition)
builder.add_edge("tools", "agent")
graph = builder.compile()

result = graph.invoke({"messages": [("user", "Write a 40-word product blurb, then check its word count with the tool.")]})
print(result["messages"][-1].content)

الحلقة هي الفكرة بأكملها: تجيب عقدة الوكيل، يتحقق tools_condition مما إذا كان الرد قد طلب أداة، وتشغل عقدة الأداة ذلك، ويعود التحكم إلى الوكيل. عندما لا يحتوي الرد على استدعاء أداة، ينتهي الرسم البياني.

تختلف النماذج مفتوحة الأوزان في مدى دقة حجج الأدوات الخاصة بها. إذا عاد استدعاء مشوهًا، قم بتضييق وصف الأداة، وخفض درجة الحرارة، واجعل مخطط الوسيط صغيرًا. تفشل المخططات القصيرة والمحددة النوعية أقل من تلك الطويلة التي تحتوي على العديد من الحقول الاختيارية.

حدود المعدل، إعادة المحاولة، والفروع المتوازية

المكان الذي تعثر فيه الرسوم البيانية للوكلاء غالبًا هو التوازي. يسمح المفتاح الكامل بـ 8 طلبات متزامنة و300 طلب في الدقيقة؛ يسمح مفتاح التجربة بـ 2 و60. إذا كان الرسم البياني الخاص بك يتفرع إلى خمسة عقد متوازية على مفتاح تجربة، سيتم رفض ثلاثة منها بـ HTTP 429 ورمز الخطأ concurrency. تجاوز ميزانية الدقيقة يعيد rate_limited. يعطي الحمل الزائد المؤقت أيضًا 429، مع رأس Retry-After: 5.

ثلاث عادات تجعل هذا قابلاً للإدارة:

  • احتفظ بـ max_retries عند 2 أو 3 على ChatOpenAI حتى تتم إعادة محاولة أخطاء 429 القصيرة مع تأخير.
  • حدّ التفرع عند حدّ التوازي الخاص بك. في LangGraph يمكنك تمرير config={"max_concurrency": 2} عند استدعاء الرسم البياني.
  • تذكر أن الطلب المتدفق يحتفظ بمكانه حتى ينتهي البث، لذا فإن المستهلك البطيء يُبقي الفتحة مشغولة.
out = graph.invoke(
    {"messages": [("user", "Draft five taglines in parallel.")]},
    config={"max_concurrency": 2},
)

تساعد رؤوس الاستجابة في تصحيح الأخطاء. يحدد X-Request-Id استدعاءً إذا احتجت إلى طلب الدعم حوله، ويظهر X-Balance-USD رصيدك المتبقي بعد كل طلب.

قائمة مراجعة التصحيح عندما يتصرف الرسم البياني بشكل خاطئ

معظم الفشل في مشروع LangGraph الأول لا يتعلق بالنموذج. تأتي من الإعدادات، وقائمة تحقق قصيرة تلتقط معظمها.

  1. 401 أو أخطاء المصادقة. المفتاح مفقود، أو مُخطئ فيه، أو يتم قراءة OPENAI_API_KEY القديم بدلاً منه. اطبع أول أربعة أحرف من القيمة التي يستخدمها السكربت فعليًا.
  2. 404 أو نموذج غير موجود. يجب أن يكون اسم النموذج uncensored. أرسل طلب GET إلى /v1/models إذا كنت غير متأكد مما تدرجه نقطة النهاية.
  3. أخطاء الاتصال. يجب أن ينتهي عنوان URL الأساسي بـ /v1 ولا يجب أن يتضمن /chat/completions؛ العميل يضيف هذا الجزء.
  4. حلقات لا نهائية. إذا استمر الوكيل في استدعاء أداة، فقد لا تجيب قيمة الإرجاع عن السؤال. أعد نصوصًا بسيطة وقصيرة وحدّ حدّ التكرار عبر تكوين الرسم البياني حتى تتوقف الحلقة السيئة مبكرًا.
  5. ردود فارغة أو غريبة. اطبع قائمة الرسائل الكاملة بعد تشغيل. غالبًا ما كتبت عقدة سابقة رسالة نظام تتعارض مع الرسالة اللاحقة.

عند فشل الطلب من جانب الخادم، اقتبس رأس X-Request-Id في رسالتك إلى support. يتيح لهم العثور على ذلك الاستدعاء الدقيق دون تخمين. تذكر أيضًا أن الطلبات الفاشلة أو المرفوضة لا تُحمَل تكاليفها، لذا فإن جلسة تصحيح الأخطاء المليئة بالأخطاء لا تستهلك رصيدك التجريبي.

نقطة تصميم أخرى. كلّف كل عقدة بمهمة ضيقة وموجّه قصير. الرسم البياني الذي يتكوّن من مخطِّط وكاتب وراجع، لكلٍّ منها رسالة نظام صغيرة، أسهل في الاختبار من عقدة واحدة تحتوي على صفحة من التعليمات، ويمكن تجربة كل جزء بمفرده عبر استدعاء llm.invoke مباشر قبل ربطه.

ما يكلفه التشغيل التجريبي فعلياً

التسعير هو $0.15 لكل مليون رمز إدخال و$0.50 لكل مليون رمز ناتج، من رصيد مسبق الدفع. الطلبات الفاشلة أو المرفوضة لا تُحسب. تستدعي الرسوم البيانية للوكلاء النموذج عدة مرات لكل مهمة، وكل استدعاء يعيد إرسال قائمة الرسائل المتزايدة، لذا تهيمن رموز الإدخال.

خذ تشغيلاً بست استدعاءات للنموذج. لنفترض أن كل استدعاء يرسل 3,000 رمز مدخل ويعيد 400 رمز مخرج. هذا يعني 18,000 رمز مدخل و2,400 رمز مخرج.

  • مدخل: 18,000 / 1,000,000 × $0.15 = $0.0027
  • مخرج: 2,400 / 1,000,000 × $0.50 = $0.0012
  • المجموع: $0.0039 لكل تشغيل

يُقسّم رصيد التجربة البالغ $0.50 على $0.0039 ليُنتج حوالي 128 تشغيلًا بهذا الحجم، وهو ما يكفي لبناء واختبار رسم بياني بشكل صحيح. عندما تحتاج إلى المزيد، يمكن شحن الرصيد بمبالغ كاملة تتراوح بين $20 و$500، مع مكافأة بنسبة 5% من $50، و10% من $100، و15% من $200؛ تحتوي صفحة التسعير على التفاصيل. يمكنك الدفع بالبطاقة (Visa، Mastercard، Apple Pay، Google Pay) أو بالعملات المشفرة (USDT على TRC20، USDC على Base). لا تنتهي صلاحية الرصيد، ولا تُستخدم الموجّهات في التدريب.

نافذة السياق هي 100,000 رمز للموجّه بالإضافة إلى الإكمال، لذا فإن سجلات الوكلاء الطويلة تتسع، لكنك تدفع عن كل رمز تعيد إرساله. يساعد تقليل الرسائل القديمة باستخدام أدوات الرسائل في LangGraph على خفض التكلفة وزمن الاستجابة. بالنسبة لتنسيق الطلب الخام الكامن وراء كل هذا، انظر إلى وثائق API.

أسئلة وأجوبة

هل يمكنني استخدام LangChain أو LangGraph بدون مفتاح API على الإطلاق؟

لا مع نموذج مستضاف. يجب على الخادم تحديد المتصل. يمكنك الحصول على مفتاح تجريبي مجاني بنقرة واحدة، دون الحاجة إلى بطاقة، أو تشغيل نموذج محلي بنفسك.

أي فئة LangChain يجب أن أستخدم؟

ChatOpenAI من langchain-openai. اضبط base_url لتكون نقطة النهاية، مرر المفتاح كـ api_key واستخدم اسم النموذج uncensored.

هل يعمل استدعاء الأدوات داخل وكلاء LangGraph؟

نعم. تدعم نقطة النهاية الأدوات، tool_choice ونتائج الأدوات ذات الدور tool، لذا تعمل bind_tools و ToolNode و tools_condition كما في الأمثلة أعلاه.

لماذا أحصل على أخطاء 429 عندما يشغّل الرسم البياني فروعًا بالتوازي؟

لقد تجاوزت حدّ التزامن، وهو 2 لمفتاح التجربة و 8 للمفتاح الكامل. حدّ max_concurrency في تكوين الرسم البياني واحتفظ بإعادة المحاولة مفعّلة.

هل رصيد التجربة كافٍ لاختبار وكيل؟

عادةً. بتكلفة حوالي $0.0039 لتشغيل يتضمن ست طلبات بحجم معتدل، يغطي $0.50 أكثر من مائة تشغيل ضمن صلاحية مدتها 7 أيام.

مفتاحك على بُعد خطوة واحدة

أنشئ حساباً، وانسخ المفتاح، ثم غيّر URL الأساسي. هذه هي الإعدادات الكاملة.

احصل على مفتاح API