العودة إلى الرئيسية

التخزين المؤقت للاستعلامات مع العوامل العميقة

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

القراءة الصوتية غير متاحة في هذا المتصفح
التخزين المؤقت للاستعلامات مع العوامل العميقة

الوسوم

ملخص سريع

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

التخزين المؤقت للمطالبات مع العوامل العميقة

مقدمة

أصبحت نماذج اللغة الكبيرة (LLMs) أدوات لا غنى عنها للمطورين والمؤسسات، لكن تكلفتها وزمن الاستجابة لا يزالان يشكلان عوائق كبيرة أمام النشر الواسع النطاق. أحد أكثر الحلول الواعدة لهذه التحديات هو **التخزين المؤقت للمطالبات** - وهي تقنية تخزن وتعيد استخدام أجزاء المطالبات المعالجة لتجنب العمليات الحسابية المتكررة. عند دمجها مع بنى العوامل العميقة، حيث يتم تنفيذ خطوات تفكير متعددة أو استدعاءات أدوات بشكل تسلسلي، يمكن للتخزين المؤقت للمطالبات أن يقلل بشكل كبير من زمن الاستجابة وتكاليف واجهة برمجة التطبيقات.

تقدم هذه المقالة دليلاً تقنياً عملياً لتنفيذ التخزين المؤقت للمطالبات مع العوامل العميقة. سنستعرض خطوات التثبيت والتكوين وأمثلة الاستخدام الواقعي، مستفيدين من رؤى قادة الصناعة مثل LangChain وOpenAI وMicrosoft وAnthropic.

ما هو التخزين المؤقت للمطالبات؟

يعمل التخزين المؤقت للمطالبات عن طريق تخزين ذاكرة التخزين المؤقت للمفتاح-قيمة (KV) من المطالبات المعالجة سابقاً. عندما تشارك مطالبة جديدة بادئة مع مطالبة مخزنة مؤقتاً، يعيد النظام استخدام العملية الحسابية المخزنة بدلاً من إعادة معالجة الإدخال بالكامل. هذا مفيد بشكل خاص لـ:

  • مطالبات النظام الطويلة التي تظل ثابتة عبر طلبات متعددة
  • أمثلة القليل من الأمثلة التي يعاد استخدامها لمهام مماثلة
  • حلقات العوامل العميقة حيث يتم تمرير نفس السياق إلى استدعاءات أدوات متعددة

تستفيد العوامل العميقة - الأنظمة المستقلة التي تفكر وتخطط وتنفذ خطوات متعددة - بشكل غير متناسب من التخزين المؤقت لأنها تعالج بشكل متكرر نفس السياق الأساسي (تعليمات النظام، تاريخ المحادثة، تعريفات الأدوات) أثناء توليد تسلسلات إجراءات مختلفة.

المتطلبات

قبل تنفيذ التخزين المؤقت للمطالبات مع العوامل العميقة، تأكد من توفر ما يلي:

  • **Python 3.10 أو أحدث** (يوصى بـ 3.11+ للأداء)
  • **LangChain** (الإصدار 0.3 أو أحدث) لتنسيق العوامل
  • **مزود نموذج لغة كبير يدعم التخزين المؤقت للمطالبات** (مثل OpenAI أو Anthropic أو Microsoft Azure OpenAI)
  • **إطار عمل للعوامل العميقة** (LangGraph أو AgentExecutor من LangChain)
  • **ذاكرة وصول عشوائي 8 جيجابايت على الأقل** (يوصى بـ 16 جيجابايت+ للنماذج الأكبر)

التثبيت خطوة بخطوة

1. إعداد بيئة افتراضية

اعزل تبعياتك لتجنب التعارضات:

python -m venv prompt-cache-env
source prompt-cache-env/bin/activate  # على ويندوز: prompt-cache-env\Scripts\activate

2. تثبيت التبعيات الأساسية

قم بتثبيت LangChain وإطار عمل العوامل:

pip install langchain langchain-openai langchain-anthropic langgraph

