ملاحظة الكاتب: نفكك المكونات الأربعة لوكيل يراقب المصادر ويولّد ملخصات وفق جدول زمني، ونشرح كيف يمكن فصل طبقة استدعاء النموذج عن حزمة SDK محددة باستخدام واجهة متوافقة مع OpenAI، مع مثال Python قابل للتشغيل.
نشرت OpenRouter مؤخرًا درسًا استخدمت فيه @openrouter/agent 0.11.0 لبناء وكيل ذكاء اصطناعي دائم التشغيل بلغة TypeScript، يراقب Hacker News تلقائيًا ويولّد ملخصات وفق جدول زمني. ويلبي هذا السيناريو احتياجًا شائعًا لدى فرق كثيرة: تلخيص أخبار القطاع أو تحركات المنافسين أو المنشورات الرائجة في المجتمعات التقنية كل صباح. ننطلق من هذا المثال لنشرح بنية عامة لوكيل مراقبة وتلخيص لا يرتبط بحزمة SDK محددة.
هذا المقال ليس إعادة سرد لذلك الدرس. لم ينشر الدرس الأصلي سوى معلومات موجزة، لذلك لن نخمن تفاصيل تنفيذه. نركز هنا على سؤال أعم: ما المكونات التي يتألف منها وكيل المراقبة والتلخيص، وكيف نصمم طبقة استدعاء النموذج بحيث يمكن تبديل النماذج ومزودي الخدمة في أي وقت؟
ما ستتعلمه: بنهاية المقال، ستفهم البنية المكونة من أربع مراحل: «التشغيل المجدول، وجلب البيانات، والتلخيص بالنموذج، وإخراج النتائج». وستحصل أيضًا على تطبيق Python يستند إلى واجهة متوافقة مع OpenAI، ويمكن تعديله مباشرة ليناسب احتياجاتك.

