شغّل FinRobot على نقطة نهاية مخصصة متوافقة مع OpenAI.

Updated 2026-07-30

يقرأ FinRobot بيانات اعتماد LLM الخاصة به من ملف OAI_CONFIG_LIST بأسلوب AutoGen، الذي تقبل مُدخَلاته مفتاح base_url. أضف مُدخَلاً يُشير إلى https://api.apisrouter.com/v1 بمفتاح بوابة، ويمكن لوكلاء التنبؤ وكتابة التقارير وRAG العمل على أي معرّف نموذج في الكتالوج.

إجابة سريعة: مُدخَل واحد في OAI_CONFIG_LIST.

تعليمات إعداد FinRobot تطلب منك إعادة تسمية OAI_CONFIG_LIST_sample إلى OAI_CONFIG_LIST وملء بيانات الاعتماد. ذلك الملف قائمة إعداد قياسية من AutoGen: مصفوفة JSON حيث كل مُدخَل يأخذ model وapi_key، واختيارياً base_url، الذي يُظهِره النموذج المُشحَّن بالفعل لنقاط نهاية غير افتراضية. أضف مُدخَلاً بمفتاح بوابتك وbase_url مضبوطاً على https://api.apisrouter.com/v1، ويمكن لكل وكيل FinRobot يُحمِّل الملف التوجيه عبره. عثرة واحدة تُكلِّف الناس وقتاً: الدروس تُحمِّل الملف عبر autogen.config_list_from_json مع filter_dict يختار المُدخَلات بحسب اسم النموذج. إذا كان مُدخَلك الجديد يقول claude-sonnet-4-6 لكن الفلتر لا يزال يطلب معرّف GPT من العيّنة، مُدخَلك يُصفَّى ويفشل التشغيل على بيانات الاعتماد القديمة. حدّث filter_dict ليطابق النموذج الذي أضفته، أو أزل الفلتر أثناء الاختبار.

[
    {
        "model": "claude-sonnet-4-6",
        "api_key": "sk-YOUR-APISROUTER-KEY",
        "base_url": "https://api.apisrouter.com/v1"
    }
]

كيف يستخدم FinRobot إعداد LLM الخاص به.

FinRobot (AI4Finance-Foundation على GitHub، بنحو 7.6 آلاف نجمة) منصة وكيل ذكاء اصطناعي للتحليل المالي مبنية على AutoGen (pyautogen 0.2.19 أو أحدث). وكلاؤه سير عمل مُعبَّأ: مُتنبِّئ Market_Analyst يسحب أخبار الشركة وأساسياتها ويتنبأ بحركة الأسبوع القادم، كاتب تقرير سنوي يُحوِّل الملفات إلى PDF بحث أسهم، ووكلاء RAG للسؤال والجواب فوق مكالمات الأرباح وملفات SEC. كل درس يبني نفس شكل llm_config: قاموس تأتي config_list الخاصة به من autogen.config_list_from_json الذي يقرأ ملف OAI_CONFIG_LIST. يُسلَّم ذلك llm_config حينها إلى أصناف غلاف مثل SingleAssistant وSingleAssistantShadow من finrobot.agents.workflow، التي تملك وكلاء AutoGen الأساسيين. قرار نقطة النهاية يعيش إذاً بالكامل في ملف JSON: عميل OpenAI الخاص بـ AutoGen يُرسِل طلبات /v1/chat/completions إلى أياً كان base_url الذي يحمله المُدخَل المُختار ويُمرِّر حقل model كسلسلة عادية. تلك السلسلة العادية هي الفوز العملي. عندما تخدم نقطة النهاية خلف base_url عدة بائعين، معرّف Claude أو DeepSeek أو Qwen يركب عبر نفس إعداد بشكل OpenAI دون أن يُلاحِظ FinRobot، وتبديل نموذج التحليل يصبح تعديل JSON من سطر واحد بالإضافة إلى filter_dict مطابق.

الإعداد الكامل: ملف الإعداد، الفلتر، ومفاتيح البيانات.

يُقسِّم FinRobot بيانات الاعتماد عبر ملفَين، وواحد منهما فقط يخص LLM. OAI_CONFIG_LIST يحمل نقاط نهاية النماذج ومفاتيحها. config_api_keys يحمل بيانات اعتماد بيانات السوق (FINNHUB_API_KEY، FMP_API_KEY، SEC_API_KEY، ومفاتيح اجتماعية)، تُحمَّل بشكل منفصل عبر register_keys_from_json. توجيه LLM عبر بوابة يُغيِّر الملف الأول ويترك الثاني دون مساس، لذا سحوبات الأخبار والأساسيات والملفات تتصرف تماماً كما كانت. نمط الدرس أدناه هو بنية دفتر المُتنبِّئ مع اختيار مُدخَل البوابة. نفس llm_config يعمل لدروس التقرير السنوي وRAG، التي تختلف فقط في صنف سير العمل الذي تُنشئه.

import autogen
from finrobot.utils import register_keys_from_json
from finrobot.agents.workflow import SingleAssistant