لمستخدمي Microsoft Azure OpenAI، قم بتثبيت تكامل Azure:

pip install langchain-azure-openai

3. تكوين مفاتيح API

قم بتعيين مفاتيح API الخاصة بك كمتغيرات بيئة. هذا يحافظ على أمان بيانات الاعتماد خارج الكود الخاص بك:

export OPENAI_API_KEY="your-openai-api-key-here"
export ANTHROPIC_API_KEY="your-anthropic-api-key-here"
export AZURE_OPENAI_API_KEY="your-azure-api-key-here"
export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"

للراحة على ويندوز، استخدم `set` بدلاً من `export`:

set OPENAI_API_KEY="your-openai-api-key-here"

4. تثبيت أدوات المراقبة الاختيارية

لمراقبة سلوك التخزين المؤقت، قم بتثبيت LangSmith للتتبع:

pip install langsmith
export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_API_KEY="your-langsmith-api-key"

تكوين التخزين المؤقت للمطالبات

عادةً ما يتم تمكين التخزين المؤقت للمطالبات على مستوى مزود النموذج. إليك كيفية تكوينه للمزودين الرئيسيين.

OpenAI

يقوم OpenAI تلقائياً بتخزين المطالبات التي يبلغ طولها 1,024 رمزاً أو أكثر. يمكنك تحسين الأداء من خلال هيكلة مطالبة النظام الخاصة بك كبادئة قابلة لإعادة الاستخدام:

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="gpt-4o-mini",
    temperature=0,
    # التخزين المؤقت تلقائي؛ لا حاجة لعلامة خاصة
)

Anthropic

يتطلب Anthropic رؤوس تحكم صريحة في التخزين المؤقت. استخدم معامل `cache_control` في مطالبتك:

from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(
    model="claude-3-5-sonnet-20241022",
    temperature=0,
)

# في مطالبتك، قم بتمييز الأقسام القابلة للتخزين المؤقت:
system_prompt = [
    {
        "type": "text",
        "text": "أنت مساعد مفيد يتمتع بقدرات تفكير عميقة.",
        "cache_control": {"type": "ephemeral"}
    }
]

Microsoft Azure OpenAI

يدعم Azure OpenAI التخزين المؤقت للمطالبات بدءاً من GPT-4o-mini. قم بتمكينه من خلال نشرك:

from langchain_openai import AzureChatOpenAI

llm = AzureChatOpenAI(
    azure_deployment="gpt-4o-mini",
    api_version="2024-08-01-preview",
    temperature=0,
)
# التخزين المؤقت تلقائي للمطالبات التي يبلغ طولها >= 1,024 رمزاً

بناء عامل عميق مع التخزين المؤقت للمطالبات

الآن دعنا ننشئ عاملاً عميقاً يستفيد من التخزين المؤقت. سنبني مساعداً بحثياً يقوم بتحليل متعدد الخطوات.

الخطوة 1: تعريف مطالبة النظام

أنشئ مطالبة نظام طويلة وقابلة لإعادة الاستخدام سيتم تخزينها مؤقتاً:

system_prompt = """
أنت مساعد بحث متخصص في تحليل المستندات التقنية.
قدراتك:
- تلخيص النصوص الطويلة
- استخراج النتائج الرئيسية
- مقارنة المصادر وتباينها
- تحديد الثغرات في الحجج
- اقتراح قراءات إضافية

قم دائمًا بالرد بتنسيق منظم:
1. النتائج الرئيسية
2. الأدلة
3. الاستنتاجات

كن دقيقاً واذكر أمثلة محددة من النص.
"""

الخطوة 2: إنشاء العامل مع التخزين المؤقت

استخدم عنصر التحكم في التخزين المؤقت من Anthropic للتخزين المؤقت الصريح:

from langchain.agents import create_openai_functions_agent
from langchain.tools import tool
from langchain_anthropic import ChatAnthropic
from langgraph.graph import StateGraph, MessagesState

