هوش مصنوعی عاملمحور در حال تغییر نحوه تفکر و پیادهسازی کشینگ است. کشینگ سنتی صرفاً داراییها یا درخواستها را برای کاهش تأخیر و بهبود کارایی ذخیره میکند. هوش مصنوعی عاملمحور بازی را در برخی جنبههای مهم تغییر میدهد. باید متفاوت فکر کنید وقتی هر فراخوانی ممکن است هزینه داشته باشد و هر دارایی باید قابل یافتن باشد، و آن هم سریع.
اینها فقط چند مثال از چگونگی تغییر کشینگ توسط عاملهای هوش مصنوعی هستند. در این مقاله، برخی استراتژیهای کشینگ دیگر برای عاملهای هوش مصنوعی به شما نشان خواهیم داد تا اطمینان حاصل کنیم محصولات شما در عصر عاملمحور رقابتی و کارآمد باقی میمانند!
کشینگ معنایی
کشینگ معنایی یکی از مهمترین تغییرات در نحوه تفکر و پیادهسازی کشینگ در APIهاست. به طور سنتی، کشینگ بر تطابق دقیق تکیه دارد و داراییهای خاص را با یک شناسه منحصر به فرد مانند کلید جفت میکند. کشینگ معنایی زمینه و معنای بالقوه را در نظر میگیرد، از سوی دیگر، سرنخهای ضروری ارائه میدهد تا یک عامل هوش مصنوعی بداند کدام یک درست است.
تصور کنید کسی از یک دستیار هوش مصنوعی میپرسد: «چگونه میتوانم رمز عبورم را بازیابی کنم؟» یا «نمیتوانم وارد حسابم شوم.» هر دو اساساً به یک چیز اشاره دارند، اما بیان آن در کد دشوار است. کشینگ معنایی از جاسازیها استفاده میکند، که نمایههای برداری متن هستند. این به سیستمهای کشینگ معنایی اجازه میدهد داراییهایی را که مشابه یک درخواست خاص هستند برگردانند اگر تطابق دقیق پیدا نشود.
برای تنظیم صحیح کشینگ معنایی، مهم است که آستانه برای پاسخهای مناسب را به درستی پیکربندی کنید. اگر آن را بیش از حد سختگیرانه کنید، پاسخهای مناسب را از دست خواهید داد. اگر بیش از حد گسترده کنید، خطر بازگشت پاسخهای نامناسب را دارید.
بهینهسازی برای هزینه و عملکرد
هوش مصنوعی عاملمحور معمولاً یک درخواست میفرستد یا یک عمل را با استفاده از یک LLM پیادهسازی میکند. در حال حاضر، اکثر LLMها نوعی هزینه در هر فراخوانی دارند، حتی اگر فقط استفاده از برخی اعتبارهای حساب شما باشد. ایده خوبی است که درخواستها و داراییها را در صورت امکان کش کنید. در غیر این صورت، محصول یا سرویس شما میتواند بسیار گران شود، خیلی سریع.
پیکربندی صحیح تنظیمات زمان حیات (TTL) راه خوبی برای تعادل تازگی داده، سرعت و بودجه است. یک اپلیکیشن خبری ممکن است هر ۲۴ ساعت یکبار تازه شود، برای مثال. یک اپلیکیشن تجارت الکترونیک ممکن است همان پایگاه داده قیمت را تا زمانی که آستانه خاصی عبور کند نگه دارد، به عنوان مثال دیگر.
کشینگ لایهای نیز میتواند برای بهبود هم هزینه و هم سرعت تنظیم شود. دادههای پراستفاده ممکن است در ذخیرهسازی در حافظه برای بازیابی بسیار سریع ذخیره شوند. دادههای کمتر ضروری ممکن است در ذخیرهسازی کندتر که هزینه کمتری دارد ذخیره شوند. این مثالی از چگونگی کمک کشینگ به تعادل هم عملکرد و هم مقرون به صرفه بودن است.
انواع کشینگ
انواع مختلف هوش مصنوعی عاملمحور نیاز به انواع مختلف کشینگ دارند. کشینگ پاسخ رایجترین و سادهترین است. در کشینگ پاسخ، پاسخ یک LLM ذخیره میشود تا بتوان آن را دوباره استفاده کرد. این رویکرد خوبی برای پرسوجوها در پایگاههای دانش نسبتاً ایستا مانند FAQهاست.
کشینگ پاسخ وقتی بهترین کار را میکند که با کشینگ معنایی جفت شود، زیرا اجازه میدهد پاسخهای درست حتی وقتی سؤالات متفاوت هستند برگردانده شوند. همچنین میتوانید نوعی نسخهبندی را پیادهسازی کنید تا دادهها را بر اساس تازگی ذخیره کنید، برنامه خود را کارآمد نگه دارید در حالی که تا حد ممکن کامل باقی میماند.
تاکنون چند بار درباره جاسازیها صحبت کردهایم. تولید جاسازی برای هر پرسوجو میتواند به طور ممنوعهای کند و گران باشد. کشینگ جاسازی به حذف برخی از این بار با کش کردن جاسازیهای برداری برای ورودیهای شناختهشده کمک میکند. ممکن است یک موتور توصیه محصول بسازید، برای مثال. تنها نقطه ضعف این رویکرد این است که توصیه محصول با گذشت زمان بهبود مییابد. این میتواند نوعی رانش نسخه در طول زمان ایجاد کند، بنابراین میخواهید جاسازیهای برداری را به طور دورهای بازتولید کنید تا مطمئن شوید جاسازیها مرتبط و دقیق باقی میمانند.
بسیاری از عاملهای هوش مصنوعی شامل چندین مؤلفه هستند. کشینگ سطح جریان کاری نوعی کشینگ است که داراییهای بازگشتی از هر مؤلفه را ذخیره میکند. به یک اپلیکیشن سفر فکر کنید، برای مثال. اپلیکیشن ممکن است ارزانترین قیمت برای پرواز از یک مقصد به مقصد دیگر را برگرداند. این میتواند شامل بازگشت اطلاعات درباره مسیرها، دادههای پرواز، قیمتگذاری و بیشتر باشد. یک راهحل کشینگ سطح جریان کاری میتواند منابع از هر مؤلفه را کش کند، آنها را سریعتر، آسانتر و ارزانتر برای بازیابی کند.
مثال کشینگ برای عاملهای هوش مصنوعی
بیایید این مقاله را با یک مثال به پایان برسانیم تا ببینید این اصول در عمل چگونه هستند. یک اپلیکیشن سفر سریع میسازیم تا به شما نشان دهیم کشینگ چگونه اپلیکیشن شما را کارآمدتر میکند. برای شروع، باید با AviationStack ثبتنام کنید تا یک کلید API دریافت کنید، که از آن برای بازیابی دادههای پرواز واقعیزمان استفاده خواهیم کرد.
سپس، یک پوشه برای اپلیکیشن خود در دایرکتوری برنامهنویسی خود ایجاد کنید. ما مال خود را TravelApp نامگذاری کردهایم، اما آزاد هستید نام دلخواه خود را بگذارید. وقتی پوشه جدید را ایجاد کردید، داخل آن بروید و یک فایل خالی بسازید و آن را TravelApp.py نامگذاری کنید.
سپس، کتابخانههایی که برای اپلیکیشن نیاز دارید را نصب خواهید کرد. دستور زیر را از طریق ترمینال اجرا کنید:
pip install requests sentence-transformers transformers torchsentence-transformers به شما اجازه میدهد جاسازیهای جمله را پیادهسازی کنید، که برای کشینگ معنایی استفاده خواهیم کرد. Transformers و Torch کتابخانههای یادگیری ماشین هستند که برای ایجاد و آموزش مدل اپلیکیشن شما استفاده خواهند شد.
حالا باید متغیر محیطی را برای کلید API خود تنظیم کنید تا بتوانیم AviationStack را فراخوانی کنیم. در ویندوز، PowerShell را باز کنید و دستور زیر را اجرا کنید:
$env:AIRSCRAPER_API_KEY="your_key_here"
حالا واقعاً شروع به ساخت اپلیکیشن میکنیم. ابتدا کتابخانههایی که نیاز دارید را در اسکریپت Python TravelApp.py خود نصب کنید.
import os
import json
import requests
import numpy as np
from hashlib import sha256
from sentence_transformers import SentenceTransformer, util
from transformers import pipeline
import random
همچنین میخواهید مدلهایی که برای جاسازیها استفاده میکنید را بارگذاری کنید:
embedding_model = SentenceTransformer("all-MiniLM-L6-v2")
generator = pipeline("text2text-generation", model="google/flan-t5-base")
حالا متغیرهایی که برای کشینگ استفاده خواهید کرد را ایجاد میکنید:
embedding_cache = {}
response_cache = {}
workflow_cache = {}
semantic_cache = []
حالا موتور جستجوی معنایی را پالایش میکنید و کشینگ معنایی را فعال میکنید. کد زیر را وارد کنید:
def search_semantic_cache(query, threshold=0.85):
query_emb = get_query_embedding(query)
best_score = 0
best_response = None
for item in semantic_cache:
score = util.cos_sim(query_emb, item['embedding'])[0][0].item()
if score > threshold and score > best_score:
best_score = score
best_response = item['response']
return best_response
این به اپلیکیشن سفر شما اجازه میدهد پرسوجوهای زبان طبیعی را به یک نمایه عددی برداری با استفاده از مدل SentenceTransformer «all-MiniLM-L6-v2» تبدیل کند. این به مدل اجازه میدهد زمینه را از پرسوجو استنباط کند به جای صرفاً جستجوی تطابقهای دقیق. وقتی ایجاد شد، برداری میتواند با پرسوجوهای قبلی مقایسه شود. اگر آستانه حدود ۰.۹ یا بالاتر باشد، پاسخی از قبل وجود دارد، بنابراین مدل میداند نیازی به فراخوانی اضافی ندارد.
حالا کد را برای فراخوانی API Aviationstack مینویسید:
def get_flight_data(dep_iata, arr_iata):
params = {
"access_key": AVIATIONSTACK_KEY,
"dep_iata": dep_iata,
"arr_iata": arr_iata
}
r = requests.get(BASE_URL, params=params)
if r.status_code == 200:
return r.json()
else:
return {"error": "Failed to fetch flight data"}
در نهایت، با بدنه کد به پایان میرسانید، که حالا قادر به استفاده از جستجوی معنایی و کشینگ است.
def plan_trip(query, dep_iata, arr_iata):
# Check semantic cache
cached = search_semantic_cache(query)
if cached:
print("[CACHE HIT] Semantic match found.")
return cached
# Otherwise fetch new data
data = get_flight_data(dep_iata, arr_iata)
response = json.dumps(data, indent=2)
# Cache the embedding and response
semantic_cache.append({
"query": query,
"embedding": get_query_embedding(query),
"response": response
})
return response
if __name__ == "__main__":
query = "Find flights from New York to Los Angeles"
result = plan_trip(query, "JFK", "LAX")
print(result)
کد نهایی شما باید اینگونه باشد:
def plan_trip(query, dep_iata, arr_iata):
# Check semantic cache
cached = search_semantic_cache(query)
if cached:
print("[CACHE HIT] Semantic match found.")
return cached
# Otherwise fetch new data
data = get_flight_data(dep_iata, arr_iata)
response = json.dumps(data, indent=2)
# Cache the embedding and response
semantic_cache.append({
"query": query,
"embedding": get_query_embedding(query),
"response": response
})
return response
if __name__ == "__main__":
query = "Find flights from New York to Los Angeles"
result = plan_trip(query, "JFK", "LAX")
print(result)
اجرای آن اسکریپت باید نتیجهای مشابه موارد زیر برگرداند:
"flight_date": "2025-07-27",
"flight_status": "active",
"departure": {
"airport": "John F Kennedy International",
"timezone": "America/New_York",
"iata": "JFK",
"icao": "KJFK",
"terminal": "8",
"gate": "4",
"delay": 19,
"scheduled": "2025-07-27T06:00:00+00:00",
"estimated": "2025-07-27T06:00:00+00:00",
"actual": null,
"estimated_runway": null,
"actual_runway": null
اگر یک الحاقیه به انتهای اسکریپت با یک پرسوجوی اضافی اضافه کنید، میتوانید کشینگ معنایی را در عمل ببینید:
if __name__ == "__main__":
# First search (populates cache)
query1 = "Find flights from New York to Los Angeles"
result1 = plan_trip(query1, "JFK", "LAX")
print(result1)
print("\n---\n")
# Second search (semantically similar)
query2 = "Show me flights heading to LA from NYC"
result2 = plan_trip(query2, "JFK", "LAX")
print(result2)
پرسوجوی اول کش را پر میکند، که سپس میتواند با استفاده از کشینگ جاسازی ارزیابی شود. اگر پرسوجویی از نظر معنایی مشابه آنچه در کش است باشد، اپلیکیشن میداند نیازی به فراخوانی اضافی ندارد. حتی چیزی به سادگی حذف پرسوجوهای مشابه معنایی به جای فراخوانی برای هر درخواست فردی میتواند بخش قابل توجهی از فراخوانیهای غیرضروری را حذف کند. نه تنها این سهمیه شما را هدر نمیدهد، اگر فقط تعداد محدودی درخواست در ماه دارید، بلکه ابزارها و اپلیکیشنهای شما را تا حد ممکن سریع و روان اجرا میکند.
افکار نهایی درباره کشینگ برای عاملهای هوش مصنوعی
کشینگ برای عاملهای هوش مصنوعی فقط مسئله انتخاب یک ابزار جدید نیست. شامل تغییر اساسی در تفکر است. وقتی هر درخواست ممکن است هزینه پول و زمان داشته باشد، در منافع همه است که آن فراخوانیها را به حداقل برسانند. همچنین نیاز به درک بردارهای جاسازی دارد، که بخش اساسی از نحوه کار یادگیری ماشین هستند.
برای مرور، کشینگ معنایی به سیستمها اجازه میدهد پاسخها را بر اساس معنا تشخیص دهند و دوباره استفاده کنند، به جای تطابقهای متنی سختگیرانه. کشینگ سطح جریان کاری چیزها را حتی بیشتر میبرد، سیستمهای هوش مصنوعی عاملمحور پیچیده را تا حد ممکن مقرون به صرفه و کارآمد میکند. تنظیم صحیح کشینگ میتواند هوش مصنوعی عاملمحور شما را سریع، مقرون به صرفه و قابل اعتماد برای کاربرانتان کند.