llm_config = {
    "config_list": autogen.config_list_from_json(
        "../OAI_CONFIG_LIST",
        filter_dict={"model": ["claude-sonnet-4-6"]},  # match your entry
    ),
    "timeout": 120,
    "temperature": 0,
}

register_keys_from_json("../config_api_keys")  # finnhub/fmp/sec data keys

assistant = SingleAssistant("Market_Analyst", llm_config,
                            human_input_mode="NEVER")
assistant.chat("Analyze NVDA news this week and predict next week's movement.")

اختيار نماذج لكل سير عمل في FinRobot.

حلقة التجربة النظيفة: ثبّت رمز السهم ونطاق التاريخ، شغّل نفس سير العمل مرة واحدة لكل مُدخَل مرشّح، وقارن المُخرَجات جنباً إلى جنب. خلف نقطة نهاية واحدة كل مرشّح تعديل filter_dict، وسجل الاستخدام لكل مفتاح يعطيك فاتورة tokens لكل مرشّح دون عمل جداول بيانات.

  • كاتب التقرير السنوي هو مهمة الاستدلال الأثقل: يقرأ أقسام الملفات، يُوحِّد أطروحة استثمار، ويصيغ تقريراً مُهيكَلاً. claude-opus-4-7 أو gpt-5.5 في ذلك سير العمل هو حيث تتغيّر جودة المُخرَج بوضوح.
  • المُتنبِّئ السوقي مهمة أقصر ومتكررة فوق الأخبار والأساسيات. claude-sonnet-4-6 أو deepseek-v4-pro يُديرها جيداً، ويهم عندما تُشغِّله عبر قائمة مراقبة يومياً.
  • RAG للسؤال والجواب فوق مكالمات الأرباح هو استرجاع بالإضافة إلى توحيد فوق مقتطفات طويلة، ما يُفضِّل معرّفات السياق الطويل؛ gemini-3.1-pro-preview يستحق الاختبار مقابل claude-sonnet-4-6 هناك.
  • بما أن المُدخَلات تُختار بواسطة filter_dict، يمكنك الاحتفاظ بملف واحد بمُدخَل طليعي ومُدخَل سريع مقابل نفس base_url والاختيار لكل دفتر بدلاً من تعديل بيانات الاعتماد لكل تشغيل.
  • معرّفات النموذج سلاسل دقيقة. FinRobot يُمرِّرها دون تحقق، لذا سرد /v1/models الخاص بنقطة النهاية هو الإملاء الموثوق.

ادفع حسب الاستخدام · أقل من السعر الرسمي

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

النموذجالسعر الرسميسعرنا
Claude Opus 4.7$5.00 / $25.00 per M$4.00 / $20.00 per M
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
GPT-5.4$2.50 / $15.00 per M$2.00 / $12.00 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M
Gemini 3.1 Pro Preview$2.00 / $12.00 per M$1.60 / $9.60 per M

أنماط الفشل الخاصة بـ FinRobot.

عدم تطابق filter_dict هو الكبير. config_list_from_json يُعيد فقط المُدخَلات التي يطابق model الخاص بها الفلتر؛ فلتر لا يطابق شيئاً يُثير خطأً بشأن قائمة إعداد فارغة، وفلتر يطابق مُدخَلات العيّنة المتبقية يُرسِل طلبات إلى OpenAI بمفاتيح مؤقتة، ما يظهر كـ 401 من المضيف الخاطئ. عندما لا يبدو أن تغييرات التوجيه تسري، اطبع config_list المُحلَّلة أولاً. المسارات النسبية هي الثانية. الدروس تُحمِّل "../OAI_CONFIG_LIST" لأن الدفاتر تجلس مستوى واحداً تحت جذر المستودع؛ نص برمجي في الجذر يريد "OAI_CONFIG_LIST" بدلاً من ذلك، ويقبل AutoGen أيضاً متغيّر بيئة OAI_CONFIG_LIST يحمل سلسلة JSON، ما يتجنّب مشاكل المسار في الحاويات. أسطر التعليقات هي الثالثة. تعليمات الإعداد تخبرك بإزالة ملاحظات التعليق من ملفات العيّنة لأنها تجعل JSON غير صالح؛ JSONDecodeError عند بدء التشغيل يعني أن تعليقاً شارداً نجا. بيانات الاعتماد تفشل بشكل مستقل. إذا كان الوكيل يدردش جيداً لكن الأخبار أو الأساسيات تعود فارغة، فتلك مشكلة config_api_keys (Finnhub، FMP، SEC)، لا مشكلة نقطة نهاية. ووحدة FinRobot Pro للأسهم المنفصلة تُهيِّئ مفاتيحها عبر config.ini بدلاً من ذلك؛ اعتباراً من يوليو 2026، إعداداتها الموثَّقة تغطي openai_api_key لكن لا تجاوز base URL، لذا عامل تلك الوحدة كبائع مباشر حتى يوثّق المشروع واحداً.

