รัน TradingAgents บน custom OpenAI-compatible backend

Updated 2026-07-30

TradingAgents มาพร้อมโหมด provider openai_compatible ตั้ง backend_url เป็น https://api.apisrouter.com/v1 export key เดียว แล้ว agent ทั้ง deep-think และ quick-think จะ route ผ่าน endpoint เดียวโดยเรียกใช้โมเดลในแคตตาล็อกได้ทุกตัวด้วย id

คำตอบสั้น ๆ: สามการตั้งค่า route TradingAgents ไปที่ไหนก็ได้

TradingAgents รองรับ custom endpoint โดยตรง ตั้ง llm_provider เป็น "openai_compatible" ตั้ง backend_url เป็น address ของ endpoint คุณ แล้ว export OPENAI_COMPATIBLE_API_KEY พร้อม key สำหรับ endpoint นั้น กับ APIsRouter backend URL คือ https://api.apisrouter.com/v1 และทุกโมเดลในแคตตาล็อกจะเรียกใช้ได้จากช่อง deep_think_llm และ quick_think_llm ด้วย model id ที่แน่นอนของมัน นี่คือเส้นทาง configuration ที่มีเอกสารระบุใน repo ต้นทาง ไม่ใช่ fork หรือ patch ค่าเดียวกันยังส่งเป็นตัวแปร environment ได้ (TRADINGAGENTS_LLM_PROVIDER, TRADINGAGENTS_LLM_BACKEND_URL, TRADINGAGENTS_DEEP_THINK_LLM, TRADINGAGENTS_QUICK_THINK_LLM) ดังนั้นงานที่ตั้งเวลาหรือ CI runner สามารถสลับ backend ได้โดยไม่ต้องแตะโค้ด Python

config["llm_provider"] = "openai_compatible"
config["backend_url"] = "https://api.apisrouter.com/v1"
# auth: export OPENAI_COMPATIBLE_API_KEY=sk-...

TradingAgents คุยกับ LLM backend ของมันอย่างไร

TradingAgents (TauricResearch บน GitHub มีดาวมากกว่า 93K) คือ framework การเทรดแบบ multi-agent การวิเคราะห์หนึ่งครั้งกระจายไปยังทีม analyst ที่ครอบคลุม fundamentals, sentiment, ข่าว และ technicals จากนั้น bull researcher กับ bear researcher โต้แย้งกรณีตลอดหนึ่งหรือหลายรอบการโต้วาที trader agent เสนอตำแหน่ง แล้วชั้น risk-management ตรวจสอบก่อนการตัดสินใจสุดท้าย framework แบ่งงานนั้นออกเป็นสองช่องโมเดล deep_think_llm จัดการขั้นตอนที่ reasoning หนัก: การโต้วาทีวิจัย, การตัดสินใจของ trader และการทบทวนความเสี่ยง quick_think_llm จัดการขั้นตอนปริมาณสูง: อ่านข้อมูล, สรุปข่าว และร่างรายงาน analyst ทั้งสองช่องยิง request /v1/chat/completions มาตรฐาน การตั้งค่า provider ตัดสินแค่ว่า request เหล่านั้นไปที่ client และ host ไหน และ openai_compatible ส่งมันไปยัง backend_url ใดก็ตามที่คุณตั้งค่า โดยธรรมชาติ TradingAgents ยังรองรับ OpenAI, Anthropic, Google และ DeepSeek เป็น first-party provider แต่ละตัวต้องการบัญชี, key ของตัวเอง และ provider เดียวต่อการรัน โหมด openai_compatible ยุบสิ่งนั้นลง: TradingAgents ส่งฟิลด์ model ผ่านเป็นสตริงธรรมดา ดังนั้นเมื่อ endpoint หลัง backend_url เสิร์ฟหลาย vendor ช่อง deep-think แบบ Claude และช่อง quick-think แบบ GPT หรือ DeepSeek สามารถรันในการวิเคราะห์เดียวกันได้ การผสมต่อบทบาทนั้นคือเหตุผลเชิงปฏิบัติที่จะ route framework ผ่าน gateway แทน endpoint ของ vendor เดียว

ตั้งค่าแบบเต็ม: Python config หรือตัวแปร environment