@tool
def search_database(query: str) -> str:
    """ابحث في قاعدة البيانات الداخلية عن المستندات ذات الصلة."""
    # بحث محاكى
    return f"نتائج لـ '{query}': تم العثور على 3 مستندات ذات صلة."

@tool
def extract_insights(text: str) -> str:
    """استخرج الرؤى الرئيسية من نص معين."""
    return f"الرؤى الرئيسية: {text[:100]}..."

llm = ChatAnthropic(
    model="claude-3-5-sonnet-20241022",
    temperature=0,
)

# إنشاء العامل مع التحكم في التخزين المؤقت
prompt = system_prompt + "\n\nاستعلام المستخدم: {input}\n\nتاريخ المحادثة: {chat_history}"

tools = [search_database, extract_insights]

# تغليف المطالبة مع التحكم في التخزين المؤقت
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt_template = ChatPromptTemplate.from_messages([
    ("system", system_prompt, {"cache_control": {"type": "ephemeral"}}),
    MessagesPlaceholder(variable_name="chat_history"),
    ("human", "{input}"),
])

agent = create_openai_functions_agent(llm, tools, prompt_template)

الخطوة 3: إضافة رسم بياني للتفكير العميق

استخدم LangGraph لإنشاء عامل متعدد الخطوات يعيد استخدام مطالبة النظام المخزنة مؤقتاً:

from langgraph.graph import StateGraph, END
from typing import TypedDict, List, Annotated
import operator

class AgentState(TypedDict):
    messages: Annotated[List, operator.add]
    step_count: int

def call_model(state: AgentState):
    # مطالبة النظام مخزنة مؤقتاً، لذا فإن الاستدعاءات المتكررة سريعة
    response = agent.invoke({
        "input": state["messages"][-1].content,
        "chat_history": state["messages"][:-1]
    })
    return {"messages": [response], "step_count": state["step_count"] + 1}

def should_continue(state: AgentState):
    # توقف بعد 5 خطوات أو إذا قرر العامل الانتهاء
    if state["step_count"] >= 5:
        return "end"
    return "continue"

# بناء الرسم البياني
graph = StateGraph(AgentState)
graph.add_node("agent", call_model)
graph.add_conditional_edges(
    "agent",
    should_continue,
    {"continue": "agent", "end": END}
)
graph.set_entry_point("agent")

app = graph.compile()

أمثلة الاستخدام

مثال 1: عامل أساسي مع تخزين مؤقت

قم بتشغيل استعلام يستفيد من مطالبة النظام المخزنة مؤقتاً:

# الطلب الأول (يتم تخزين مطالبة النظام مؤقتاً)
result = app.invoke({
    "messages": [{"role": "user", "content": "لخص النتائج الرئيسية من تقرير الربع الثالث."}],
    "step_count": 0
})
print("الاستجابة الأولى:", result["messages"][-1].content)

# الطلب الثاني (إصابة ذاكرة التخزين المؤقت - أسرع بكثير)
result2 = app.invoke({
    "messages": [{"role": "user", "content": "قارن تلك النتائج مع الربع الثاني."}],
    "step_count": 0
})
print("الاستجابة الثانية:", result2["messages"][-1].content)

مثال 2: مراقبة أداء التخزين المؤقت

استخدم LangSmith لمراقبة إصابات ذاكرة التخزين المؤقت وتحسينات زمن الاستجابة:

import time

# تمكين التتبع المفصل
from langsmith import Client
client = Client()

# تشغيل استعلامات متعددة وقياس
for i in range(3):
    start = time.time()
    result = app.invoke({
        "messages": [{"role": "user", "content": f"حلل مجموعة المستندات {i+1}."}],
        "step_count": 0
    })
    elapsed = time.time() - start
    print(f"الاستعلام {i+1}: {elapsed:.2f}ث")

مثال 3: تحسين أقصى إصابات ذاكرة التخزين المؤقت

قم بهيكلة مطالباتك لتعظيم إعادة استخدام ذاكرة التخزين المؤقت:

