一、升级概览
2025 年 10 月 25 日,TradingAgents-CN 完成了一次全面的 系统优化。
本次更新通过 28 个提交,完成了 302.ai 聚合平台接入、深色主题优化、配置管理改进、智谱 AI URL 修复、WebSocket 连接优化 等多项工作。
这次更新显著提升了系统的 易用性、稳定性、模型兼容性和用户体验。
核心改进
- 302.ai 聚合平台接入:通过统一 API 访问 OpenAI、Anthropic、Google 等多家模型服务。
- 智谱 AI URL 修复:解决 GLM-4.6 等非标准版本号 API 的 URL 拼接错误。
- WebSocket 连接优化:统一开发与生产环境连接逻辑。
- 深色主题优化:提升暗色模式下按钮、文本、卡片和页面头部的对比度。
- 分析报告字段完善:支持完整的 13 个报告模块。
- 自选股功能修复:统一使用
user_favorites集合存储自选股。 - 配置管理优化:支持数据导出脱敏、配置导入覆盖模式和 Docker/宿主机环境。
- 认证系统优化:Token 自动刷新,统一基于数据库的认证路由。
- Docker 构建优化:支持多架构构建和镜像标签推送。
二、302.ai 聚合平台接入
2.1 功能背景
相关提交:
c60d952:完成 302.ai 聚合平台接入。
302.ai 是一个企业级 AI 聚合平台,提供多种主流大模型的统一接口。
本次接入后,TradingAgents-CN 可以通过单一 API 访问多家模型厂商,例如:
- OpenAI
- Anthropic
- 以及其他兼容 OpenAI API 的模型服务
这让用户不需要在系统中分别维护多个模型供应商配置,也降低了模型切换成本。
2.2 后端供应商配置
系统在 app/scripts/init_providers.py 中新增 302.ai 供应商配置。
{
"name": "302ai",
"display_name": "302.AI",
"description": "302.AI是企业级AI聚合平台,提供多种主流大模型的统一接口",
"website": "https://302.ai",
"api_doc_url": "https://doc.302.ai",
"default_base_url": "https://api.302.ai/v1",
"is_active": true,
"supported_features": [
"chat",
"completion",
"embedding",
"image",
"vision",
"function_calling",
"streaming"
]
}
2.3 模型过滤优化
接入初期遇到一个问题:302.ai 返回了 668 个模型,但系统过滤后只保留了 0 个。
原因是模型 ID 格式不一定包含厂商前缀。例如:
gpt-4claude-3-sonnetgemini-pro
而系统原先依赖厂商前缀进行识别。
优化后,系统通过常见模型名称前缀判断模型所属厂商。
model_prefixes = {
"gpt-": "openai",
"o1-": "openai",
"claude-": "anthropic",
"gemini-": "google"
}
优化结果:
- 成功过滤并保留 87 个常用模型。
- 支持不带厂商前缀的模型 ID。
- 模型列表更干净,用户选择更方便。
2.4 价格信息提取
系统支持多种价格字段格式:
- OpenRouter:
pricing.prompt/completion - 302.ai:
price.prompt/completion - 302.ai:
price.input/output
需要注意的是,当前 302.ai API 不返回模型价格信息,因此模型价格需要用户手动配置。
2.5 推理模型支持
部分推理模型,例如 gpt-5-mini,会将一部分 token 用于内部推理。
如果 max_tokens 太小,可能出现“所有 token 都用于推理,没有正常输出”的情况。
优化方案:
max_tokens 从 10 增加到 200
原因是推理模型需要同时消耗:
- reasoning_tokens
- output_tokens
2.6 前端集成
前端在供应商弹窗中新增 302.ai 配置。
{
name: '302ai',
display_name: '302.AI',
description: '302.AI是企业级AI聚合平台,提供多种主流大模型的统一接口',
website: 'https://302.ai',
api_doc_url: 'https://doc.302.ai',
default_base_url: 'https://api.302.ai/v1',
supported_features: [
'chat',
'completion',
'embedding',
'image',
'vision',
'function_calling',
'streaming'
]
}
2.7 使用方式
添加供应商:
python scripts/add_302ai_provider.py
配置 API Key:
302AI_API_KEY=your-key
也可以在前端界面中配置。
模型名称格式示例:
openai/gpt-4
anthropic/claude-3-sonnet
系统会自动识别模型所属厂商,并映射到对应能力配置。
2.8 实现效果
- 统一接入多家大模型服务。
- 减少模型供应商配置成本。
- 支持 87 个常用模型自动过滤。
- 支持 OpenAI 兼容接口生态。
- 为后续更多聚合平台接入打下基础。
三、智谱 AI URL 拼接修复
3.1 问题背景
相关提交:
14a5bb3:修复 智谱 AI 等非标准版本号 API 的 URL 拼接问题。
智谱 AI GLM-4.6 使用的接口路径是:
/api/paas/v4
但系统此前会强制在基础 URL 后添加 /v1,导致最终地址错误。
错误地址:
https://open.bigmodel.cn/api/paas/v4/v1/chat/completions
正确地址:
https://open.bigmodel.cn/api/paas/v4/chat/completions
3.2 解决方案
使用正则表达式检测基础 URL 末尾是否已经包含版本号。
import re
if not re.search(r'/v\d+$', base_url):
base_url = base_url + "/v1"
else:
pass
逻辑说明:
- 如果 URL 末尾没有版本号,则添加
/v1。 - 如果 URL 已包含
/v4等版本号,则保持原样。
3.3 后续优化
相关提交:
bb080eb:添加更详细的 URL 构建日志和智谱 AI 测试模型。
优化内容包括:
- 添加 URL 构建日志。
- 为智谱 AI 添加正确测试模型
glm-4。 - 添加详细错误日志,包括请求 URL、状态码和响应内容。
3.4 优化效果
- 智谱 AI GLM-4.6 Coding Plan 端点正常工作。
- 其他非标准版本号 OpenAI 兼容 API 也能正常使用。
- 标准 OpenAI 兼容 API 仍会自动补充
/v1。 - 调试日志更清晰。
四、WebSocket 连接优化
4.1 问题背景
相关提交:
f176a10:优化 WebSocket 连接逻辑,支持开发和生产环境。
此前 WebSocket 存在两个典型问题:
Docker 部署连接失败
前端尝试连接:
ws://localhost:8000
但生产环境中,用户访问的是服务器实际地址,而不是本机 localhost。
开发和生产环境需要改代码
开发环境需要:
ws://localhost:8000
生产环境需要:
ws://服务器地址
每次部署前都要调整代码,维护成本高。
4.2 Vite 启用 WebSocket 代理
proxy: {
'/api': {
target: 'http://localhost:8000',
changeOrigin: true,
secure: false,
ws: true
}
}
其中:
ws: true
用于开启 WebSocket 代理支持。
4.3 前端统一连接逻辑
前端统一使用当前访问地址自动构建 WebSocket URL。
const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'
const host = window.location.host
const wsUrl = `${wsProtocol}//${host}/api/ws/notifications?token=${token}`
4.4 不同环境下的表现
| 环境 | 页面访问地址 | WebSocket 地址 | 转发方式 |
|---|---|---|---|
| 开发环境 | http://localhost:3000 | ws://localhost:3000/api/ws/... | Vite 代理到后端 |
| 生产环境 | http://服务器IP | ws://服务器IP/api/ws/... | Nginx 代理到后端 |
| HTTPS | https://域名 | wss://域名/api/ws/... | Nginx 代理到后端 |
4.5 优化效果
- 开发和生产环境使用同一套代码。
- 自动适配
ws://与wss://。 - 自动使用当前访问域名和端口。
- Docker 部署下 WebSocket 更稳定。
- 连接逻辑更简洁。
五、深色主题优化
5.1 问题背景
多个页面在 深色主题 下存在可读性问题:
- 白色背景上的深色文字看不清。
- 按钮文字颜色不正确。
- 页面头部样式不协调。
- 报告详情页关键指标对比度不足。
5.2 相关提交
9da8e48:优化暗色主题下按钮和文本的对比度。48ccde4:优化关于页面深色主题下白色卡片内标题的对比度。ced8a46:优化报告详情页面深色主题下的文字对比度。b0eeba8:优化单股分析页面深色主题下的页面头部样式。78b0362:优化批量分析页面深色主题下的页面头部样式。
5.3 解决方案
新增深色主题样式文件:
frontend/src/styles/dark-theme.scss
示例样式:
.el-button--primary {
color: #ffffff !important;
}
.el-card {
background-color: var(--el-bg-color) !important;
color: var(--el-text-color-primary) !important;
}
.header-content {
background-color: var(--el-bg-color) !important;
.page-title {
color: #ffffff !important;
}
}
在入口文件中引入:
import './styles/dark-theme.scss'
应用初始化时立即应用主题:
const appStore = useAppStore()
appStore.applyTheme()
5.4 优化内容
- 主要按钮、成功按钮、警告按钮、危险按钮、信息按钮:统一白色文字。
- 单选按钮组、复选框:选中时文字为主题色。
- 表单标签:使用主题文字颜色。
- 卡片、菜单、输入框、表格:使用主题背景色和文字色。
- 页面头部:使用主题背景色,标题白色。
- 关于页面:卡片背景自适应,标题白色。
- 报告详情页:关键指标卡片文字白色。
六、分析报告字段完善
6.1 问题背景
相关提交:
d5016b5:完善 分析报告字段提取逻辑,支持 13 个完整报告模块。
此前报告详情页面只显示 7 个报告模块,而不是预期的 13 个。
缺失字段包括:
sentiment_report:情绪分析报告news_report:新闻分析报告bull_researcher:看涨分析师报告bear_researcher:看跌分析师报告risky_analyst:风险分析师报告safe_analyst:安全分析师报告neutral_analyst:中立分析师报告
6.2 根本原因
后端保存报告时,只从 investment_debate_state 和 risk_debate_state 中提取了 judge_decision,没有提取各个分析师的详细报告。
6.3 解决方案
从 investment_debate_state 中提取看涨和看跌分析师报告。
if "investment_debate_state" in result:
state = result["investment_debate_state"]
if "bull_history" in state:
report_data["bull_researcher"] = state["bull_history"]
if "bear_history" in state:
report_data["bear_researcher"] = state["bear_history"]
从 risk_debate_state 中提取风险相关分析师报告。
if "risk_debate_state" in result:
state = result["risk_debate_state"]
if "risky_history" in state:
report_data["risky_analyst"] = state["risky_history"]
if "safe_history" in state:
report_data["safe_analyst"] = state["safe_history"]
if "neutral_history" in state:
report_data["neutral_analyst"] = state["neutral_history"]
6.4 优化效果
- 新分析任务将包含完整的 13 个报告模块。
- 报告详情页展示更完整。
- 多智能体分析链路更透明。
- 旧报告仍可能只有 7 个字段,需要重新运行分析生成完整报告。
七、自选股功能修复
7.1 问题背景
相关提交:
700d923:强制使用user_favorites集合存储自选股。7c81ffb:修复添加自选股时返回值判断错误。bf176bd:添加自选股功能详细日志,排查 500 错误。
此前添加自选股时可能返回 500 错误。
根本原因是:
users集合中的_id字段是字符串类型。ObjectId.is_valid()判断该字符串是有效 ObjectId。- 代码将字符串转换为
ObjectId()后查询。 - 但数据库中实际存储的是字符串,导致
matched_count=0。 - 最终添加自选股失败并抛出 500 错误。
7.2 解决方案
强制使用 user_favorites 集合存储自选股。
def _is_valid_object_id(self, user_id: str) -> bool:
"""检查 user_id 是否是有效的 ObjectId 格式"""
return False
这样可以避免复杂的 ObjectId 类型判断。
7.3 优化效果
- 自选股添加功能恢复正常。
- 统一使用
user_favorites集合。 - 数据存储位置更清晰。
- 后续维护更简单。
八、配置管理优化
8.1 数据导出脱敏功能
相关提交:
9ada144:数据导出增加 脱敏功能。
新增能力:
- 后端增加
sanitize参数。 - 递归清空敏感字段。
- 支持脱敏
api_key、password、token、secret等字段。 users集合在脱敏模式下导出为空数组。- 前端导出“配置数据(用于演示系统)”时自动启用脱敏。
脱敏逻辑:
SENSITIVE_KEYWORDS = ['api_key', 'password', 'token', 'secret']
EXCLUDED_FIELDS = ['max_tokens', 'timeout', 'retry_times', 'context_length']
for key, value in doc.items():
if key in EXCLUDED_FIELDS:
continue
if any(keyword in key.lower() for keyword in SENSITIVE_KEYWORDS):
doc[key] = ""
elif isinstance(value, dict):
doc[key] = self._sanitize_document(value)
8.2 配置导入优化
相关提交:
fb79f49:修复配置导出导入时max_tokens等字段为空字符串的问题。857bbae:修复数据库导出时max_tokens等配置字段被错误脱敏的问题。eb0d02e:配置导入脚本默认使用覆盖模式。11a29c5:配置导入脚本支持宿主机和 Docker 容器两种运行环境。
优化内容:
- 导出时确保
max_tokens、temperature等字段有默认值。 - 导入时清理空字符串,让 Pydantic 使用模型默认值。
- 添加
EXCLUDED_FIELDS白名单,避免配置字段被误判为敏感信息。 - 默认使用覆盖模式。
- 支持
--incremental参数进行增量导入。 - 支持
--host参数,在宿主机运行时连接localhost:27017。
九、认证系统优化
9.1 前端认证管理
相关提交:
f4269e5:优化前端认证管理,统一处理 token 失效和自动刷新。
此前后端返回业务错误时,如果 HTTP 状态码仍为 200,前端不会触发登录跳转。
同时缺少 token 自动刷新机制,用户操作时可能突然失效。
9.2 解决方案
响应拦截器优化
在成功响应中检查业务错误码:
401401014010240103
Token 自动刷新机制
当 token 即将过期时自动刷新:
if (isTokenExpiringSoon(token, 5)) {
await autoRefreshToken()
}
每分钟检查一次:
setInterval(async () => {
if (authStore.isAuthenticated) {
await autoRefreshToken()
}
}, 60000)
全局错误处理
在 main.ts 中添加全局错误处理器,统一处理认证异常和业务错误。
9.3 后端认证路由切换
相关提交:
38670a4:切换到基于数据库的认证路由。d763e11:删除废弃的基于配置文件的认证路由。56678f7:修复所有路由文件的 auth 导入引用。
优化内容:
- 统一使用
auth_db.py。 - 删除旧的
auth.py。 - 修复 21 个路由文件中的认证导入引用。
十、UI 与 Docker 构建优化
10.1 UI 改进
移除报告列表文件大小列
相关提交:
5e1e640:移除分析报告列表中的文件大小列。
文件大小列对用户价值不大,同时占用表格空间,因此移除。
修复默认头像引用
相关提交:
e5d11ee:移除不存在的default-avatar.png引用,使用 Element Plus 默认图标。
此前 UserProfile.vue 和 auth.ts 引用了不存在的 /default-avatar.png,导致 404。现在改为使用 Element Plus 默认 User 图标。
10.2 Docker 构建优化
相关提交:
06b8880:构建脚本同时推送VERSION和latest标签。8d0fdc4:build-multiarch.sh支持通过环境变量覆盖PLATFORMS。d0f1e6e:修复通知 store 中未定义的方法引用。
优化内容:
- 构建脚本同时推送
v1.0.0-preview和latest标签。 - 支持通过环境变量指定构建平台:
PLATFORMS=linux/amd64 ./scripts/build-multiarch.sh
- 添加
.yarnrc配置,使用国内镜像源加速依赖下载。 - 网络超时时间增加到 5 分钟,适应跨平台构建。
十一、统计数据
11.1 提交统计
| 指标 | 数量 |
|---|---|
| 总提交数 | 28 |
| 修改文件数 | 100+ |
| 新增文件数 | 15 |
| 删除文件数 | 5 |
11.2 功能分类
| 类型 | 数量 |
|---|---|
| 新功能 | 6 项 |
| Bug 修复 | 15 项 |
| UI 优化 | 7 项 |
11.3 代表性新功能
- 302.ai 聚合平台接入
- 配置数据脱敏导出
- Token 自动刷新
- 报告字段补齐
- 深色主题统一优化
- Docker 多架构构建优化
十二、技术亮点
12.1 智能 URL 版本号检测
if not re.search(r'/v\d+$', base_url):
base_url = base_url + "/v1"
避免对已经包含版本号的 API 地址重复追加 /v1。
12.2 模型名称前缀识别
model_prefixes = {
"gpt-": "openai",
"claude-": "anthropic",
"gemini-": "google"
}
支持不带厂商前缀的模型名识别。
12.3 WebSocket 代理配置
proxy: {
'/api': {
ws: true
}
}
统一开发环境和生产环境的 WebSocket 连接方式。
12.4 数据脱敏递归处理
EXCLUDED_FIELDS = ['max_tokens', 'timeout', 'retry_times']
if key in EXCLUDED_FIELDS:
continue
避免把正常配置字段误判为敏感信息。
12.5 Token 自动刷新机制
if (isTokenExpiringSoon(token, 5)) {
await autoRefreshToken()
}
用户无感知续期,减少登录失效带来的中断。
十三、升级指南
Docker 环境可直接拉取新镜像并重启服务:
docker-compose -f docker-compose.hub.nginx.yml pull
docker-compose -f docker-compose.hub.nginx.yml up -d
十四、已知问题
14.1 302.ai 价格信息缺失
问题:302.ai API 不返回模型价格信息。
影响:模型价格需要手动配置。
解决方案:在前端添加模型时手动填写价格。
14.2 旧分析报告字段不完整
问题:旧的分析报告只有 7 个字段。
影响:报告详情页面显示不完整。
解决方案:重新运行分析任务,生成包含 13 个模块的新报告。
十五、总结
本次更新通过 28 个提交,围绕 302.ai 聚合平台接入、模型配置管理、WebSocket 连接、深色主题、报告字段补齐、自选股修复、认证系统 和 Docker 构建 做了一次系统性优化。
主要成果包括:
- 302.ai 聚合平台接入:通过统一接口访问多家大模型服务。
- 模型过滤优化:从 668 个模型中识别并保留 87 个常用模型。
- 智谱 AI URL 修复:兼容非标准版本号 API 地址。
- WebSocket 优化:开发与生产环境共用统一连接逻辑。
- 深色主题优化:提升暗色模式下页面可读性。
- 分析报告字段完善:新报告支持完整 13 个模块。
- 自选股功能修复:解决添加自选股 500 错误。
- 数据导出脱敏:保护 API Key、token、password 等敏感信息。
- 认证系统优化:支持 token 自动刷新和数据库认证路由统一。
- Docker 构建优化:支持多架构构建与镜像标签推送。
这些改进显著提升了 TradingAgents-CN 的 模型兼容性、配置安全性、界面体验、系统稳定性和部署便利性,也让系统更适合在多模型、多环境、多用户场景下长期使用。
✅ 官方唯一渠道:📦 GitHub 仓库:https://github.com/hsliuping/TradingAgents-CN
Aekor AI-API 中转站,让全球顶尖 AI 大模型“触手可及”!你是否曾为这些烦恼头疼?
🔹 人在国内,却总被海外官网 API 的高延迟、掉线、甚至无法访问困扰?
🔹 想用最强的 GPT、Claude 等模型,却卡在海外信用卡、支付审核等重重阻碍?
🔹 官方 API 太贵?Aekor 为你打通“网络-支付-成本”的任督二脉!
💡 Aekor 核心价值:好用、便宜、快 💡
🚀 高速稳定,告别掉线国内专线加速,API 响应低延迟,告别「转圈圈」的焦虑,开发效率瞬间拉满!
🧠 顶尖模型,随需而调涵盖 GPT 系列、Claude 系列等全球主流大厂模型,一次接入,轻松调用!
🎁 免费白嫖,诚意拉满!
注册即送 20 美元体验额度,够你狠狠测试一轮模型质量与线路稳定性了!
⚠️ 温馨提示:API 中转市场虽多但良莠不齐(甚至有些会偷工减料换小模型糊弄事儿)。Aekor 坚持提供正版稳定的服务,但还是建议:先用免费的 20 刀测试是否契合自身需求,满意了再小额充值上车,理性消费不盲目。
文章评论