Chạy FinRobot trên một endpoint tương thích OpenAI tùy chỉnh.
Updated 2026-07-30
FinRobot đọc credential LLM của nó từ một file AutoGen OAI_CONFIG_LIST mà các entry chấp nhận một khóa base_url. Thêm một entry trỏ vào https://api.apisrouter.com/v1 với một key gateway, và các agent dự báo, viết báo cáo, và RAG có thể chạy trên bất kỳ id model nào trong catalog.
Câu trả lời nhanh: một entry trong OAI_CONFIG_LIST.
Hướng dẫn cài đặt của FinRobot yêu cầu bạn đổi tên OAI_CONFIG_LIST_sample thành OAI_CONFIG_LIST và điền credential. File đó là một config list AutoGen chuẩn: một mảng JSON nơi mỗi entry nhận model và api_key, và tùy chọn base_url, thứ mà chính mẫu đi kèm đã minh họa cho các endpoint không mặc định. Thêm một entry với key gateway của bạn và base_url đặt thành https://api.apisrouter.com/v1, và mọi agent FinRobot nạp file đó có thể định tuyến qua nó. Một cái bẫy khiến người ta mất thời gian: các tutorial nạp file qua autogen.config_list_from_json với một filter_dict chọn entry theo tên model. Nếu entry mới của bạn nói claude-sonnet-4-6 nhưng filter vẫn hỏi id GPT của mẫu, entry của bạn bị lọc ra và lần chạy thất bại trên credential cũ. Cập nhật filter_dict để khớp model bạn đã thêm, hoặc bỏ filter khi đang thử nghiệm.
[
{
"model": "claude-sonnet-4-6",
"api_key": "sk-YOUR-APISROUTER-KEY",
"base_url": "https://api.apisrouter.com/v1"
}
]Cách FinRobot dùng cấu hình LLM của nó.
FinRobot (AI4Finance-Foundation trên GitHub, khoảng 7.6K star) là một nền tảng AI agent cho phân tích tài chính xây trên AutoGen (pyautogen 0.2.19 trở lên). Các agent của nó là các workflow đóng gói sẵn: một Market_Analyst dự báo lấy tin tức công ty và dữ liệu cơ bản rồi dự đoán biến động tuần tới, một người viết báo cáo thường niên biến hồ sơ thành một PDF nghiên cứu cổ phiếu, và các agent QA có căn cứ truy xuất trên các cuộc gọi thu nhập và hồ sơ SEC. Mỗi tutorial xây cùng một hình dạng llm_config: một dict có config_list đến từ autogen.config_list_from_json đọc file OAI_CONFIG_LIST. llm_config đó được trao cho các class wrapper như SingleAssistant và SingleAssistantShadow từ finrobot.agents.workflow, thứ sở hữu các agent AutoGen bên dưới. Quyết định endpoint do đó sống hoàn toàn trong file JSON: client OpenAI của AutoGen gửi request /v1/chat/completions tới bất kỳ base_url nào entry đã chọn mang, và chuyển tiếp trường model dưới dạng một chuỗi trơn. Chuỗi trơn đó là chiến thắng thực tế. Khi endpoint sau base_url phục vụ nhiều vendor, một id Claude, DeepSeek, hoặc Qwen cưỡi qua cùng config hình dạng OpenAI mà FinRobot không hề để ý, và việc đổi model phân tích trở thành một chỉnh sửa JSON một dòng cộng một filter_dict khớp.
Cài đặt đầy đủ: file cấu hình, filter, và key dữ liệu.
FinRobot chia credential thành hai file, và chỉ một trong số đó liên quan tới LLM. OAI_CONFIG_LIST giữ endpoint và key model. config_api_keys giữ credential dữ liệu thị trường (FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY, và các key mạng xã hội), nạp riêng qua register_keys_from_json. Định tuyến LLM qua một gateway đổi file đầu tiên và để yên file thứ hai, nên việc lấy tin tức, dữ liệu cơ bản, và hồ sơ vẫn hoạt động y hệt như trước. Mẫu tutorial dưới đây là cấu trúc của notebook dự báo với entry gateway đã chọn. Cùng llm_config đó hoạt động cho các tutorial báo cáo thường niên và RAG, thứ chỉ khác ở class workflow chúng khởi tạo.
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.")Chọn model theo từng workflow FinRobot.
Vòng lặp thử nghiệm sạch: cố định ticker và khoảng ngày, chạy cùng workflow một lần cho mỗi entry ứng viên, và so sánh đầu ra cạnh nhau. Sau một endpoint, mỗi ứng viên là một chỉnh sửa filter_dict, và log sử dụng theo từng key cho bạn hóa đơn token mỗi ứng viên mà không cần làm việc với bảng tính.
- Người viết báo cáo thường niên là công việc lý luận nặng nhất: nó đọc các phần hồ sơ, tổng hợp một luận điểm đầu tư, và soạn một báo cáo có cấu trúc. claude-opus-4-7 hoặc gpt-5.5 trong workflow đó là nơi chất lượng đầu ra thay đổi rõ rệt.
- Bộ dự báo thị trường là một tác vụ ngắn hơn, lặp lại trên tin tức và dữ liệu cơ bản. claude-sonnet-4-6 hoặc deepseek-v4-pro xử lý tốt, và quan trọng khi bạn chạy nó hàng ngày qua một watchlist.
- RAG QA trên các cuộc gọi thu nhập là truy xuất cộng tổng hợp trên các đoạn trích dài, thứ ưu ái các id long-context; gemini-3.1-pro-preview đáng thử nghiệm cạnh claude-sonnet-4-6 ở đó.
- Vì các entry được chọn bằng filter_dict, bạn có thể giữ một file với một entry frontier và một entry nhanh trên cùng base_url và chọn theo từng notebook, thay vì sửa credential theo từng lần chạy.
- Id model là các chuỗi chính xác. FinRobot chuyển tiếp chúng không xác thực, nên danh sách /v1/models của endpoint là cách viết có thẩm quyền.
Trả theo mức sử dụng · thấp hơn giá chính thức
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Mô hình | Giá chính thức | Giá của chúng tôi |
|---|---|---|
| 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 |
Các kiểu lỗi đặc thù của FinRobot.
Sự không khớp filter_dict là lỗi lớn nhất. config_list_from_json chỉ trả về các entry có model khớp filter; một filter không khớp gì gây ra lỗi về một config list rỗng, và một filter khớp các entry còn sót của mẫu gửi request tới OpenAI với key giữ chỗ, biểu hiện thành một lỗi 401 từ sai host. Khi thay đổi định tuyến có vẻ không có hiệu lực, hãy in ra config_list đã giải quyết trước. Đường dẫn tương đối là lỗi thứ hai. Các tutorial nạp "../OAI_CONFIG_LIST" vì notebook nằm dưới gốc repo một cấp; một script ở gốc muốn "OAI_CONFIG_LIST" thay vào đó, và AutoGen cũng chấp nhận biến môi trường OAI_CONFIG_LIST mang chuỗi JSON, thứ tránh được vấn đề đường dẫn trong container. Dòng comment là lỗi thứ ba. Hướng dẫn cài đặt bảo bạn xóa các ghi chú comment khỏi file mẫu vì chúng khiến JSON không hợp lệ; một JSONDecodeError lúc khởi động nghĩa là một comment lạc còn sót. Credential dữ liệu thất bại độc lập. Nếu agent chat vẫn hoạt động nhưng tin tức hoặc dữ liệu cơ bản trả về rỗng, đó là vấn đề config_api_keys (Finnhub, FMP, SEC), không phải vấn đề endpoint. Và module cổ phiếu FinRobot Pro riêng biệt cấu hình key của nó qua một config.ini thay vào đó; tính đến tháng 7/2026 các cài đặt đã tài liệu hóa của nó bao gồm một openai_api_key nhưng không có ghi đè base-url, nên hãy coi module đó là vendor trực tiếp cho tới khi upstream tài liệu hóa một biến.
Ai định tuyến FinRobot qua một gateway.
- Nhà phân tích tạo báo cáo cổ phiếu qua một danh sách theo dõi. Context hồ sơ dài mỗi báo cáo khiến chênh lệch giá theo từng model quan trọng, và một endpoint khiến model trở thành lựa chọn theo từng lần chạy.
- Đội quant chạy bộ dự báo hàng ngày qua một watchlist, nơi một id tầng trung nhanh giữ hóa đơn định kỳ ổn định mà không cần viết lại workflow.
- Nhà nghiên cứu so sánh các họ model trên cùng tác vụ tài chính. Mỗi ứng viên là một entry config, không phải một tài khoản vendor và đổi SDK.
- Đội chuẩn hóa các stack dựa trên AutoGen. FinRobot chia sẻ quy ước OAI_CONFIG_LIST với các dự án AutoGen khác, nên một định dạng entry gateway phục vụ tất cả chúng.
- Lập trình viên không có quyền truy cập billing của một vendor cụ thể. Truy cập dựa trên nạp tiền không yêu cầu thẻ loại bỏ phụ thuộc đăng ký theo từng provider.
Xác minh endpoint và debug lần chạy đầu tiên.
Liệt kê các model key của bạn có thể gọi được trước khi mở một notebook; mọi chuỗi model trong OAI_CONFIG_LIST và mọi giá trị filter_dict phải khớp chính xác một id đã phục vụ. Sau đó chạy đoạn chat ngắn nhất có thể qua SingleAssistant và theo dõi console. Một lỗi 401 nghĩa là api_key của entry đã chọn không thuộc về endpoint trong base_url của nó; kiểm tra filter thực sự đã chọn entry nào. Một lỗi model-not-found là một id gõ sai trong entry. Một lỗi kết nối thường nghĩa là base_url mất hậu tố /v1. Nếu agent lặp vòng mà không có kết quả tool, các key dữ liệu trong config_api_keys là nghi phạm, không phải endpoint LLM. Khi request chảy qua, console APIsRouter hiển thị model theo từng request, số lượng token, và chi tiêu. Các lần chạy viết báo cáo là các hội thoại đa lượt dài, và góc nhìn sử dụng cho thấy một báo cáo thực sự tốn bao nhiêu trước khi bạn lên lịch năm mươi cái.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Câu hỏi thường gặp
FinRobot có hỗ trợ một endpoint tương thích OpenAI tùy chỉnh không?
Có. FinRobot đọc các entry OAI_CONFIG_LIST kiểu AutoGen, và các entry chấp nhận một khóa base_url cùng model và api_key. Trỏ base_url vào gateway, giữ filter_dict khớp model của entry, và các agent định tuyến qua nó.
Các agent FinRobot có thể chạy trên model Claude, DeepSeek, hoặc Qwen không?
Có. AutoGen chuyển tiếp trường model dưới dạng một chuỗi trơn qua /v1/chat/completions, nên bất kỳ id nào endpoint phục vụ đều hoạt động. Tên model trong entry và trong filter_dict chỉ cần khớp chính xác id catalog.
Vì sao FinRobot bỏ qua entry OAI_CONFIG_LIST mới của tôi?
Hầu như luôn là filter_dict. Các tutorial lọc entry theo tên model, nên một entry có model không khớp filter sẽ bị loại trừ âm thầm. Cập nhật filter_dict thành id model mới của bạn, hoặc nạp file không kèm filter khi thử nghiệm.
Key Finnhub, FMP, và SEC của tôi có đổi khi tôi đổi endpoint LLM không?
Không. Credential dữ liệu thị trường sống trong config_api_keys và nạp qua register_keys_from_json, hoàn toàn tách biệt với OAI_CONFIG_LIST. Định tuyến LLM qua một gateway không chạm vào pipeline dữ liệu.
Điều này áp dụng cho phiên bản AutoGen nào?
FinRobot ghim pyautogen 0.2.19 trở lên và dùng bộ nạp config_list_from_json kiểu 0.2. Khóa base_url trong các entry config là chuẩn xuyên suốt thế hệ đó, nên không cần thay đổi code FinRobot nào.
Module cổ phiếu FinRobot Pro có tôn trọng base_url không?
Không như tài liệu hiện có. config.ini của nó phơi bày một openai_api_key dưới API_KEYS nhưng không có ghi đè endpoint tính đến tháng 7/2026. Việc định tuyến OAI_CONFIG_LIST mô tả ở đây áp dụng cho các agent và tutorial FinRobot chính.