أبرز النقاط حول وكيل تلخيص المحتوى المُراقَب
يلخص الجدول التالي استنتاجات المقال، وتتناول الأقسام اللاحقة كل نقطة بالتفصيل.
| النقطة | التوضيح | الفائدة |
|---|---|---|
| بنية من أربع مراحل | تشغيل مجدول ← جلب البيانات ← تلخيص النموذج ← إخراج النتائج | يمكن استبدال كل مرحلة واختبارها بشكل مستقل |
| إدارة الحالة | تسجيل العناصر التي تمت معالجتها لتجنب تلخيصها مجددًا | تقليل عدد الاستدعاءات والحصول على نتائج أكثر تنظيمًا |
| فصل طبقة استدعاء النموذج | تعتمد شيفرة العمل على واجهة تلخيص واحدة، دون الاعتماد مباشرة على حزمة SDK لمزوّد بعينه | تغيير النموذج أو المزوّد يتطلب تعديل الإعدادات فقط |
| بروتوكول متوافق مع OpenAI | استخدام تنسيق Chat Completions الموحد كأساس لطبقة الاستدعاء | منظومة ناضجة تتيح الربط بنماذج متعددة |
| اختيار النموذج حسب المهمة | في مهام التلخيص، يُنظر إلى طول نافذة السياق والالتزام بالتعليمات والاستقرار والتكلفة | تجنب دفع تكلفة مرتفعة مقابل مهام بسيطة |
المكونات الأربعة لوكيل المراقبة والتلخيص
«الوكيل الدائم» هو في الأساس مسار عمل يوقظه مؤقّت على فترات متكررة. لا يحتاج إلى استدلال معقد متعدد الخطوات، لكنه يتطلب مستوى عاليًا من الموثوقية، لأنه يعمل دون مراقبة مستمرة. وتقسيمه إلى أربعة مكونات ذات مسؤوليات واضحة هو أساس تشغيله باستقرار على المدى الطويل.
| المكوّن | المسؤولية | طرق التنفيذ الشائعة | اعتبارات التصميم |
|---|---|---|---|
| المشغّل المجدول | تشغيل المهمة بوتيرة ثابتة | cron، مؤقّت systemd، مؤقّت الدوال السحابية، سير عمل مجدول في CI، مكتبة جدولة داخل العملية | فصل التشغيل عن منطق العمل، وإتاحة إعادة التشغيل عند الفشل |
| جالب البيانات | جلب المحتوى الجديد من مصادر المعلومات | واجهات API العامة، وRSS، واستخلاص صفحات الويب | تحديد مهلة انتظار، والحد من عدد العناصر، وتسجيل معرّفات العناصر التي سبق الاطلاع عليها |
| الملخّص | استدعاء نموذج لغة كبير لإنشاء الملخص | واجهة Chat Completions | اقتطاع المدخلات، وتثبيت الموجه، وتقييد تنسيق المخرجات |
| مكوّن الإخراج | إرسال النتائج إلى مكان يسهل على الأشخاص الاطلاع عليه | البريد الإلكتروني، وWebhook لروبوت مراسلة، وملف Markdown، وقاعدة بيانات | توفير بديل عند فشل الإرسال، مثل الحفظ على القرص |
تتفاعل هذه الأجزاء الأربعة عبر هياكل بيانات بسيطة فقط: يخرج جالب البيانات «قائمة عناصر»، ويخرج الملخّص «نص الملخص»، ويتولى مكوّن الإخراج استلام النص. وميزة هذا التصميم هي إمكانية تشخيص كل مرحلة على حدة؛ فإذا كانت جودة الملخص ضعيفة، نضبط الملخّص وحده، وإذا فشل الإرسال، نفحص مكوّن الإخراج فقط.
في النسخة الأولى، يضع كثيرون كل المنطق في نص برمجي واحد. قد ينجح ذلك، لكنه يصعّب الصيانة. فبمجرد الرغبة في استبدال Hacker News بـ GitHub Trending، أو استخدام نموذج من مزوّد آخر، يصبح تعديل جزء كبير من الشفرة ضروريًا. أما بعد تقسيم النظام إلى مكونات، فلا تتطلب إضافة مصدر معلومات سوى إضافة جالب جديد، بينما يكفي تغيير الإعدادات لتبديل طبقة النموذج.