เส้นทางแบบโปรแกรม copy DEFAULT_CONFIG แล้ว override สี่ key key ที่ยืนยันตัวตนกับ custom endpoint ถูกอ่านจาก OPENAI_COMPATIBLE_API_KEY ดังนั้นมันไม่จำเป็นต้องปรากฏใน config dict หรือไฟล์ source เลย เส้นทางตัวแปร environment ตั้งค่าเดียวกันผ่าน mapping _ENV_OVERRIDES ใน default_config.py และใช้ได้ทั้ง Python API และ CLI แบบโต้ตอบ (tradingagents หรือ python -m cli.main) สังเกตว่า backend_url มีค่าเริ่มต้นเป็น None ซึ่งในกรณีนั้น client ของแต่ละ provider จะตกกลับไปที่ endpoint ค่าเริ่มต้นของตัวเอง การ override จะมีผลก็ต่อเมื่อคุณตั้งค่ามันอย่างชัดเจน ข้อมูลตลาดเป็นเรื่องแยกต่างหาก TradingAgents ดึงราคาและ fundamentals ผ่าน data vendor ของมัน (เช่น ALPHA_VANTAGE_API_KEY) และ credential เหล่านั้นไม่เกี่ยวกับ LLM endpoint การเปลี่ยน backend_url ไม่แตะ data pipeline

from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG

config = DEFAULT_CONFIG.copy()
config["llm_provider"] = "openai_compatible"
config["backend_url"] = "https://api.apisrouter.com/v1"
config["deep_think_llm"] = "claude-opus-4-7"    # debate rounds + trade decision
config["quick_think_llm"] = "claude-sonnet-4-6" # analysts, summaries
config["max_debate_rounds"] = 2

ta = TradingAgentsGraph(debug=True, config=config)
_, decision = ta.propagate("NVDA", "2026-07-15")
print(decision)

เลือกโมเดล deep-think และ quick-think

ค่าเริ่มต้นจากต้นทางจับคู่โมเดล frontier ในช่อง deep กับโมเดล mini ในช่อง quick ซึ่งเป็นรูปทรงที่ถูกต้อง: ใช้กำลัง reasoning ตรงที่ตัดสินใจ และใช้กำลังปริมาณตรงที่อ่าน การ route ผ่าน endpoint เดียวทำให้การจับคู่นั้นเป็นการเปลี่ยนสองบรรทัดระหว่างการรัน ดังนั้น workflow เชิงปฏิบัติคือคง deep slot ไว้คงที่แล้ว A/B ช่อง quick กับ metric backtest ของคุณแทนการเดา

  • deep_think_llm แบกการโต้วาที bull/bear, การตัดสินใจของ trader และการทบทวนความเสี่ยง call น้อยต่อการรัน แต่แต่ละครั้งให้เหตุผลบน context analyst เต็ม และ max_debate_rounds คูณมันขึ้น นี่คือจุดที่โมเดล reasoning แบบ frontier (claude-opus-4-7, gpt-5.5) คุ้มค่ากับ token ที่จ่ายไป
  • quick_think_llm ยิงในทุกขั้นตอนของ analyst: อ่าน fundamentals, ให้คะแนน sentiment, สรุปข่าว, ร่างรายงาน ปริมาณ request ส่วนใหญ่ของการรันตกอยู่ตรงนี้ ดังนั้นโมเดลระดับกลางที่เร็ว (claude-sonnet-4-6, deepseek-v4-pro) เก็บการรันให้เร็วโดยไม่ทำให้ input การโต้วาทีด้อยลง
  • งาน context ยาว เช่นป้อน filing เต็มหรือ news window ขนาดใหญ่เข้าไปให้ analyst คือจุดที่ gemini-3.1-pro-preview คุ้มค่าที่จะทดสอบในช่อง quick
  • backtest ขยายทุกอย่าง sweep ข้าม 50 ticker และ 20 วันที่คือ propagate() 1,000 ครั้ง ดังนั้นการเลือกโมเดล quick-think ที่ดูเหมือนไม่สำคัญบนการรันเดียวจะครอบงำบิล token ที่ระดับ sweep

จ่ายตามการใช้งาน · ถูกกว่าราคาทางการ

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
Gemini 3.1 Pro Preview$2.00 / $12.00 per M$1.60 / $9.60 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M

Backtest ที่ระดับ sweep: key, การ pin และขีดจำกัด