من يوجّه FinRobot عبر بوابة.

  • المحلّلون الذين يُولِّدون تقارير أسهم عبر قائمة تغطية. سياقات الملفات الطويلة لكل تقرير تجعل فروق سعر النموذج جوهرية، ونقطة نهاية واحدة تجعل النموذج اختياراً لكل تشغيل.
  • فرق الكمّ التي تُشغِّل المُتنبِّئ يومياً فوق قائمة مراقبة، حيث معرّف سريع من الفئة المتوسطة يُبقي الفاتورة المتكررة ثابتة دون إعادة كتابة سير العمل.
  • الباحثون الذين يقارنون عائلات النماذج على مهام مالية متطابقة. كل مرشّح مُدخَل إعداد واحد، لا حساب بائع وتبديل SDK.
  • الفرق التي تُوحِّد مكدسات مبنية على AutoGen. يشترك FinRobot في اصطلاح OAI_CONFIG_LIST مع مشاريع AutoGen أخرى، لذا صيغة مُدخَل بوابة واحدة تخدمهم جميعاً.
  • المطورون الذين لا يملكون وصولاً إلى فوترة بائع معيّن. الوصول القائم على تعبئة الرصيد بدون شرط بطاقة يزيل الاعتماد على التسجيل لكل مزوّد.

تحقق من نقطة النهاية وصحّح أخطاء أول تشغيل.

اسرد النماذج التي يمكن لمفتاحك مخاطبتها قبل فتح دفتر؛ كل سلسلة model في OAI_CONFIG_LIST وكل قيمة filter_dict يجب أن تطابق معرّفاً مخدوماً تماماً. ثم شغّل أقصر دردشة ممكنة عبر SingleAssistant وراقب الطرفية. 401 يعني أن api_key الخاص بالمُدخَل المُختار لا ينتمي إلى نقطة النهاية في base_url الخاص به؛ تحقّق من أي مُدخَل اختاره الفلتر فعلياً. خطأ model-not-found هو خطأ إملائي في المُدخَل. خطأ اتصال يعني عادة أن base_url فقد لاحقة /v1. إذا كرّر الوكيل الحلقة دون نتائج أدوات، فمفاتيح البيانات في config_api_keys هي المشتبه بها، لا نقطة نهاية LLM. بمجرد تدفّق الطلبات، تعرض لوحة APIsRouter النموذج لكل طلب، وعدد tokens، والإنفاق. تشغيلات كتابة التقارير محادثات طويلة متعددة الجولات، وعرض الاستخدام يُظهِر ما يكلّفه تقرير واحد فعلياً قبل جدولة خمسين منه.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

الأسئلة الشائعة

هل يدعم FinRobot نقطة نهاية مخصصة متوافقة مع OpenAI؟

نعم. يقرأ FinRobot مُدخَلات OAI_CONFIG_LIST بأسلوب AutoGen، وتقبل المُدخَلات مفتاح base_url إلى جانب model وapi_key. وجّه base_url إلى البوابة، أبقِ filter_dict مطابقاً لنموذج المُدخَل، ويتوجّه الوكلاء عبره.

هل يمكن لوكلاء FinRobot العمل على نماذج Claude أو DeepSeek أو Qwen؟

نعم. يُمرِّر AutoGen حقل model كسلسلة عادية عبر /v1/chat/completions، لذا أي معرّف تخدمه نقطة النهاية يعمل. اسم النموذج في المُدخَل وفي filter_dict يحتاج فقط أن يطابق معرّف الكتالوج تماماً.

لماذا يتجاهل FinRobot مُدخَل OAI_CONFIG_LIST الجديد الخاص بي؟

غالباً filter_dict. الدروس تُصفِّي المُدخَلات بحسب اسم النموذج، لذا مُدخَل لا يطابق model الخاص به الفلتر يُستبعَد بصمت. حدّث filter_dict إلى معرّف نموذجك الجديد، أو حمّل الملف بدون فلتر أثناء الاختبار.

هل تتغيّر مفاتيح Finnhub وFMP وSEC عندما أغيّر نقطة نهاية LLM؟

لا. بيانات اعتماد بيانات السوق تعيش في config_api_keys وتُحمَّل عبر register_keys_from_json، منفصلة تماماً عن OAI_CONFIG_LIST. توجيه LLM عبر بوابة لا يلمس خط أنابيب البيانات.

أي نسخة من AutoGen ينطبق عليها هذا؟

يُثبِّت FinRobot pyautogen 0.2.19 أو أحدث ويستخدم مُحمِّل config_list_from_json بأسلوب 0.2. مفتاح base_url في مُدخَلات الإعداد قياسي عبر ذلك الجيل، لذا لا حاجة لتغييرات كود في FinRobot.

هل تحترم وحدة FinRobot Pro للأسهم base_url أيضاً؟

ليس كما هو موثَّق. ملف config.ini الخاص بها يعرض openai_api_key تحت API_KEYS لكن لا تجاوز نقطة نهاية اعتباراً من يوليو 2026. توجيه OAI_CONFIG_LIST الموصوف هنا ينطبق على وكلاء ودروس FinRobot الرئيسية.