اختيار طريقة التشغيل المجدول لوكيل تلخيص المراقبة
التشغيل المجدول هو ما يجعل الوكيل يعمل باستمرار. يطبّقه دليل OpenRouter باستخدام عملية دائمة، لكن لديك خيارات متعددة عند النشر الفعلي، ويتوقف الاختيار على البنية التحتية المتاحة لديك.
| طريقة التشغيل | أسلوب التنفيذ | المزايا | ما يجب الانتباه إليه |
|---|---|---|---|
| cron على النظام | يبدأ عملية جديدة في كل مرة، ثم يخرج عند انتهاء المهمة | بسيط وموثوق، ولا يحتاج إلى عملية دائمة، ما يمنع تسرب الذاكرة | يجب حفظ الحالة على القرص وتهيئة متغيرات البيئة بشكل منفصل |
| مكتبة جدولة داخل العملية | عملية دائمة تنفّذ المهام دوريًا | تسهّل مشاركة الاتصالات وذاكرة التخزين المؤقت | تحتاج العملية إلى مراقبة في حال تعطلها، مثل systemd أو سياسة إعادة تشغيل الحاويات |
| مؤقت الدوال السحابية | تشغيل مجدول دون خادم | لا يحتاج إلى إدارة خوادم، وتُحتسب التكلفة حسب الاستدعاء | مدة التنفيذ محدودة، ويجب تخزين الحالة خارجيًا |
| سير عمل CI مجدول | يعمل وفق جدول على منصة CI | لا توجد تكلفة للخوادم، ويمكن تتبّع السجلات | قد يتأخر التشغيل عن موعده، ولا يناسب المهام عالية التكرار |
بالنسبة إلى مهام التلخيص التي تعمل مرة كل ساعة أو يوم، فإن استخدام cron على النظام مع برنامج نصي يخرج فور انتهاء المهمة هو غالبًا الخيار الأكثر جدوى. فهو يتجنب بطبيعته مشكلة تزايد استهلاك الذاكرة في العمليات الدائمة، ويُشغّل المهمة مجددًا في الموعد التالي إذا فشلت. ولا تستحق العملية الدائمة عناء إعدادها إلا إذا كنت تحتاج إلى مراقبة متكررة كل بضع دقائق، أو إلى مشاركة موارد كبيرة بين مرات التشغيل.
كيفية فصل طبقة استدعاء النموذج في وكيل ملخصات المراقبة
هذا هو محور المقال. يستخدم دليل OpenRouter حزمة SDK الخاصة بها، وهي @openrouter/agent، ما يسهّل البدء سريعًا. لكن المعلومات العامة المتاحة لا توضّح ما إذا كانت الحزمة تدعم نقاط نهاية مخصصة متوافقة مع OpenAI، ولم نتحقق من ذلك؛ لذا لن نتناول هنا كيفية ربطها بمنصات أخرى.
بدلًا من ذلك، سنستخدم نهجًا مختلفًا: لا نجعل شيفرة التطبيق تعتمد مباشرة على حزمة Agent SDK من أي مزود، بل نضيف طبقة خفيفة بينهما تسمى «واجهة التلخيص». تستدعي شيفرة التطبيق الدالة summarize(items) فقط، وتتولى هذه الطبقة تحديد النموذج ونقطة النهاية وفقًا للإعدادات.
تصميم واجهة طبقة الاستدعاء لوكيل ملخصات المراقبة
يمكن تلخيص مبادئ تصميم طبقة الاستدعاء في ثلاث نقاط بسيطة، لكنها توفر الكثير من إعادة العمل لاحقًا:
- إظهار ما يخص التطبيق فقط: توفير الواجهة
summarize(items) -> str، دون تمرير المعلمات منخفضة المستوى مثلmessagesوtemperatureإلى شيفرة التطبيق. - توحيد البروتوكول الأساسي: استخدام تنسيق Chat Completions المتوافق مع OpenAI داخليًا، وقراءة
base_urlوapi_keyوmodelمن متغيرات البيئة. - توفير بديل عند الفشل: إعادة المحاولة عددًا محدودًا من المرات، ثم إخراج قائمة العناوين الأصلية إذا استمر الفشل، لضمان الحصول على نتيجة قابلة للقراءة في ذلك اليوم على الأقل.
اخترنا البروتوكول المتوافق مع OpenAI أساسًا لأنه أصبح عمليًا تنسيقًا شائعًا، كما أن حزمة SDK الرسمية وكثيرًا من أدوات الجهات الخارجية تدعم تعديل base_url. وما دام الخادم متوافقًا مع هذا التنسيق، فلن يتطلب تبديل النموذج سوى تغيير سطر في الإعدادات.
| خيار الواجهة | تكلفة تبديل النموذج | منظومة الأدوات | السيناريو المناسب |
|---|---|---|---|
| الاعتماد على Agent SDK مخصصة لمزود معين | يتطلب تغيير المزود عادةً تعديل الشيفرة | إمكانات الحزمة المدمجة جاهزة للاستخدام | عند اختيار المنصة للاستخدام طويل الأمد والاعتماد على ميزاتها المدمجة |
| استخدام SDK الرسمية لـ OpenAI مباشرةً مع نقطة نهاية متوافقة | يكفي تغيير base_url وmodel |
منظومة الأدوات الأكثر نضجًا والأغنى بالأمثلة | معظم مهام تلخيص المراقبة |
| تغليف استدعاءات HTTP بنفسك | يكفي تغيير الإعدادات، لكن تقع مسؤولية الصيانة عليك | أقل قدر من الاعتماديات | البيئات شديدة الحساسية لحجم الاعتماديات |

