Aekor

Aekor
专注于用户阅读体验的响应式博客主题
  1. 首页
  2. TradingAgents-CN
  3. 正文

TradingAgents-CN 优化日志:302.ai 聚合平台接入与系统优化(10-25)

2025-10-26 9640点热度 0人点赞 0条评论

一、升级概览

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
  • Google
  • 以及其他兼容 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-4
  • claude-3-sonnet
  • gemini-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:3000ws://localhost:3000/api/ws/...Vite 代理到后端
生产环境http://服务器IPws://服务器IP/api/ws/...Nginx 代理到后端
HTTPShttps://域名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 解决方案

响应拦截器优化

在成功响应中检查业务错误码:

  • 401
  • 40101
  • 40102
  • 40103

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 美元体验额度,够你狠狠测试一轮模型质量与线路稳定性了!

🚪 入口:https://api.aekor.com

⚠️ 温馨提示:API 中转市场虽多但良莠不齐(甚至有些会偷工减料换小模型糊弄事儿)。Aekor 坚持提供正版稳定的服务,但还是建议:先用免费的 20 刀测试是否契合自身需求,满意了再小额充值上车,理性消费不盲目。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 302.ai AI聚合平台 Claude DeepSeek Docker构建优化 Gemini GLM-4.6 OpenAI兼容接口 Qwen Token自动刷新 TradingAgents-CN WebSocket优化 智谱AI 模型配置管理 股票分析平台
最后更新:2026-07-03

Aekor

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

使用AI教程

  • API报错解决方案
  • API 基础知识
  • API Key 获取

分类

  • Blog
  • TradingAgents-CN
  • 使用教程

COPYRIGHT © 2026 Aekor. ALL RIGHTS RESERVED.