เมื่อการตั้งค่าแบบรันเดียวใช้ได้แล้ว พื้นผิวความล้มเหลวจะย้ายไปที่ sweep นิสัยสามอย่างเก็บ backtest หลายวันให้ทำซ้ำได้และดีบักได้ pin model id ให้แน่นอน ชื่อโมเดลเปล่า ๆ บาง vendor คือตัวชี้ที่หมุนได้และย้ายไปยัง snapshot ใหม่อย่างเงียบ ๆ ซึ่งหมายความว่า backtest ที่เริ่มวันจันทร์และจบวันศุกร์อาจไม่ได้รันโมเดลเดียวกันตลอด ที่ใดที่แคตตาล็อกมี variant ที่ระบุวันที่ ให้ใส่ id ที่ระบุวันที่ลงใน config แล้วบันทึก config dict ไว้ข้าง ๆ ผลลัพธ์เหมือนกับ random seed ใช้ key หนึ่งต่อการทดลอง key สร้างได้ฟรี และการจำกัดขอบเขต key ให้กับ sweep หนึ่งตัวเปลี่ยน usage log ให้เป็นบัญชีต้นทุนของการทดลองนั้น: จำนวน token และค่าใช้จ่ายต่อโมเดล กรองได้เหลือแค่การรันใน sweep นั้นเป๊ะ เมื่อการทดลองสองอันแชร์ key เดียวกัน การระบุค่าใช้จ่ายภายหลังหมายถึงการ grep timestamp รู้เพดาน concurrency ของคุณก่อน parallelize propagate() เป็นแบบ synchronous ต่อ ticker-date ดังนั้น sweep มักแบ่ง shard ข้าม process แต่ละ shard คูณอัตรา request บนช่อง quick-think ก่อน และ 429 กลางการโต้วาทีเสียการรันทั้งหมด ไม่ใช่แค่ request เดียว ค่อย ๆ เพิ่มจำนวน shard พร้อมเฝ้าดู console แทนการเปิด worker ห้าสิบตัวทันที ช่อง upstream แบบ pooled ยกเพดานขึ้นแต่ไม่ได้ทำให้มันไม่มีที่สิ้นสุด

ใครที่ route TradingAgents ผ่าน gateway

  • ผู้ทำ backtest ที่รัน sweep แบบ ticker ต่อวันที่ propagate() หลายร้อยครั้งต่อการทดลองทำให้การมองเห็น usage ต่อ key และพื้นผิวการเก็บเงินเดียวมีประโยชน์กว่า dashboard ของ vendor สี่ตัว
  • นักวิจัยที่เปรียบเทียบคู่โมเดล การสลับ deep_think_llm ระหว่าง id ของ Claude, GPT และ DeepSeek คือการแก้ config กับ endpoint เดียว ไม่ใช่บัญชี vendor ใหม่ต่อผู้สมัคร
  • ทีมที่ผสม vendor ต่อบทบาท Claude สำหรับการโต้วาที DeepSeek สำหรับปริมาณของ analyst โหมด provider แบบ native ล็อกการรันไว้ที่ vendor เดียว แต่ endpoint หลาย vendor ไม่ล็อก
  • นักพัฒนาที่ไม่มีสิทธิ์เข้าถึงระบบเก็บเงินของ vendor รายหนึ่ง การเข้าถึงแบบเติมเงินโดยไม่ต้องใช้บัตรตัดการพึ่งพาการสมัครต่อ provider ออกไป
  • การรันแบบตั้งเวลาและ CI การตั้งค่าแบบ env-only หมายความว่า runner image ต้องการ secret เดียว (OPENAI_COMPATIBLE_API_KEY) แทนที่จะเป็นหนึ่งตัวต่อ provider

ตรวจสอบ endpoint และ debug การรันแรก