# استخدم دائمًا نفس بادئة مطالبة النظام
cached_prefix = """
أنت مساعد بحث.
أدوارك:
- التلخيص
- الاستخراج
- المقارنة

"""

# قم بتغيير رسالة المستخدم فقط
queries = [
    "لخص تقرير الربع الأول.",
    "استخرج المقاييس الرئيسية من الربع الأول.",
    "قارن اتجاهات الربع الأول والثاني."
]

for query in queries:
    response = agent.invoke({
        "input": query,
        "chat_history": []
    })
    print(f"الاستعلام: {query}")
    print(f"الاستجابة: {response.content[:50]}...")
    print("---")

أفضل الممارسات

1. **صمم مطالبات نظام طويلة ومستقرة**: يعمل التخزين المؤقت بشكل أفضل عندما تظل بادئة المطالبة دون تغيير عبر الطلبات. حافظ على ثبات تعليمات النظام وتعريفات الأدوات.

2. **استخدم إصدارات النماذج المناسبة**: يقدم GPT-4o-mini من OpenAI وClaude 3.5 Sonnet من Anthropic أفضل أداء للتخزين المؤقت. تحقق من وثائق المزود للحصول على أحدث النماذج المدعومة.

3. **راقب معدلات إصابة ذاكرة التخزين المؤقت**: استخدم LangSmith أو لوحات معلومات المزود لتتبع عدد مرات إصابة مطالباتك لذاكرة التخزين المؤقت. استهدف معدل إصابة >50% لتحقيق توفير كبير في التكاليف.

4. **فكر في المعالجة المجمعة**: عند معالجة استعلامات متشابهة، قم بهيكلتها لمشاركة البادئات الشائعة. هذا يزيد من إعادة استخدام ذاكرة التخزين المؤقت عبر الطلبات.

5. **اختبر بأعباء عمل واقعية**: يعتمد أداء التخزين المؤقت على طول المطالبة والتكرار. قم بإجراء اختبار مرجعي مع حالة الاستخدام الفعلية قبل النشر في الإنتاج.

الخلاصة

يعد التخزين المؤقت للمطالبات تقنية قوية تقلل بشكل كبير من تكلفة وزمن استجابة أنظمة العوامل العميقة. من خلال تخزين وإعادة استخدام أجزاء المطالبات المعالجة، يمكنك تحقيق زمن استجابة أسرع بمقدار 2-5 مرات مع خفض تكاليف واجهة برمجة التطبيقات بنسبة 30-60%. المفتاح هو تصميم مطالبات العامل الخاصة بك مع وضع التخزين المؤقت في الاعتبار - استخدم مطالبات نظام طويلة ومستقرة، واستفد من ميزات التخزين المؤقت الخاصة بالمزود، وراقب الأداء باستخدام أدوات مثل LangSmith.

مع استمرار مزودي نماذج اللغة الكبيرة في تحسين البنية التحتية للتخزين المؤقت (التخزين المؤقت التلقائي من OpenAI، والتحكم الصريح في التخزين المؤقت من Anthropic، وتكامل Microsoft Azure)، ستصبح العوامل العميقة أكثر عملية واقتصادية. ابدأ في تنفيذ التخزين المؤقت للمطالبات اليوم لفتح تطبيقات ذكاء اصطناعي أسرع وأرخص وأكثر قابلية للتوسع.

*للحصول على أحدث التحديثات حول تقنيات التخزين المؤقت للمطالبات، راجع المدونات الرسمية لـ LangChain وOpenAI وMicrosoft وAnthropic.*

المصادر

أسئلة شائعة

عن ماذا يتحدث هذا المقال؟

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

لمن يفيد هذا المقال؟

يفيد القراء المهتمين بفهم أدوات وتقنيات الذكاء الاصطناعي بطريقة عملية وواضحة.

ما الخطوة التالية؟

اقرأ المقال كاملاً، راجع المصادر المرفقة، ثم جرّب الأفكار المناسبة لاحتياجك بحذر.