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 تنظیم کنید، یک کلید export کنید، و هر agent تحلیل‌گر در fund از طریق یک endpoint واحد مسیردهی می‌شود.

پاسخ سریع: OPENAI_API_BASE به‌علاوه یک کلید.

provider 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 می‌آید. پس override دو خط در .env است: OPENAI_API_BASE را روی https://api.apisrouter.com/v1 بگذارید و OPENAI_API_KEY را روی کلید gateway خود تنظیم کنید. هر مدلی که از طریق provider OpenAI اجرا می‌شود اکنون به gateway پست می‌کند. نام متغیر را دقیق بررسی کنید: آن OPENAI_API_BASE است، قرارداد دوران LangChain، نه OPENAI_BASE_URL. export کردن متغیر اشتباه بی‌صدا نادیده گرفته می‌شود و درخواست‌ها همچنان به 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 یک مدل و یک provider انتخاب می‌کند.

ai-hedge-fund (virattt در GitHub، حدود ۶۲ هزار ستاره) یک fund را به‌عنوان یک کمیته از agent ها شبیه‌سازی می‌کند: پرسوناهای تحلیل‌گر مدل‌شده بر اساس سرمایه‌گذاران شناخته‌شده، به‌علاوه agent های ارزش‌گذاری، احساسات، بنیادی، و تکنیکال، که به یک risk manager و یک portfolio manager تغذیه می‌شوند که سیگنال‌های نهایی را تولید می‌کنند. همه آن‌ها یک انتخاب مدل را در هر اجرا به اشتراک می‌گذارند، پس یک اجرای تکی تصمیم مدل شما را در سرتاسر هر agent و هر ticker ضرب می‌کند. انتخاب مدل دو مسیر دارد. به‌صورت تعاملی، اجرای poetry run python src/main.py --ticker AAPL,MSFT,NVDA بدون flag مدل یک انتخاب‌گر questionary باز می‌کند. به‌صورت اسکریپت‌شده، flag --model یک نام مدل می‌گیرد، اما فقط نام‌هایی که در رجیستری مدل repo وجود دارند: find_model_by_name() رشته را در src/llm/api_models.json جست‌وجو می‌کند، و هر ورودی رجیستری display_name، model_name، و provider حمل می‌کند. اگر جست‌وجو شکست بخورد، CLI یک provider را حدس نمی‌زند؛ به انتخاب‌گر تعاملی برمی‌گردد، که برای اتوماسیون اهمیت دارد چون یک id ناشناخته یک اجرای اسکریپت‌شده را به اجرایی تبدیل می‌کند که منتظر ورودی صفحه‌کلید می‌ماند. فیلد provider همان چیزی است که مسیردهی را تصمیم می‌گیرد. ورودی‌های علامت‌گذاری‌شده با OpenAI از طریق ChatOpenAI می‌روند و OPENAI_API_BASE را محترم می‌شمارند؛ ورودی‌های علامت‌گذاری‌شده با Anthropic از طریق ChatAnthropic و ANTHROPIC_API_KEY می‌روند، و base URL شما را کاملاً دور می‌زنند. این همان بینش کلیدی برای مسیردهی gateway است: ستون provider کلاینت و در نتیجه endpoint را انتخاب می‌کند، مستقل از اینکه واقعاً چه کسی مدل را ساخته.

راه‌اندازی کامل: .env به‌علاوه یک ورودی رجیستری به ازای هر مدل gateway.

برای مدل‌هایی که رجیستری از قبل زیر provider OpenAI فهرست کرده، override تنها در .env کافی است؛ رشته مدل همان‌طور که هست به endpoint فوروارد می‌شود. برای اجرای یک id از Claude، DeepSeek، یا Qwen از طریق gateway روی همان کلید، یک ورودی به src/llm/api_models.json با id کاتالوگ به‌عنوان model_name و، نکته حیاتی، "OpenAI" به‌عنوان provider اضافه کنید. provider کلاینت را انتخاب می‌کند، پس یک ورودی علامت‌گذاری‌شده با OpenAI از طریق ChatOpenAI و OPENAI_API_BASE شما مسیردهی می‌شود حتی اگر خود مدل یک مدل OpenAI نباشد. سپس ورودی در انتخاب‌گر تعاملی ظاهر می‌شود و از طریق --model در اسکریپت‌ها resolve می‌شود. این یک ویرایش JSON سه‌خطی در clone شماست، نه یک تغییر کد، و شکل مستندی است که رجیستری از قبل استفاده می‌کند. ورودی‌های provider-native را به‌عنوان تضاد در ذهن نگه دارید: انتخاب یک مدل رجیستری علامت‌گذاری‌شده با Anthropic به‌دنبال ANTHROPIC_API_KEY می‌گردد و مستقیم به endpoint خود Anthropic می‌رود. اگر قصد شما یک کلید gateway برای همه‌چیز است، مدل‌های خود را از طریق ورودی‌های علامت‌گذاری‌شده با OpenAI اجرا کنید و می‌توانید کلیدهای هر-vendor را کاملاً تنظیم‌نشده رها کنید.