ก่อนรันการวิเคราะห์เต็ม ยืนยันว่า endpoint ตอบด้วยโมเดลที่คุณวางแผนจะใช้ curl หนึ่งบรรทัดต่อ /v1/models ด้วย key ของคุณลิสต์ทุก id ที่เรียกใช้ได้ สตริงใน deep_think_llm และ quick_think_llm ต้องตรงกับ id เหล่านั้นเป๊ะ รูปแบบความล้มเหลวบนการรันครั้งแรกมีความสม่ำเสมอ 401 เกือบทั้งหมดหมายความว่า OPENAI_COMPATIBLE_API_KEY ถูก export ใน shell คนละตัวกับที่รัน tradingagents หรือไม่ได้ export เลย env var ที่ตั้งใน .bashrc จะไม่ไปถึง systemd unit หรือ cron job นอกจากไฟล์ unit จะ export มันเอง error model-not-found หมายความว่าสตริง id ไม่ตรงกับแคตตาล็อก: id ต้องตรงเป๊ะ รวม suffix เวอร์ชัน และ output ของ /v1/models ด้านบนคือแหล่งความจริง connection error ที่มี backend_url ตั้งไว้แล้วมักหมายความว่า URL ขาด suffix /v1 เพราะ client เติม path อย่าง /chat/completions ต่อ base ใดก็ตามที่คุณให้ ถ้าการรันทำงานได้แต่ดูเหมือนค้างในเฟสโต้วาที นั่นเป็น latency ปกติสำหรับโมเดล reasoning บน context ยาว ไม่ใช่ปัญหา endpoint คง debug=True ไว้เพื่อดู agent step แบบ stream timeout จริงบน turn deep-think ที่ยาวมากเป็นการตั้งค่าฝั่ง client และคุ้มค่าที่จะยกขึ้นก่อนสรุปว่า backend ทิ้ง request เมื่อ request ไหลลื่นแล้ว console ของ APIsRouter แสดงโมเดลต่อ request, จำนวน token และค่าใช้จ่าย ซึ่งสำหรับ framework ที่เรียก call หนักขนาดนี้เป็นวิธีที่เร็วที่สุดในการเห็นว่า token ของการรันไปที่ไหนบ้าง

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

คำถามที่พบบ่อย

TradingAgents รองรับโมเดล Claude และ Gemini ผ่าน endpoint openai_compatible เดียวไหม?

รองรับ ในโหมด openai_compatible framework ส่งฟิลด์ model เป็นสตริงธรรมดาไปยัง backend_url ผ่าน /v1/chat/completions id ใดก็ตามที่ endpoint เสิร์ฟใช้ได้ รวมถึง id ของ Claude, Gemini และ DeepSeek ในทั้งช่อง deep-think หรือ quick-think

TradingAgents ใช้ API key ตัวไหนกับ backend_url ที่กำหนดเอง?

OPENAI_COMPATIBLE_API_KEY provider openai_compatible อ่านมันจาก environment ดังนั้น key ไม่ปรากฏใน config dict หรือไฟล์ source เลย OPENAI_API_KEY ใช้แค่กับ provider openai แบบ native เท่านั้น

deep_think_llm และ quick_think_llm มาจาก vendor ต่างกันในการรันเดียวกันได้ไหม?

ผ่าน endpoint หลาย vendor ได้: ทั้งสองช่อง post ไปที่ backend_url เดียวกันและสตริงโมเดลตัดสิน vendor ต่อ request ด้วย provider แบบ native (openai, anthropic, google, deepseek) การรันหนึ่งครั้งจะล็อกอยู่ที่ vendor เดียวสำหรับทั้งสองช่อง

ฉันยังต้องมีบัญชี OpenAI ไหมเมื่อตั้ง backend_url แล้ว?

ไม่ต้อง เมื่อ llm_provider ตั้งเป็น openai_compatible ไม่มี request ใดไปที่ host ของ OpenAI และ OPENAI_API_KEY จะไม่ถูกอ่าน คุณยังต้องมี credential ข้อมูลตลาดที่ TradingAgents ใช้ (เช่น ALPHA_VANTAGE_API_KEY) ซึ่งเป็นอิสระจาก LLM endpoint

CLI แบบโต้ตอบเคารพ custom endpoint ด้วยไหม?

เคารพ CLI (tradingagents หรือ python -m cli.main) resolve config เดียวกัน และตัวแปร environment TRADINGAGENTS_LLM_PROVIDER / TRADINGAGENTS_LLM_BACKEND_URL override มันก่อนถึง prompt provider ดังนั้นการรัน CLI แบบตั้งเวลาหรือใน container ไม่ต้องมี input แบบโต้ตอบสำหรับ routing

การวิเคราะห์ TradingAgents หนึ่งครั้งใช้ token กี่ตัว?

แปรผันตาม max_debate_rounds, จำนวน analyst และปริมาณ context ตลาดที่พวกเขากิน การวิเคราะห์ ticker-date เดียวมักอยู่ในหลักแสน token ส่วนใหญ่อยู่บนช่อง quick-think มุมมอง usage ต่อ key ใน console ของ APIsRouter แสดงการแบ่งที่แน่นอนต่อการรัน ซึ่งเชื่อถือได้มากกว่าการประมาณ