شغّل ai-hedge-fund على base URL مخصص متوافق مع OpenAI.
Updated 2026-07-30
يبني ai-hedge-fund نماذج OpenAI الخاصة به بواسطة ChatOpenAI من LangChain، ويقرأ base URL من OPENAI_API_BASE. اضبطه على https://api.apisrouter.com/v1، صدّر مفتاحاً واحداً، ويتوجّه كل وكيل محلّل في الصندوق عبر نقطة نهاية واحدة.
إجابة سريعة: OPENAI_API_BASE مع مفتاح واحد.
يُنشأ مزوّد OpenAI في ai-hedge-fund كـ ChatOpenAI(model=model_name, api_key=api_key, base_url=base_url)، وذلك الـ base_url يأتي من os.getenv("OPENAI_API_BASE") في src/llm/models.py. إذاً التجاوز سطران في .env: وجّه OPENAI_API_BASE إلى https://api.apisrouter.com/v1 واضبط OPENAI_API_KEY على مفتاح البوابة الخاص بك. كل نموذج يعمل عبر مزوّد OpenAI يرسل الآن إلى البوابة. لاحظ اسم المتغيّر بدقة: هو OPENAI_API_BASE، اصطلاح عصر LangChain، وليس OPENAI_BASE_URL. تصدير الاسم الخاطئ يُتجاهَل بصمت وتستمر الطلبات في الذهاب إلى api.openai.com، وهذا هو السبب الأكثر شيوعاً لظهور هذا الإعداد وكأنه لا يعمل.
OPENAI_API_BASE=https://api.apisrouter.com/v1
OPENAI_API_KEY=sk-APIsRouter-...
FINANCIAL_DATASETS_API_KEY=... # market data, unrelated to the LLM endpointكيف يختار ai-hedge-fund نموذجاً ومزوّداً.
ai-hedge-fund (virattt على GitHub، بنحو 62 ألف نجمة) يُحاكي صندوقاً كلجنة من الوكلاء: شخصيات محلّلين مبنية على مستثمرين معروفين، بالإضافة إلى وكلاء تقييم ومشاعر وأساسيات وتحليل فني، تُغذّي مدير مخاطر ومدير محفظة يُنتِجان الإشارات النهائية. جميعهم يشتركون في اختيار نموذج واحد لكل تشغيل، لذا تشغيل واحد يُضاعِف قرار النموذج عبر كل وكيل وكل رمز سهم. اختيار النموذج له مساران. تفاعلياً، تشغيل poetry run python src/main.py --ticker AAPL,MSFT,NVDA بدون علم نموذج يفتح منتقياً بواسطة questionary. نصّياً، علم --model يأخذ اسم نموذج، لكن فقط الأسماء الموجودة في سجل النماذج الخاص بالمستودع: find_model_by_name() يبحث عن السلسلة في src/llm/api_models.json، وكل مُدخَل في السجل يحمل display_name وmodel_name وprovider. إذا فشل البحث، لا تخمّن الواجهة مزوّداً؛ بل تعود إلى المنتقي التفاعلي، وهذا مهم للأتمتة لأن معرّفاً غير معروف يحوّل تشغيلاً نصياً إلى تشغيل ينتظر إدخالاً من لوحة المفاتيح. حقل provider هو ما يقرر التوجيه. المُدخَلات المُعلَّمة OpenAI تمر عبر ChatOpenAI وتحترم OPENAI_API_BASE؛ المُدخَلات المُعلَّمة Anthropic تمر عبر ChatAnthropic وANTHROPIC_API_KEY، متجاوزة base URL الخاص بك تماماً. هذه هي الرؤية الأساسية لتوجيه البوابة: عمود provider يختار العميل وبالتالي نقطة النهاية، بغض النظر عمّن دَرَّب النموذج فعلياً.
الإعداد الكامل: .env مع مُدخَل سجل لكل نموذج بوابة.
بالنسبة للنماذج التي يسردها السجل بالفعل تحت مزوّد OpenAI، تجاوز .env وحده كافٍ؛ سلسلة النموذج تُمرَّر إلى نقطة النهاية كما هي. لتشغيل معرّف Claude أو DeepSeek أو Qwen عبر البوابة على نفس المفتاح، أضف مُدخَلاً إلى src/llm/api_models.json بمعرّف الكتالوج كـ model_name، والأهم، "OpenAI" كـ provider. حقل provider يختار العميل، لذا مُدخَل مُعلَّم بـ OpenAI يمر عبر ChatOpenAI وOPENAI_API_BASE الخاص بك حتى لو لم يكن النموذج نفسه نموذج OpenAI. يظهر المُدخَل حينها في المنتقي التفاعلي ويُحَل عبر --model في النصوص البرمجية. هذا تعديل JSON من ثلاثة أسطر في نسختك، وليس تغييراً في الكود، وهو الشكل الموثَّق الذي يستخدمه السجل بالفعل. ضع في اعتبارك المُدخَلات الأصيلة للمزوّد كتباين: اختيار نموذج سجل مُعلَّم بـ Anthropic سيبحث عن ANTHROPIC_API_KEY ويذهب مباشرة إلى نقطة نهاية Anthropic. إذا كانت نيّتك مفتاحاً واحداً للبوابة لكل شيء، شغّل نماذجك عبر مُدخَلات مُعلَّمة بـ OpenAI ويمكنك ترك مفاتيح كل بائع بدون ضبط تماماً.
{
"display_name": "Claude Sonnet 4.6 (gateway)",
"model_name": "claude-sonnet-4-6",
"provider": "OpenAI"
},
{
"display_name": "DeepSeek V4 Pro (gateway)",
"model_name": "deepseek-v4-pro",
"provider": "OpenAI"
}اختيار نموذج للجنة وكلاء.
بما أن السجل يجعل كل مرشّح قابلاً للعنونة خلف علم واحد، التقييم الصادق تجريبي: شغّل نفس رموز الأسهم والتواريخ عبر نموذجين أو ثلاثة وقارن الإشارات والإنفاق. عرض الاستخدام لكل مفتاح يُسعِّر كل مسح لك، وهذا يحوّل اختيار النموذج من نقاش إلى قياس.
- تشغيل واحد هو أحكام كثيرة. كل شخصية محلّل تستدل على نفس الملفات وبيانات السعر لكل رمز سهم، لذا اختيار النموذج يُضرَب في عدد الوكلاء ضرب عدد رموز الأسهم. معرّف استدلال طليعي (claude-opus-4-7، gpt-5.5) يرفع جودة كل حكم بفاتورة tokens مُضاعَفة بالتناسب.
- claude-sonnet-4-6 هو الافتراضي المعقول: قوي بما يكفي ليبقى استدلال الشخصية مترابطاً عبر سياق أساسي طويل، مُسعَّر لتشغيلات تتفرّع عبر عشرات الوكلاء وسلة من رموز الأسهم.
- deepseek-v4-pro وqwen3.7-max يستحقان القياس المعياري للمسوحات الواسعة، حيث تتراكم فجوة السعر لكل تشغيل عبر كل تاريخ اختبار خلفي.
- أياً كان اختيارك، ثبّته. الإشارات من لقطات مختلفة لنموذج متحرك غير قابلة للمقارنة عبر نافذة اختبار خلفي؛ استخدم معرّفات دقيقة وسجّل سلسلة النموذج بجانب النتائج مثل بذرة عشوائية.
ادفع حسب الاستخدام · أقل من السعر الرسمي
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.5 | $5.00 / $30.00 per M | $4.00 / $24.00 per M |
| DeepSeek V4 Pro | $0.43 / $0.87 per M | $0.40 / $0.90 per M |
| Qwen 3.7 Max | $2.50 / $7.50 per M | $2.50 / $7.50 per M |
أنماط الفشل الخاصة بـ ai-hedge-fund.
متغيّر البيئة الخاطئ. هذا المستودع يقرأ OPENAI_API_BASE. OPENAI_BASE_URL، المتغيّر الذي تستخدمه أدوات أخرى، لا يُستشار، وضبطه لا يفعل شيئاً سوى إقناعك بأن التجاوز معطَّل. إذا كانت الطلبات لا تزال تصل إلى api.openai.com، تحقّق من اسم المتغيّر قبل أي شيء آخر. --model بمعرّف غير مُسجَّل. find_model_by_name() يعرف فقط المُدخَلات في api_models.json. مرّر معرّف كتالوج غير مُسجَّل وتطبع الواجهة رسالة عدم عثور وتنزل إلى المنتقي التفاعلي، وهذا في مهمة cron أو تشغيل CI يعني تعليقاً صامتاً، لا خروجاً بخطأ. سجّل المعرّف أولاً؛ ثم تُحَل التشغيلات النصية بشكل حتمي. مُدخَلات مُعلَّمة بمزوّد تتجاوز البوابة. اختيار نموذج سجل مزوّده Anthropic أو Google أو DeepSeek يمر عبر عميل ومفتاح ذلك البائع الأصيلين. إذا توقعت ظهور التشغيل في سجل استخدام بوابتك ولم يظهر، فعمود provider للنموذج الذي اخترته هو التفسير. أخطاء بيانات تتنكّر كأخطاء LLM. بيانات السعر والأساسيات تأتي من واجهة البيانات المالية المُهيَّأة بـ FINANCIAL_DATASETS_API_KEY، خدمة منفصلة تماماً. مفتاح بيانات مفقود أو مُستنفَد يُفشِل التشغيل قبل أو بين استدعاءات LLM، ويمكن أن يبدو التتبع كمشكلة نموذج. بيانا الاعتماد يفشلان بشكل مستقل؛ صحّحهما بشكل مستقل. مطالبات تفاعلية في الأتمتة. حتى مع ضبط كل شيء، نسيان علم --model يفتح المنتقي. للتشغيلات غير المُراقَبة، مرّر دائماً --model بمعرّف مُسجَّل.
من يوجّه ai-hedge-fund عبر بوابة.
- مُختبِرو الاختبار الخلفي الذين يمسحون رموز أسهم ونطاقات تواريخ، حيث لجنة وكلاء لكل رمز سهم لكل تاريخ تجعل إنفاق tokens التكلفة المهيمنة والاستخدام لكل مفتاح الدفتر الطبيعي.
- الباحثون الذين يقارنون أحكام النماذج. نفس التشغيل تحت معرّفَي نموذج هو تغيير علم، والاختلاف بين إشارات النماذج بيانات مثيرة للاهتمام بحد ذاته.
- البناؤون الذين يوسّعون المستودع بوكلاء جدد ويريدون نقطة نهاية واحدة ومفتاحاً واحداً تحت أياً كان عدد الشخصيات التي يضيفونها.
- المطورون الذين يريدون استدلال Claude أو DeepSeek داخل مستودع مساره الأنظف للتوجيه بشكل OpenAI، دون الحفاظ على مفتاح بائع لكل مُدخَل مزوّد.
- المطورون الذين لا يملكون وصولاً إلى فوترة بائع معيّن. الوصول القائم على تعبئة الرصيد بدون شرط بطاقة يزيل الاعتماد على التسجيل لكل مزوّد.
تحقق من نقطة النهاية وصحّح أخطاء أول تشغيل.
تأكّد من أن البوابة تخدم المعرّفات التي سجّلتها قبل إطلاق تشغيل؛ سلاسل model_name في السجل يجب أن تطابق المعرّفات المخدومة تماماً. سلّم أخطاء أول تشغيل: 401 يعني أن OPENAI_API_KEY ليس مفتاح البوابة في البيئة التي أطلق فيها poetry فعلياً. خطأ model-not-found من البوابة يعني أن model_name في مُدخَل السجل به خطأ إملائي بالنسبة لـ /v1/models. تشغيل يتوقف لطلب إدخال يعني أن سلسلة --model فاتها السجل. خطأ مفتاح بائع (Anthropic، Google) يعني أن provider المُدخَل المُختار ليس OpenAI. وتتبع بشكل بيانات قبل أي مُخرَج نموذج يشير إلى FINANCIAL_DATASETS_API_KEY، لا مسار LLM. بمجرد اكتمال تشغيل، تعرض لوحة APIsRouter النموذج لكل طلب، وعدد tokens، والإنفاق. تشغيل اللجنة عشرات الاستدعاءات عبر مراحل المحلّلين والمخاطر والمحفظة، وعرض الاستخدام هو كيف ترى ما تكلفه قرار واحد فعلياً قبل أن توسّعه إلى مسح.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY" | head -50الأسئلة الشائعة
أي متغيّر بيئة يضبط base URL مخصصاً لـ ai-hedge-fund؟
OPENAI_API_BASE. مزوّد OpenAI في src/llm/models.py يبني ChatOpenAI بـ base_url=os.getenv("OPENAI_API_BASE"). OPENAI_BASE_URL لا يُقرَأ بواسطة هذا المستودع، لذا استخدم إملاء API_BASE بالضبط.
هل يمكن لـ ai-hedge-fund تشغيل نماذج Claude أو DeepSeek عبر مفتاح واحد؟
نعم، بتسجيل المعرّف في src/llm/api_models.json مع ضبط provider على "OpenAI". حقل provider يختار العميل، لذا مُدخَل مُعلَّم بـ OpenAI يمر عبر ChatOpenAI وOPENAI_API_BASE الخاص بك، ويُمرَّر معرّف الكتالوج إلى البوابة كسلسلة عادية.
لماذا يُنزِلني --model إلى منتقٍ تفاعلي؟
قيمة --model يُبحَث عنها بـ find_model_by_name() مقابل api_models.json. المعرّفات غير المعروفة لا تُخمَّن؛ تطبع الواجهة رسالة عدم عثور وتفتح المنتقي. أضف مُدخَل سجل للمعرّف وتُحَل التشغيلات النصية دون مطالبة.
هل لا أزال أحتاج ANTHROPIC_API_KEY أو مفاتيح بائعين أخرى؟
ليس للنماذج المُوجَّهة عبر البوابة. مفاتيح البائعين تُستشار فقط من مُدخَلات السجل المُعلَّمة بمزوّد ذلك البائع. إذا كان كل نموذج تشغّله مُسجَّلاً تحت مزوّد OpenAI، فمفتاح البوابة هو بيان اعتماد LLM الوحيد الذي يحتاجه التشغيل.
هل يتغيّر إعداد بيانات السوق عندما أغيّر نقطة نهاية LLM؟
لا. بيانات السعر والأساسيات تتدفق عبر واجهة البيانات المالية المُهيَّأة بـ FINANCIAL_DATASETS_API_KEY، وهي مستقلة عن base URL الخاص بـ LLM. بيانا الاعتماد يفشلان في مراحل مختلفة من التشغيل، لذا صحّحهما بشكل منفصل.
كم يكلّف تشغيل واحد لـ ai-hedge-fund؟
يتناسب مع الوكلاء ضرب رموز الأسهم: كل شخصية محلّل، بالإضافة إلى إدارة المخاطر والمحفظة، تستدل لكل رمز سهم. تشغيلات السلة الواحدة تحطّ عادة في عشرات إلى مئات آلاف tokens، ومسوحات الاختبار الخلفي تضاعف ذلك بشبكة التواريخ. عرض الاستخدام لكل مفتاح يعطيك الرقم الدقيق لكل تشغيل.