{
  "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"
}

انتخاب یک مدل برای یک کمیته agent.

چون رجیستری هر کاندید را پشت یک flag قابل‌آدرس‌دهی می‌کند، ارزیابی صادقانه تجربی است: همان ticker ها و تاریخ‌ها را از طریق دو یا سه مدل اجرا کنید و سیگنال‌ها و هزینه را مقایسه کنید. نمای usage هر-کلید هر sweep را برای شما قیمت‌گذاری می‌کند، که انتخاب مدل را از یک بحث به یک اندازه‌گیری تبدیل می‌کند.

  • یک اجرا یعنی بسیاری verdict. هر پرسونای تحلیل‌گر روی همان filings و داده قیمت به ازای هر ticker استدلال می‌کند، پس انتخاب مدل در تعداد agent ضرب در تعداد ticker ضرب می‌شود. یک id استدلال frontier (claude-opus-4-7، gpt-5.5) کیفیت هر verdict را بالا می‌برد با صورت‌حساب token ضرب‌شده به همان نسبت.
  • claude-sonnet-4-6 پیش‌فرض معقول است: به‌اندازه کافی قوی که استدلال پرسونا در سرتاسر context بنیادی بلند منسجم بماند، قیمت‌گذاری‌شده برای اجراهایی که در سرتاسر دوازده agent و یک سبد از ticker ها شاخه می‌شوند.
  • deepseek-v4-pro و qwen3.7-max ارزش benchmark کردن برای sweep های گسترده را دارند، جایی که شکاف قیمت هر-اجرا در سرتاسر هر تاریخ backtest انباشته می‌شود.
  • هرچه انتخاب کنید، آن را pin کنید. سیگنال‌ها از snapshot های مختلف یک مدل متحرک در سرتاسر یک پنجره backtest قابل‌مقایسه نیستند؛ از id های دقیق استفاده کنید و رشته مدل را کنار نتایج مثل یک random seed ثبت کنید.

پرداخت بر اساس مصرف · پایین‌تر از قیمت رسمی

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.

متغیر محیطی اشتباه. این repo فقط OPENAI_API_BASE را می‌خواند. OPENAI_BASE_URL، متغیری که ابزارهای دیگر استفاده می‌کنند، مشورت گرفته نمی‌شود، و تنظیم آن هیچ کاری نمی‌کند جز اینکه شما را متقاعد کند override خراب است. اگر درخواست‌ها همچنان به api.openai.com می‌خورند، قبل از هر چیز نام متغیر را چک کنید. --model با یک id ثبت‌نشده. find_model_by_name() فقط ورودی‌های api_models.json را می‌شناسد. یک id کاتالوگ که ثبت نشده پاس دهید و CLI یک پیام not-found چاپ می‌کند و به انتخاب‌گر تعاملی می‌افتد، که در یک cron job یا اجرای CI به‌معنای یک hang بی‌صدا است، نه یک خروج با خطا. ابتدا id را ثبت کنید؛ سپس اجراهای اسکریپت‌شده آن را قطعی resolve می‌کنند. ورودی‌های علامت‌گذاری‌شده با provider که gateway را دور می‌زنند. انتخاب یک مدل رجیستری که provider آن Anthropic، Google، یا DeepSeek است از طریق کلاینت و کلید native همان vendor مسیردهی می‌شود. اگر انتظار داشتید اجرا در usage log gateway شما ظاهر شود و نشد، ستون provider مدلی که انتخاب کردید توضیح آن است. خطاهای داده که شبیه خطاهای LLM ظاهر می‌شوند. داده قیمت و بنیادی از API مالی پیکربندی‌شده توسط FINANCIAL_DATASETS_API_KEY می‌آید، سرویسی کاملاً جدا. یک کلید داده غایب یا اتمام‌یافته اجرا را قبل از یا بین فراخوانی‌های LLM شکست می‌دهد، و traceback می‌تواند مثل یک مشکل مدل خوانده شود. این دو credential مستقلاً شکست می‌خورند؛ آن‌ها را مستقلاً دیباگ کنید. prompt های تعاملی در اتوماسیون. حتی با پیکربندی همه‌چیز، فراموش‌کردن flag --model انتخاب‌گر را باز می‌کند. برای اجراهای بدون‌ناظر، همیشه --model را با یک id ثبت‌شده پاس دهید.

چه کسانی ai-hedge-fund را از طریق یک gateway مسیردهی می‌کنند.

  • Backtester هایی که ticker ها و بازه‌های تاریخ را sweep می‌کنند، جایی که یک کمیته agent به ازای هر ticker به ازای هر تاریخ مصرف token را هزینه غالب و usage هر-کلید را دفتر طبیعی می‌کند.
  • پژوهشگرانی که verdict های مدل را مقایسه می‌کنند. همان اجرا زیر دو id مدل یک تغییر flag است، و عدم‌توافق سیگنال بین مدل‌ها خودش داده جالبی است.
  • سازندگانی که repo را با agent های جدید گسترش می‌دهند و یک endpoint و یک کلید زیر هرچند پرسونایی که اضافه می‌کنند می‌خواهند.
  • توسعه‌دهندگانی که استدلال Claude یا DeepSeek را داخل یک repo می‌خواهند که تمیزترین مسیر مسیردهی آن به‌شکل OpenAI است، بدون نگه‌داری یک کلید vendor به ازای هر ورودی provider.
  • توسعه‌دهندگان بدون دسترسی به صورت‌حساب یک vendor خاص. دسترسی مبتنی بر شارژ بدون الزام کارت وابستگی ثبت‌نام هر-provider را حذف می‌کند.

