一、FinGPT 没有统一的 OPENAI 环境配置
FinGPT 是多个金融模型和实验子项目的集合。本文核对的 Forecaster app.py 直接用 Transformers 加载 meta-llama/Llama-2-7b-chat-hf,再用 PEFT 加载 FinGPT LoRA,并要求 HF_TOKEN、FINNHUB_API_KEY;它不是一个默认转发 Chat Completions 的网关应用。
旧文章中的 Main/backend/.env 与 scripts/dev_setup.py 不在本次官方树内。另一个 RAG 辅助脚本确实读取 OPENAI_API_KEY,但把URL和模型写死,不能由它推出整个仓库支持OPENAI_BASE_URL。本页采用显式的独立摘要层,不改写训练/推理的原生职责。
二、环境准备
先确认所用子项目;本地Forecaster按其实际requirements与模型许可准备。只做本页独立摘要时可使用Python标准库和已有真实报告,不需要为了摘要下载模型权重。
- 明确锁定 AI4Finance-Foundation/FinGPT 和所用子目录,不将同名第三方 Search Agent 当官方统一入口。
- Forecaster使用本地模型权重及LoRA;其模型访问条件、硬件与Finnhub数据凭据需要独立满足。
- 独立report.json由你从真实已完成结果整理,至少含ticker、as_of、sources、analysis;保留原输出和引用。
- 上方Python脚本是本站作者的外部摘要层;默认不读Key、不联网,未运行原模型或付费API。
继续配置 FinGPT
先看对应接入页,核对本文的配置字段与验证步骤,再回到原运行环境测试。
三、原生凭据与可选摘要Key
原生模型、数据凭据按上游单独准备。只有主动运行本页作者的独立摘要脚本时,才从tokenba_API_KEY和tokenba_MODEL读取兼容接口配置;这两个变量不会让原生训练自动调用API。
四、修改 FinGPT 模型配置
将下方作者脚本另存 summarize_fingpt.py。它要求 report.json 包含 ticker、as_of、sources、analysis,默认只输出字段与长度。密钥和模型只在 --run 时从外部环境读取。
import argparse
import json
import os
from pathlib import Path
from urllib.error import HTTPError
from urllib.request import Request, urlopen
parser = argparse.ArgumentParser()
parser.add_argument("input", type=Path)
parser.add_argument("--run", action="store_true")
args = parser.parse_args()
report = json.loads(args.input.read_text(encoding="utf-8"))
required = ['ticker', 'as_of', 'sources', 'analysis']
missing = [name for name in required if name not in report]
if missing:
raise SystemExit("缺少报告字段: " + ", ".join(missing))
text = json.dumps(report, ensure_ascii=False)
if len(text) > 40000:
raise SystemExit("先按同一实验范围筛选输入,不能静默截断报告")
if not args.run:
print(json.dumps({"mode": "dry-run", "fields": list(report), "characters": len(text)}, ensure_ascii=False))
raise SystemExit(0)
output = args.input.with_name(args.input.stem + ".tokenba-response.json")
if output.exists():
raise SystemExit("输出已存在,请先归档或换输入版本")
model = os.environ["tokenba_MODEL"]
key = os.environ["tokenba_API_KEY"]
body = {"model": model, "messages": [{"role": "system", "content": '仅依据这份 FinGPT 原始研究输出总结已提供的事实、模型判断、引用与缺失项。不要增加即时行情、收益预测或交易指令。'}, {"role": "user", "content": text}]}
request = Request("https://api.apizt.com/v1/chat/completions", data=json.dumps(body).encode("utf-8"), headers={"Authorization": "Bearer " + key, "Content-Type": "application/json"})
try:
with urlopen(request, timeout=120) as response:
result = json.load(response)
except HTTPError as error:
raise SystemExit(f"HTTP {error.code}:先检查平台记录,本脚本不自动重发") from error
output.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
print(output)
FinGPT 的配置字段与任务检查
需要的是外部摘要时,再接兼容 API
本页作者脚本只整理你提供的真实报告;apizt 不替代 FinGPT 本地权重、模型训练或财务资料获取。先离线检查,再由你显式发起一次摘要。
五、先做离线报告检查,再主动请求摘要
保留原始Forecaster输出,从实际结果整理report.json,先不加--run执行脚本检查字段。需要外部摘要时再显式调用;无真实原生结果时只保留准备状态,不生成假的FinGPT预测。
# 原生Forecaster路线需先满足模型许可、数据凭据和硬件条件
# 在锁定仓库 fingpt/FinGPT_Forecaster 目录按其requirements安装后:
python app.py
# 独立摘要目录另存上方脚本与真实report.json;不覆盖原项目
python summarize_fingpt.py report.json
# 设置tokenba_API_KEY和tokenba_MODEL后,主动执行才联网
python summarize_fingpt.py report.json --run- 报告写明真实标的、资料日期、来源URL和原模型判断。
- 离线检查不读取Key或联网;超过40000字符停止,不静默截断。
- 真实调用后保存原始JSON响应,摘要另列引用、缺失项和不确定判断。
- 核对原文数字与摘要;本页未执行FinGPT本地模型、训练或外部API。
六、查看 apizt 请求日志和成本
把原生模型运行日志、市场数据错误和外部摘要响应分开保存。脚本不自动重试POST,HTTP失败先核对平台记录;已有输出先归档,不能为了恢复而重复提交同一费用请求。
适合的量化调用场景
按任务与分组选择模型
原生基础权重/LoRA与外部摘要型号是两种不同对象。改变tokenba_MODEL不会改变FinGPT训练或Forecaster权重,摘要也不能证明预测能力或收益。
七、常见报错排查
先辨认报错来自哪个子项目与阶段,再处理依赖、权重、数据或HTTP,不能用一套环境变量覆盖所有入口。
常见问题
FinGPT 外部模型 API 接入从哪里配置?
官方 FinGPT 包含不同子项目。锁定 Forecaster 的 app.py 加载本地 Llama-2 与 LoRA,需要 HF_TOKEN 和 FINNHUB_API_KEY;它不会因填写 OPENAI_BASE_URL 就替换本地模型。本文把已保存研究输出交给独立摘要脚本,默认离线检查,显式 --run 才请求 apizt。
设置 API Key 会替换原生训练模型吗?
不会。本文API调用由独立的作者摘要脚本执行,原生数据、模型权重、训练和回测仍由对应上游流程负责。
继续配置 FinGPT
先看对应接入页,核对本文的配置字段与验证步骤,再回到原运行环境测试。
参考资料
本文依据下列项目源码说明接入位置与配置字段。不同版本先核对自己的入口和变量;上方通用界面示意不代替实际项目、模型调用与费用验收。
需要的是外部摘要时,再接兼容 API
本页作者脚本只整理你提供的真实报告;apizt 不替代 FinGPT 本地权重、模型训练或财务资料获取。先离线检查,再由你显式发起一次摘要。