وفقًا لهذا التصميم، يمكن استخدام منصات تجميع مثل APIYI كأحد خيارات طبقة استدعاء النموذج. تتوافق APIYI مع تنسيق OpenAI API وتدعم الاتصال باستخدام SDK الرسمية لـ OpenAI، ولا يتطلب تبديل النموذج سوى تغيير اسمه. بالنسبة إلى وكيل ملخصات المراقبة، يعني ذلك إمكانية مقارنة نتائج التلخيص بين نماذج مختلفة باستخدام مفتاح واحد، دون كتابة شيفرة اتصال منفصلة لكل مزود.
ما الذي ينبغي مراعاته عند اختيار نموذج لمهمة تلخيص نتائج المراقبة؟
قد تبدو مهمة التلخيص بسيطة، لكن متطلبات النموذج تختلف كثيرًا باختلاف مصادر المعلومات. لا تتوفر لدينا حاليًا بيانات اختبار منهجية لهذا النوع من المهام، لذلك لن نحسم أي نموذج هو الأفضل، بل سنستعرض العوامل التي ينبغي الموازنة بينها عند الاختيار.
| العامل | لماذا هو مهم؟ | توصية عملية |
|---|---|---|
| طول السياق | قد يحتاج النموذج إلى معالجة عشرات العناوين أو حتى النصوص الكاملة دفعة واحدة | قلّص المدخلات أولًا، ثم اختر النموذج بناءً على طولها بعد التقليص |
| الالتزام بالتعليمات | يحتاج الملخص إلى تنسيق ثابت لتسهيل إرساله وتحليله | استخدم موجهًا ثابتًا لعدة جولات وتحقق من استقرار التنسيق |
| القدرات اللغوية | قد تتطلب المصادر الإنجليزية إخراج ملخص باللغة الصينية | ركّز على التحقق من دقة ترجمة المصطلحات المتخصصة |
| تكلفة الاستدعاء | تعمل المهام المجدولة لفترات طويلة، ما يؤدي إلى تراكم التكاليف | استدعِ النموذج مرة واحدة في كل جولة، وحدّد عدد المدخلات وطول المخرجات |
| استقرار الخدمة | تعمل المهمة دون مراقبة مباشرة، وقد لا يُكتشف الفشل حتى اليوم التالي | اضبط إعادة المحاولة وآلية الرجوع إلى بديل، واحتفظ بنموذج احتياطي |
💡 نصيحة للاختيار: لا توجد إجابة واحدة تناسب الجميع عند اختيار نموذج للتلخيص. الطريقة الأكثر موثوقية هي المقارنة باستخدام مصادر معلوماتك الفعلية لبضعة أيام. يمكنك عبر APIYI apiyi.com التبديل بين عدة نماذج مرشحة باستخدام الشفرة نفسها، ومقارنة استقرار التنسيق وجودة التعبير باللغة الصينية، ثم اختيار النموذج المناسب للاستخدام طويل الأمد.
البدء السريع مع وكيل المراقبة والتلخيص
سنستخدم Python لإنشاء نسخة أولية قابلة للاستخدام. اخترنا واجهة API العامة لـ Hacker News (hacker-news.firebaseio.com/v0) مصدرًا للمعلومات، كما في دليل OpenRouter، لتسهيل المقارنة والفهم.
مثال مبسط: جلب العناوين وتلخيصها
تجلب الشفرة التالية عناوين أهم 10 منشورات على Hacker News، ثم تطلب من النموذج تلخيصها بالصينية للتحقق من عمل المسار كاملًا:
import requests
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # OpenAI 兼容端点
)
HN = "https://hacker-news.firebaseio.com/v0"
ids = requests.get(f"{HN}/topstories.json", timeout=10).json()[:10]
titles = [requests.get(f"{HN}/item/{i}.json", timeout=10).json().get("title", "") for i in ids]
resp = client.chat.completions.create(
model="gpt-4o-mini", # 示例模型名,以平台模型列表为准
messages=[{"role": "user", "content": "用中文分 3 点总结这些热帖的主题:\n" + "\n".join(titles)}]
)
print(resp.choices[0].message.content)
يمكن تشغيل هذه الشفرة، لكنها ليست جاهزة للعمل المستمر بعد: فهي لا تستبعد العناصر المكررة، ولا تعالج حالات الفشل، كما أن النموذج ونقطة النهاية محددان داخل الشفرة. تفصل النسخة الكاملة أدناه المكونات الأربعة وتضيف إدارة الحالة.
عرض شفرة التنفيذ الكاملة (أربعة مكونات + استبعاد التكرار + بديل عند الفشل)
import json
import os
import time
from pathlib import Path
import openai
import requests
HN = "https://hacker-news.firebaseio.com/v0"
STATE_FILE = Path(os.getenv("STATE_FILE", "seen_ids.json"))
TOP_N = int(os.getenv("TOP_N", "30"))
# ---------- 数据获取器 ----------
def fetch_new_stories(seen: set) -> list:
ids = requests.get(f"{HN}/topstories.json", timeout=10).json()[:TOP_N]
items = []
for i in ids:
if i in seen:
continue
item = requests.get(f"{HN}/item/{i}.json", timeout=10).json() or {}
if item.get("title"):
items.append({"id": i, "title": item["title"],
"url": item.get("url", ""), "score": item.get("score", 0)})
return items
# ---------- 状态管理 ----------
def load_seen() -> set:
return set(json.loads(STATE_FILE.read_text())) if STATE_FILE.exists() else set()
def save_seen(seen: set) -> None:
STATE_FILE.write_text(json.dumps(sorted(seen)[-2000:])) # 只保留最近的 ID
# ---------- 摘要器(模型调用层) ----------
class Summarizer:
def __init__(self):
self.client = openai.OpenAI(
api_key=os.environ["LLM_API_KEY"],
base_url=os.getenv("LLM_BASE_URL", "https://api.apiyi.com/v1"),
)
self.model = os.getenv("SUMMARY_MODEL", "gpt-4o-mini")
def summarize(self, items: list, retries: int = 2) -> str:
lines = "\n".join(f"- [{x['score']}] {x['title']}" for x in items)
prompt = ("你是技术资讯编辑。请用中文把下面的 Hacker News 新热帖归纳为 3-5 个主题,"
"每个主题一句话,并列出最值得关注的 3 条标题。\n" + lines)
for attempt in range(retries + 1):
try:
resp = self.client.chat.completions.create(
model=self.model,
messages=[{"role": "user", "content": prompt}],
max_tokens=800,
)
return resp.choices[0].message.content
except Exception as e:
print(f"摘要失败(第 {attempt + 1} 次):{e}")
time.sleep(2 ** attempt)
return "【模型暂不可用,以下为原始标题】\n" + lines # 降级输出
# ---------- 输出器 ----------
def deliver(text: str) -> None:
webhook = os.getenv("WEBHOOK_URL")
if webhook:
try:
requests.post(webhook, json={"text": text}, timeout=10).raise_for_status()
return
except Exception as e:
print(f"推送失败,改为落盘:{e}")
Path(f"digest-{time.strftime('%Y%m%d-%H%M')}.md").write_text(text, encoding="utf-8")
# ---------- 一次运行(由定时器触发) ----------
def run_once() -> None:
seen = load_seen()
items = fetch_new_stories(seen)
if not items:
print("没有新条目,本轮跳过")
return
deliver(Summarizer().summarize(items))
save_seen(seen | {x["id"] for x in items})
if __name__ == "__main__":
run_once()
هناك عدة خيارات تصميم مهمة في النسخة الكاملة. أولًا، لا يتيح Summarizer للاستخدام الخارجي سوى summarize، بينما تُقرأ أسماء النموذج ونقطة الاتصال والمفتاح من متغيرات البيئة، وهذا هو فصل طبقة الاستدعاء الذي تناولناه سابقًا. ثانيًا، يحتفظ ملف الحالة بأحدث مجموعة من المعرّفات فقط، حتى لا يستمر حجمه في النمو مع التشغيل طويل الأمد. وأخيرًا، عند فشل النموذج يُعرض العنوان الأصلي، وعند فشل الإرسال تُحفظ النتائج في ملف، لضمان وجود مخرجات يمكن تتبعها في كل دورة.
جدولة تشغيل وكيل ملخص المراقبة
صُمم السكربت بحيث «يعمل مرة واحدة ثم ينتهي»، لذا يمكن إسناد تشغيله إلى cron مباشرةً. يضبط الإعداد التالي تشغيله يوميًا في الساعة 8 صباحًا و8 مساءً:
# crontab -e
0 8,20 * * * cd /opt/hn-digest && LLM_API_KEY=xxx SUMMARY_MODEL=gpt-4o-mini /usr/bin/python3 agent.py >> run.log 2>&1
إذا أردت مقارنة نموذج آخر، فما عليك سوى تغيير SUMMARY_MODEL إلى اسم النموذج المطلوب، دون تعديل أي سطر من الشفرة. وفي بيئة الإنتاج، يُنصح بوضع المفتاح في ملف .env أو خدمة لإدارة المفاتيح، بدلًا من كتابته مباشرةً في crontab.
🚀 نصيحة للبدء السريع: استخدم المثال المبسط أولًا للتأكد من أن مسار العمل يعمل كما ينبغي، ثم انتقل إلى النسخة الكاملة واربطها بـ cron. توفر APIYI عبر apiyi.com رصيدًا تجريبيًا مجانيًا للمستخدمين الجدد، ويكفي مفتاح واحد للتبديل بين نماذج OpenAI وClaude وGemini وغيرها، مما يسهل مقارنة جودة الملخصات في مرحلة بناء النموذج الأولي.