endpoint را تأیید کنید و اولین اجرا را عیب‌یابی کنید.

تأیید کنید gateway قبل از راه‌اندازی یک اجرا id هایی که ثبت کرده‌اید را سرویس می‌دهد؛ رشته‌های model_name رجیستری باید دقیقاً با id های سرویس‌داده‌شده مطابقت داشته باشند. نردبان شکست اجرای اول: یک ۴۰۱ یعنی OPENAI_API_KEY کلید gateway در محیطی نیست که poetry واقعاً با آن راه‌اندازی شده. یک خطای model-not-found از gateway یعنی model_name ورودی رجیستری نسبت به /v1/models یک غلط‌تایپی دارد. اجرایی که متوقف می‌شود تا ورودی بخواهد یعنی رشته --model رجیستری را از دست داده. یک خطای کلید-vendor (Anthropic، Google) یعنی provider ورودی انتخاب‌شده OpenAI نیست. و یک traceback به‌شکل داده قبل از هر خروجی مدل به FINANCIAL_DATASETS_API_KEY اشاره دارد، نه مسیر LLM. وقتی یک اجرا کامل شود، کنسول APIsRouter مدل، شمارش token، و هزینه هر-درخواست را نشان می‌دهد. یک اجرای کمیته ده‌ها فراخوانی در سرتاسر مراحل تحلیل‌گر، ریسک، و portfolio است، و نمای usage روشی است که می‌بینید یک تصمیم واقعاً چقدر هزینه دارد قبل از اینکه آن را به یک sweep مقیاس دهید.

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

پرسش‌های پرتکرار

کدام متغیر محیطی یک base URL سفارشی برای ai-hedge-fund تنظیم می‌کند؟

OPENAI_API_BASE. provider OpenAI در src/llm/models.py با base_url=os.getenv("OPENAI_API_BASE") ChatOpenAI را می‌سازد. OPENAI_BASE_URL توسط این repo خوانده نمی‌شود، پس دقیقاً از املای API_BASE استفاده کنید.

آیا ai-hedge-fund می‌تواند مدل‌های Claude یا DeepSeek را از طریق یک کلید اجرا کند؟

بله، با ثبت id در src/llm/api_models.json با provider تنظیم‌شده روی "OpenAI". provider کلاینت را انتخاب می‌کند، پس یک ورودی علامت‌گذاری‌شده با OpenAI از طریق ChatOpenAI و OPENAI_API_BASE شما مسیردهی می‌شود، و id کاتالوگ به‌عنوان رشته ساده به gateway فوروارد می‌شود.

چرا --model من را به یک انتخاب‌گر تعاملی می‌اندازد؟

مقدار --model با find_model_by_name() در برابر api_models.json جست‌وجو می‌شود. id های ناشناخته حدس زده نمی‌شوند؛ CLI یک پیام not-found چاپ می‌کند و انتخاب‌گر را باز می‌کند. یک ورودی رجیستری برای id اضافه کنید و اجراهای اسکریپت‌شده آن را بدون prompt resolve می‌کنند.

آیا هنوز به ANTHROPIC_API_KEY یا کلیدهای vendor دیگر نیاز دارم؟

برای مدل‌های مسیردهی‌شده از طریق gateway، خیر. کلیدهای vendor فقط توسط ورودی‌های رجیستری علامت‌گذاری‌شده با provider همان vendor مشورت گرفته می‌شوند. اگر هر مدلی که اجرا می‌کنید زیر provider OpenAI ثبت شده، کلید gateway تنها credential LLM ای است که اجرا نیاز دارد.

آیا راه‌اندازی داده بازار وقتی endpoint LLM را تغییر می‌دهم عوض می‌شود؟

خیر. داده قیمت و بنیادی از طریق API مالی پیکربندی‌شده توسط FINANCIAL_DATASETS_API_KEY جریان می‌یابد، که مستقل از base URL LLM است. این دو credential در مراحل مختلف یک اجرا شکست می‌خورند، پس آن‌ها را جداگانه دیباگ کنید.

یک اجرای ai-hedge-fund چقدر هزینه دارد؟

با agent ها ضرب در ticker ها مقیاس می‌گیرد: هر پرسونای تحلیل‌گر، به‌علاوه مدیریت ریسک و portfolio، به ازای هر ticker استدلال می‌کند. اجراهای یک-سبدی معمولاً در ده‌ها تا صدها هزار token فرود می‌آیند، و sweep های backtest آن را در شبکه تاریخ ضرب می‌کنند. نمای usage هر-کلید عدد دقیق به ازای هر اجرا را می‌دهد.