-
Notifications
You must be signed in to change notification settings - Fork 54.3k
Expand file tree
/
Copy pathsystemConfigI18n.ts
More file actions
171 lines (163 loc) · 11.1 KB
/
Copy pathsystemConfigI18n.ts
File metadata and controls
171 lines (163 loc) · 11.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
import type { SystemConfigCategory } from '../types/systemConfig';
const categoryTitleMap: Record<SystemConfigCategory, string> = {
base: '基础设置',
data_source: '数据源',
ai_model: 'AI 模型',
notification: '通知渠道',
system: '系统设置',
agent: 'Agent 设置',
backtest: '回测配置',
uncategorized: '其他',
};
const categoryDescriptionMap: Partial<Record<SystemConfigCategory, string>> = {
base: '管理自选股与基础运行参数。',
data_source: '管理行情数据源与优先级策略。',
ai_model: '管理模型服务、模型名称与推理参数。',
notification: '管理机器人、Webhook 和消息推送配置。',
system: '管理调度、日志、端口等系统级参数。',
agent: '管理 Agent 模式、策略与多 Agent 编排配置。',
backtest: '管理回测开关、评估窗口和引擎参数。',
uncategorized: '其他未归类的配置项。',
};
const fieldTitleMap: Record<string, string> = {
STOCK_LIST: '自选股列表',
TUSHARE_TOKEN: 'Tushare Token',
BOCHA_API_KEYS: 'Bocha API Keys',
TAVILY_API_KEYS: 'Tavily API Keys',
ANSPIRE_API_KEYS: 'Anspire API Keys',
SERPAPI_API_KEYS: 'SerpAPI API Keys',
BRAVE_API_KEYS: 'Brave API Keys',
SEARXNG_BASE_URLS: 'SearXNG Base URLs',
SEARXNG_PUBLIC_INSTANCES_ENABLED: 'SearXNG 公共实例自动发现',
MINIMAX_API_KEYS: 'MiniMax API Keys',
NEWS_STRATEGY_PROFILE: '新闻策略窗口档位',
NEWS_MAX_AGE_DAYS: '新闻最大时效(天)',
REALTIME_SOURCE_PRIORITY: '实时数据源优先级',
ENABLE_REALTIME_TECHNICAL_INDICATORS: '盘中实时技术面',
LITELLM_MODEL: '主模型',
AGENT_LITELLM_MODEL: 'Agent 主模型',
LITELLM_FALLBACK_MODELS: '备选模型',
LITELLM_CONFIG: '高级模型路由配置',
LLM_CHANNELS: 'LLM 渠道列表',
LLM_TEMPERATURE: '采样温度',
AIHUBMIX_KEY: 'AIHubmix Key',
ANSPIRE_LLM_ENABLED: '启用 Anspire 大模型',
ANSPIRE_LLM_BASE_URL: 'Anspire 大模型网关',
ANSPIRE_LLM_MODEL: 'Anspire 默认模型',
DEEPSEEK_API_KEY: 'DeepSeek API Key',
GEMINI_API_KEY: 'Gemini API Key',
GEMINI_MODEL: 'Gemini 模型',
GEMINI_TEMPERATURE: 'Gemini 温度参数',
OPENAI_API_KEY: 'OpenAI API Key',
OPENAI_BASE_URL: 'OpenAI Base URL',
OPENAI_MODEL: 'OpenAI 模型',
WECHAT_WEBHOOK_URL: '企业微信 Webhook',
FEISHU_WEBHOOK_URL: '飞书群机器人 Webhook',
FEISHU_WEBHOOK_SECRET: '飞书 Webhook 签名密钥',
FEISHU_WEBHOOK_KEYWORD: '飞书 Webhook 关键词',
FEISHU_APP_ID: '飞书应用 App ID',
FEISHU_APP_SECRET: '飞书应用 App Secret',
DINGTALK_APP_KEY: '钉钉 App Key',
DINGTALK_APP_SECRET: '钉钉 App Secret',
CUSTOM_WEBHOOK_BODY_TEMPLATE: '自定义 Webhook Body 模板',
PUSHPLUS_TOKEN: 'PushPlus Token',
REPORT_SUMMARY_ONLY: '仅分析结果摘要',
MAX_WORKERS: '最大并发线程数',
SCHEDULE_TIME: '定时任务时间',
HTTP_PROXY: 'HTTP 代理',
LOG_LEVEL: '日志级别',
WEBUI_PORT: 'WebUI 端口',
AGENT_MODE: '启用 Agent 策略问股',
AGENT_MAX_STEPS: 'Agent 最大步数',
AGENT_SKILLS: 'Agent 激活策略',
AGENT_SKILL_DIR: 'Agent 策略目录',
AGENT_ARCH: 'Agent 架构模式',
AGENT_ORCHESTRATOR_MODE: '编排模式',
AGENT_ORCHESTRATOR_TIMEOUT_S: 'Agent 超时(秒)',
AGENT_RISK_OVERRIDE: '风控 Agent 否决',
AGENT_SKILL_AUTOWEIGHT: '策略自动加权',
AGENT_SKILL_ROUTING: '策略路由模式',
AGENT_MEMORY_ENABLED: '记忆与校准',
BACKTEST_ENABLED: '启用回测',
BACKTEST_EVAL_WINDOW_DAYS: '回测评估窗口(交易日)',
BACKTEST_MIN_AGE_DAYS: '回测最小历史天数',
BACKTEST_ENGINE_VERSION: '回测引擎版本',
BACKTEST_NEUTRAL_BAND_PCT: '回测中性区间阈值(%)',
};
const fieldDescriptionMap: Record<string, string> = {
STOCK_LIST: '使用逗号分隔股票代码,例如:600519,300750。',
TUSHARE_TOKEN: '用于接入 Tushare Pro 数据服务的凭据。',
BOCHA_API_KEYS: '用于新闻检索的 Bocha 密钥,支持逗号分隔多个(最高优先级)。',
TAVILY_API_KEYS: '用于新闻检索的 Tavily 密钥,支持逗号分隔多个。',
ANSPIRE_API_KEYS: 'Anspire Open 密钥,支持逗号分隔多个;默认同时用于大模型网关和新闻检索。',
SERPAPI_API_KEYS: '用于新闻检索的 SerpAPI 密钥,支持逗号分隔多个。',
BRAVE_API_KEYS: '用于新闻检索的 Brave Search 密钥,支持逗号分隔多个。',
SEARXNG_BASE_URLS: 'SearXNG 自建实例地址(逗号分隔,无配额兜底,需在 settings.yml 启用 format: json)。',
SEARXNG_PUBLIC_INSTANCES_ENABLED: '当未配置 SearXNG 自建实例时,自动从 searx.space 获取公共实例并轮询使用;设为 false 可禁用该默认行为。',
MINIMAX_API_KEYS: '用于新闻检索的 MiniMax 密钥,支持逗号分隔多个(最低优先级)。',
NEWS_STRATEGY_PROFILE: '新闻窗口档位:ultra_short=1天,short=3天,medium=7天,long=30天。',
NEWS_MAX_AGE_DAYS: '新闻最大时效上限。实际窗口 = min(策略档位天数, NEWS_MAX_AGE_DAYS)。例如 ultra_short + 7 仍为 1 天。',
REALTIME_SOURCE_PRIORITY: '按逗号分隔填写数据源调用优先级。',
ENABLE_REALTIME_TECHNICAL_INDICATORS: '盘中分析时用实时价计算 MA5/MA10/MA20 与多头排列(Issue #234);关闭则用昨日收盘。',
LITELLM_MODEL: '主模型,格式 provider/model(如 gemini/gemini-2.5-flash)。配置渠道后自动推断。',
AGENT_LITELLM_MODEL: 'Agent 专用主模型。留空时继承主模型;无 provider 前缀时会按 openai/<model> 解析。',
LITELLM_FALLBACK_MODELS: '备选模型,逗号分隔,主模型失败时按序尝试。',
LITELLM_CONFIG: '高级模型路由 YAML 配置文件路径(高级用法)。仅在 YAML 可解析且产出 model_list 时优先于渠道与旧配置,否则会回退。',
LLM_CHANNELS: '渠道名称列表(逗号分隔)。推荐使用上方渠道编辑器管理。',
LLM_TEMPERATURE: '控制模型输出随机性,0 为确定性输出,2 为最大随机性,推荐 0.7。',
AIHUBMIX_KEY: 'AIHubmix 一站式密钥,自动指向 aihubmix.com/v1。',
ANSPIRE_LLM_ENABLED: '开启后,未配置更高优先级 LLM 渠道或 OpenAI 兼容密钥时,ANSPIRE_API_KEYS 会自动作为 Anspire 大模型密钥使用。',
ANSPIRE_LLM_BASE_URL: 'Anspire OpenAI 兼容网关地址,默认 https://open-gateway.anspire.cn/v6,海外可用 https://open-gateway.anspire.ai/v6。',
ANSPIRE_LLM_MODEL: '仅填写 ANSPIRE_API_KEYS 时自动使用的模型,默认 Doubao-Seed-2.0-lite。',
DEEPSEEK_API_KEY: 'DeepSeek 官方 API 密钥。填写后自动使用 deepseek-chat 模型。',
GEMINI_API_KEY: '用于 Gemini 服务调用的密钥。',
GEMINI_MODEL: '设置 Gemini 分析模型名称。',
GEMINI_TEMPERATURE: '控制模型输出随机性,范围通常为 0.0 到 2.0。',
OPENAI_API_KEY: '用于 OpenAI 兼容服务调用的密钥。',
OPENAI_BASE_URL: 'OpenAI 兼容 API 地址,例如 https://api.deepseek.com/v1。',
OPENAI_MODEL: 'OpenAI 兼容模型名称,例如 gpt-4o-mini、deepseek-chat。',
WECHAT_WEBHOOK_URL: '企业微信机器人 Webhook 地址。',
FEISHU_WEBHOOK_URL: '用于群消息推送的飞书自定义机器人 Webhook。它才是通知发送入口,和 FEISHU_APP_ID / FEISHU_APP_SECRET 不是一回事。',
FEISHU_WEBHOOK_SECRET: '飞书群机器人安全设置里的“签名校验”密钥。开启签名后必须同步填写,否则会推送失败。',
FEISHU_WEBHOOK_KEYWORD: '飞书群机器人安全设置里的“关键词”。填写后,系统会在每条飞书消息前自动补上该关键词。',
FEISHU_APP_ID: '仅用于飞书应用机器人 / Stream Bot / 云文档等应用模式,不会直接开启群 Webhook 推送。',
FEISHU_APP_SECRET: '仅用于飞书应用机器人 / Stream Bot / 云文档等应用模式,不会直接开启群 Webhook 推送。',
DINGTALK_APP_KEY: '钉钉应用模式 App Key。',
DINGTALK_APP_SECRET: '钉钉应用模式 App Secret。',
CUSTOM_WEBHOOK_BODY_TEMPLATE: '全局 JSON body 模板,会先于 Bark、Slack、Discord 等自动 payload 生效;推荐使用 $content_json / $title_json,裸 $content / $title 不做 JSON 转义。',
PUSHPLUS_TOKEN: 'PushPlus 推送令牌。',
REPORT_SUMMARY_ONLY: '仅推送分析结果摘要,不包含个股详情。多股时适合快速浏览。',
MAX_WORKERS: '异步任务队列最大并发数。配置保存后,队列空闲时会自动应用;繁忙时延后生效。',
SCHEDULE_TIME: '每日定时任务执行时间,格式为 HH:MM。',
HTTP_PROXY: '网络代理地址,可留空。',
LOG_LEVEL: '设置日志输出级别。',
WEBUI_PORT: 'Web 页面服务监听端口。',
AGENT_MODE: '是否启用 ReAct Agent 策略问股。对外文案仍叫“策略”,内部配置字段统一使用 skill。',
AGENT_MAX_STEPS: 'Agent 最大推理步数上限。保持默认 10 时,各子 Agent 按自身预设步数运行;调高到高于默认值时,所有子 Agent 统一采用该值;调低到低于某子 Agent 默认值时,该 Agent 会被封顶。',
AGENT_SKILLS: '逗号分隔的交易策略列表。留空时使用 metadata 里声明的主默认策略 skill(内置默认是 bull_trend);也可填写 all 启用全部策略。',
AGENT_SKILL_DIR: '存放 Agent 策略定义文件的目录路径,支持 YAML 与 SKILL.md bundle。',
AGENT_ARCH: "选择 Agent 执行架构。single 为经典单 Agent;multi 为多 Agent 编排(实验性)。",
AGENT_ORCHESTRATOR_MODE: "Multi-Agent 编排深度。quick(技术→决策)、standard(技术→情报→决策)、full(含风控)、specialist(含策略专家评估)。",
AGENT_ORCHESTRATOR_TIMEOUT_S: "Agent 执行总超时预算(秒)。single-agent 用作整体 ReAct 循环预算,multi-agent 用作协作编排预算;0 表示不限制。",
AGENT_RISK_OVERRIDE: "允许风控 Agent 在发现关键风险时否决买入信号。",
AGENT_SKILL_AUTOWEIGHT: "根据回测表现自动调整策略权重。",
AGENT_SKILL_ROUTING: "策略选择方式。auto 按市场状态自动选择,manual 使用 AGENT_SKILLS 列表。",
AGENT_MEMORY_ENABLED: "启用记忆与校准系统,追踪历史分析准确率并自动调节置信度。",
BACKTEST_ENABLED: '是否启用回测功能(true/false)。',
BACKTEST_EVAL_WINDOW_DAYS: '回测评估窗口长度,单位为交易日。',
BACKTEST_MIN_AGE_DAYS: '仅回测早于该天数的分析记录。',
BACKTEST_ENGINE_VERSION: '回测引擎版本标识,用于区分结果版本。',
BACKTEST_NEUTRAL_BAND_PCT: '中性区间阈值百分比,例如 2 表示 -2%~+2%。',
};
export function getCategoryTitleZh(category: SystemConfigCategory, fallback?: string): string {
return categoryTitleMap[category] || fallback || category;
}
export function getCategoryDescriptionZh(category: SystemConfigCategory, fallback?: string): string {
return categoryDescriptionMap[category] || fallback || '';
}
export function getFieldTitleZh(key: string, fallback?: string): string {
return fieldTitleMap[key] || fallback || key;
}
export function getFieldDescriptionZh(key: string, fallback?: string): string {
return fieldDescriptionMap[key] || fallback || '';
}