الأسئلة الشائعة FAQ
س1: ما هو وكيل ملخصات المراقبة المجدول؟
هو برنامج آلي يُشغّله مؤقّت دوريًا لجلب المحتوى الجديد من مصادر المعلومات وفق جدول محدد، ثم يرسله إلى نموذج لغة كبير لتلخيصه، ويدفع الملخص إلى البريد الإلكتروني أو تطبيق مراسلة فورية أو ملف. وعلى عكس الوكيل الحواري، يعمل هذا الوكيل لفترات طويلة دون إشراف، لذا فإن الاستقرار ومنع التكرار أهم من الاستدلال المعقد.
س2: ما الفرق بين استخدام حزمة SDK مخصصة للوكيل واستخدام واجهة متوافقة مع OpenAI؟
غالبًا ما توفر حزمة SDK المخصصة إمكانات جاهزة مثل استدعاء الأدوات والجدولة، مما يسرّع البدء، لكنها تربط كود التطبيق بتلك المنصة. أما الواجهة المتوافقة مع OpenAI فهي أقل تجريدًا وتتطلب منك تنفيذ الجدولة ومنع التكرار بنفسك، لكنها تتيح لك تغيير النموذج ومزود الخدمة بتعديل الإعدادات فقط. وفي مهام التلخيص البسيطة، تكون مرونة الخيار الثاني عادةً أكثر فائدة.
س3: هل يمكن تعديل الدليل التعليمي لـ `@openrouter/agent` من OpenRouter لاستخدام منصة أخرى مباشرةً؟
توضح المعلومات المنشورة حاليًا أن الدليل يستخدم الإصدار 0.11.0 من `@openrouter/agent` في TypeScript، لكنها لا تذكر ما إذا كانت حزمة SDK تدعم نقاط نهاية مخصصة، ولم نتحقق من ذلك. إذا كنت ترغب في الاحتفاظ بمرونة التبديل، فمن الأسلم الاستفادة من فكرة السيناريو وتنفيذ طبقة الاستدعاء بنفسك باستخدام واجهة متوافقة مع OpenAI، كما في هذا المقال.
س4: ما السيناريوهات المناسبة لوكيل ملخصات المراقبة؟
– **ملخص يومي للمواضيع الرائجة في المجتمعات التقنية**: مثل تلخيص مواضيع Hacker News والمنتديات التقنية يوميًا
– **تتبّع تحديثات المنافسين**: مراقبة مدونات المنافسين أو سجلات التغييرات وإنشاء ملخص للتحديثات
– **مستجدات المشاريع مفتوحة المصدر**: جمع الإصدارات الجديدة والقضايا المهمة في المستودعات التي تتابعها
– **نشرة صباحية لأخبار القطاع**: تجميع عدة مصادر RSS وإرسال موجز باللغة الصينية كل صباح
س5: كيف يمكن استدعاء النموذج سريعًا عبر API لتنفيذ التلخيص؟
يُنصح باستخدام منصة تجمع النماذج وتدعم الصيغة المتوافقة مع OpenAI:
1. انتقل إلى APIYI على apiyi.com، وسجّل حسابًا للحصول على مفتاح API ورصيد تجريبي مجاني
2. اضبط `base_url` في كود المقال على `https://api.apiyi.com/v1`
3. استخدم متغير البيئة `SUMMARY_MODEL` للتبديل بين النماذج ومقارنة جودة الملخصات
س6: كيف يمكن التحكم في تكلفة الاستدعاءات عند التشغيل طويل المدى؟
الفكرة الأساسية هي معالجة المحتوى الجديد فقط واستدعاء النموذج مرة واحدة في كل دورة. استخدم ملف حالة لاستبعاد العناصر التي سبق الاطلاع عليها، وحدّد عدد العناصر المدخلة في كل دورة وقيمة `max_tokens`، واضبط تكرار التشغيل حسب احتياجاتك الفعلية. تختلف أسعار النماذج كثيرًا، لذا يمكنك مقارنتها في صفحة أسعار النماذج على APIYI عبر apiyi.com، ثم اختيار نموذج أقل تكلفة للمهام الخفيفة مثل التلخيص.
س7: ما القيود المعروفة لوكيل ملخصات المراقبة؟
– **العناوين وحدها لا تكفي**: قد يؤدي الاعتماد على العنوان والملخص وحدهما إلى فهم خاطئ للمحتوى. يمكن جلب النص الكامل عند الحاجة، مع مراعاة طول المدخلات والالتزام بقواعد الجلب
– **قد يختلق النموذج تفاصيل**: يجب أن يطلب الموجه التلخيص اعتمادًا على المحتوى المقدّم فقط، مع الاحتفاظ بالروابط الأصلية للنتائج المهمة
– **مصادر المعلومات تتغير**: قد تفشل عملية الجلب عند تغير تنسيق الواجهة أو سياسة تحديد معدل الطلبات، لذا يجب مراقبة سجلات التشغيل
أهم النقاط حول وكيل المراقبة والتلخيص
- هيكل من أربع مراحل: التشغيل المجدول، وجلب البيانات، والتلخيص بالنموذج، وإخراج النتائج مراحل مستقلة، ما يسهّل استبدالها واستكشاف الأخطاء
- التشغيل ثم الإنهاء أكثر موثوقية: لمهام التلخيص قليلة التكرار، يوفر استخدام cron مع سكربت يُنفّذ مرة واحدة إدارة أسهل من عملية تعمل باستمرار
- الحالة تحدد الجودة: سجّل معرّفات العناصر التي سبق الاطلاع عليها، ولخّص العناصر الجديدة فقط في كل دورة لتجنب التكرار والهدر
- افصل طبقة الاستدعاء: يعتمد منطق التطبيق على واجهة
summarizeفقط، بينما تُحدَّد إعدادات النموذج ونقطة النهاية والمفتاح من ملف الإعدادات - اعتمد بروتوكولًا متوافقًا: يتيح التنسيق المتوافق مع OpenAI تبديل النموذج بتغيير سطر واحد في متغيرات البيئة
- اختر النموذج بالتجربة: قارن بين النماذج حسب السياق واتباع التعليمات واللغة والتكلفة والاستقرار. يمكنك التبديل بينها واختبارها باستخدام الشفرة نفسها على APIYI apiyi.com
- وفّر بدائل عند الفشل: إذا فشل النموذج، أعرض العناوين الأصلية؛ وإذا فشل الإرسال، احفظ النتائج على القرص
الخلاصة
عند بناء وكيل يُنشئ ملخصات للمراقبة وفق جدول زمني، لا تكمن الأهمية في استخدام إطار عمل معقد، بل في تقسيم البنية بوضوح:
- تقسيم المكونات: ترتبط مكونات التشغيل وجلب البيانات والتلخيص والإخراج بهياكل بيانات بسيطة، ويمكن اختبار كل منها على حدة.
- فصل الواجهات: تُستخدم واجهة تلخيص بسيطة لعزل حزمة SDK المحددة، مع الاعتماد على بروتوكول متوافق مع OpenAI في الطبقة الأساسية.
- إعطاء الأولوية للاستقرار: إزالة التكرار وإعادة المحاولة والحلول البديلة عناصر ضرورية للمهام التي تعمل دون إشراف.
يقدم دليل OpenRouter الخاص بـ Hacker News مثالًا جيدًا لتطبيق هذه الفكرة، بينما تتيح لك البنية العامة في هذا المقال نقلها إلى أي مصدر معلومات وأي نموذج. والخطوة التالية هي تجربة المسار كاملًا بمثال بسيط، ثم ربطه بـ cron وتشغيله لعدة أيام، ومراقبة جودة الملخصات قبل اختيار نموذج للاستخدام على المدى الطويل.
ننصح باستخدام APIYI على apiyi.com للتحقق من النتائج سريعًا. يتيح لك مفتاح API واحد التبديل بين عدة نماذج شائعة، كما يحصل المستخدمون الجدد على رصيد تجريبي مجاني لإجراء اختبارات مقارنة خلال مرحلة بناء النموذج الأولي.
📚 المراجع
- ملخص دليل OpenRouter: إنشاء وكيل ذكاء اصطناعي دائم لمراقبة Hacker News باستخدام Agent SDK
- الرابط:
aihot.news/items/upl3hjjdokqe13w3ieo9opr0v -
الوصف: مقدمة المقال، وتعرض مثالًا على إنشاء وكيل يعمل وفق جدول زمني باستخدام
@openrouter/agentالإصدار 0.11.0 في TypeScript -
واجهة API الرسمية لـ Hacker News: واجهة بيانات عامة للقراءة فقط
- الرابط:
github.com/HackerNews/API -
الوصف: تتضمن شرحًا لحقول واجهات مثل topstories وitem، وهي توثيق مصدر البيانات المستخدم في أمثلة المقال
-
حزمة OpenAI Python SDK: مكتبة العميل الرسمية
- الرابط:
github.com/openai/openai-python - الوصف: تشرح كيفية الاتصال بنقاط النهاية المتوافقة باستخدام المعامل
base_url
الكاتب: الفريق التقني في APIYI
للتواصل التقني: يسعدنا تواصلكم معنا عبر الصفحة الرئيسية لموقع APIYI، ويمكنكم زيارة مركز التوثيق على docs.apiyi.com للاطلاع على المزيد من موارد التكامل
