fix: deepseek配置使用成功

master
Lxy 3 months ago
parent c8329f0d07
commit 0be07b8f8a

@ -430,7 +430,7 @@ class DeepseekAgent:
"""
# 调用API
response = self._call_deepseek_api(prompt)
response = self._call_ai_api(prompt)
# 解析结果
fused_result = self._parse_analysis_result(response)
@ -466,7 +466,7 @@ class DeepseekAgent:
"""
# 调用API
response = self._call_deepseek_api(prompt)
response = self._call_ai_api(prompt)
# 解析结果
insights = self._parse_analysis_result(response)

@ -1,6 +1,6 @@
# 配置管理工具
import os
from dotenv import load_dotenv
import json
from typing import Dict, Optional
@ -17,31 +17,62 @@ class ConfigManager:
def _load_config(self):
"""加载配置"""
# 加载.env文件
load_dotenv()
# API配置
self.openai_api_key = os.getenv('OPENAI_API_KEY', '')
self.deepseek_api_key = os.getenv('DEEPSEEK_API_KEY', '')
self.deepseek_api_url = os.getenv('DEEPSEEK_API_URL', 'https://api.deepseek.com/v1/chat/completions')
# 数据库配置
self.db_path = os.getenv('DB_PATH', './data/futures_analysis.db')
# 天勤TQSDK配置
self.tqserver_host = os.getenv('TQSERVER_HOST', 'api.shinnytech.com')
self.tqserver_port = int(os.getenv('TQSERVER_PORT', '7777'))
# 配置文件路径
config_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))), 'config.json')
print(f"[ConfigManager]尝试加载配置文件: {config_path}")
# 默认配置
default_config = {
'openai_api_key': '',
'deepseek_api_key': '',
'deepseek_api_url': 'https://api.deepseek.com/v1/chat/completions',
'db_path': './data/futures_analysis.db',
'tqserver_host': 'api.shinnytech.com',
'tqserver_port': 7777,
'max_risk_percent': 0.02,
'min_profit_loss_ratio': 1.5,
'default_atr_multiplier': 2.0,
'default_adx_threshold': 20,
'review_times': '09:00,12:30,15:30'.split(',')
}
# 风险配置
self.max_risk_percent = float(os.getenv('MAX_RISK_PERCENT', '0.02'))
self.min_profit_loss_ratio = float(os.getenv('MIN_PROFIT_LOSS_RATIO', '1.5'))
# 从config.json加载配置
if os.path.exists(config_path):
try:
with open(config_path, 'r', encoding='utf-8') as f:
config_data = json.load(f)
# 从aiModel部分获取API配置
if 'aiModel' in config_data and 'models' in config_data['aiModel']:
# 查找启用的模型
enabled_models = [model for model in config_data['aiModel']['models'] if model.get('enabled', False)]
# 优先使用DeepSeek模型的配置
deepseek_model = next((model for model in config_data['aiModel']['models'] if model.get('name') == 'DeepSeek'), None)
if deepseek_model:
default_config['deepseek_api_key'] = deepseek_model.get('apiKey', '')
default_config['deepseek_api_url'] = deepseek_model.get('apiBaseUrl', 'https://api.deepseek.com/v1/chat/completions')
# 查找GPT-4模型的配置
gpt4_model = next((model for model in config_data['aiModel']['models'] if model.get('name') == 'GPT-4'), None)
if gpt4_model:
default_config['openai_api_key'] = gpt4_model.get('apiKey', '')
# 策略配置
self.default_atr_multiplier = float(os.getenv('DEFAULT_ATR_MULTIPLIER', '2.0'))
self.default_adx_threshold = float(os.getenv('DEFAULT_ADX_THRESHOLD', '20'))
except Exception as e:
print(f"加载config.json失败: {e}")
# 使用默认配置
# 定时任务配置
self.review_times = os.getenv('REVIEW_TIMES', '09:00,12:30,15:30').split(',')
# 设置配置值
self.openai_api_key = default_config['openai_api_key']
self.deepseek_api_key = default_config['deepseek_api_key']
self.deepseek_api_url = default_config['deepseek_api_url']
self.db_path = default_config['db_path']
self.tqserver_host = default_config['tqserver_host']
self.tqserver_port = default_config['tqserver_port']
self.max_risk_percent = default_config['max_risk_percent']
self.min_profit_loss_ratio = default_config['min_profit_loss_ratio']
self.default_atr_multiplier = default_config['default_atr_multiplier']
self.default_adx_threshold = default_config['default_adx_threshold']
self.review_times = default_config['review_times']
def get_config(self) -> Dict:
"""获取所有配置"""

@ -89,5 +89,164 @@
"refreshInterval": 60000
},
"defaultDataSource": "tqsdk"
},
"aiModel": {
"models": [
{
"id": 1,
"name": "DeepSeek",
"accuracy": "85%",
"responseTime": "250ms",
"enabled": true,
"apiKey": "sk-49dccf9e8a754d3abb36ce396cb8f189",
"apiBaseUrl": "https://api.deepseek.com/v1/chat/completions",
"temperature": 0.3,
"maxTokens": 1000,
"timeout": 30000,
"retries": 3,
"predictionPeriods": [
"1H",
"4H",
"1D"
],
"confidenceThreshold": 70,
"historyDataDays": 90
},
{
"id": 2,
"name": "GPT-4",
"accuracy": "88%",
"responseTime": "350ms",
"enabled": false,
"apiKey": "",
"apiBaseUrl": "https://api.openai.com/v1/chat/completions",
"temperature": 0.3,
"maxTokens": 1000,
"timeout": 30000,
"retries": 3,
"predictionPeriods": [
"1H",
"4H",
"1D"
],
"confidenceThreshold": 70,
"historyDataDays": 90,
"technicalIndicators": {
"enabled": true,
"indicators": [
"MACD",
"RSI",
"KDJ",
"MA",
"BOLL"
]
},
"fundamentalAnalysis": {
"enabled": true,
"factors": [
"资金流向",
"持仓分析",
"现货价格",
"库存变化"
]
},
"riskAssessment": {
"enabled": true,
"riskLevel": "medium"
}
},
{
"id": 3,
"name": "Claude",
"accuracy": "82%",
"responseTime": "200ms",
"enabled": false,
"apiKey": "",
"apiBaseUrl": "",
"temperature": 0.3,
"maxTokens": 1000,
"timeout": 30000,
"retries": 3,
"predictionPeriods": [
"1H",
"4H",
"1D"
],
"confidenceThreshold": 70,
"historyDataDays": 90,
"technicalIndicators": {
"enabled": true,
"indicators": [
"MACD",
"RSI",
"KDJ",
"MA",
"BOLL"
]
},
"fundamentalAnalysis": {
"enabled": true,
"factors": [
"资金流向",
"持仓分析",
"现货价格",
"库存变化"
]
},
"riskAssessment": {
"enabled": true,
"riskLevel": "medium"
}
},
{
"id": 4,
"name": "自定义模型",
"accuracy": "78%",
"responseTime": "150ms",
"enabled": false,
"apiKey": "",
"apiBaseUrl": "",
"temperature": 0.3,
"maxTokens": 1000,
"timeout": 30000,
"retries": 3,
"predictionPeriods": [
"1H",
"4H",
"1D"
],
"confidenceThreshold": 70,
"historyDataDays": 90,
"technicalIndicators": {
"enabled": true,
"indicators": [
"MACD",
"RSI",
"KDJ",
"MA",
"BOLL"
]
},
"fundamentalAnalysis": {
"enabled": true,
"factors": [
"资金流向",
"持仓分析",
"现货价格",
"库存变化"
]
},
"riskAssessment": {
"enabled": true,
"riskLevel": "medium"
}
}
],
"defaultModel": "DeepSeek",
"predictionConfig": {
"defaultPeriod": "1D",
"defaultConfidenceThreshold": 70,
"defaultHistoryDataDays": 90
}
}
}

@ -132,7 +132,129 @@ const AdminConfig = () => {
database: databaseConfig,
server: serverConfig,
security: securityConfig,
dataSource: dataSourceConfig
dataSource: dataSourceConfig,
aiModel: {
models: [
{
id: 1,
name: "DeepSeek",
accuracy: "85%",
responseTime: "250ms",
enabled: true,
apiKey: "",
apiBaseUrl: "https://api.deepseek.com/v1/chat/completions",
temperature: 0.3,
maxTokens: 1000,
timeout: 30000,
retries: 3,
predictionPeriods: ["1H", "4H", "1D"],
confidenceThreshold: 70,
historyDataDays: 90,
technicalIndicators: {
enabled: true,
indicators: ["MACD", "RSI", "KDJ", "MA", "BOLL"]
},
fundamentalAnalysis: {
enabled: true,
factors: ["资金流向", "持仓分析", "现货价格", "库存变化"]
},
riskAssessment: {
enabled: true,
riskLevel: "medium"
}
},
{
id: 2,
name: "GPT-4",
accuracy: "88%",
responseTime: "350ms",
enabled: false,
apiKey: "",
apiBaseUrl: "https://api.openai.com/v1/chat/completions",
temperature: 0.3,
maxTokens: 1000,
timeout: 30000,
retries: 3,
predictionPeriods: ["1H", "4H", "1D"],
confidenceThreshold: 70,
historyDataDays: 90,
technicalIndicators: {
enabled: true,
indicators: ["MACD", "RSI", "KDJ", "MA", "BOLL"]
},
fundamentalAnalysis: {
enabled: true,
factors: ["资金流向", "持仓分析", "现货价格", "库存变化"]
},
riskAssessment: {
enabled: true,
riskLevel: "medium"
}
},
{
id: 3,
name: "Claude",
accuracy: "82%",
responseTime: "200ms",
enabled: false,
apiKey: "",
apiBaseUrl: "",
temperature: 0.3,
maxTokens: 1000,
timeout: 30000,
retries: 3,
predictionPeriods: ["1H", "4H", "1D"],
confidenceThreshold: 70,
historyDataDays: 90,
technicalIndicators: {
enabled: true,
indicators: ["MACD", "RSI", "KDJ", "MA", "BOLL"]
},
fundamentalAnalysis: {
enabled: true,
factors: ["资金流向", "持仓分析", "现货价格", "库存变化"]
},
riskAssessment: {
enabled: true,
riskLevel: "medium"
}
},
{
id: 4,
name: "自定义模型",
accuracy: "78%",
responseTime: "150ms",
enabled: false,
apiKey: "",
apiBaseUrl: "",
temperature: 0.3,
maxTokens: 1000,
timeout: 30000,
retries: 3,
predictionPeriods: ["1H", "4H", "1D"],
confidenceThreshold: 70,
historyDataDays: 90,
technicalIndicators: {
enabled: true,
indicators: ["MACD", "RSI", "KDJ", "MA", "BOLL"]
},
fundamentalAnalysis: {
enabled: true,
factors: ["资金流向", "持仓分析", "现货价格", "库存变化"]
},
riskAssessment: {
enabled: true,
riskLevel: "medium"
}
}
],
defaultModel: "DeepSeek",
predictionConfig: {
defaultPeriod: "1D",
defaultConfidenceThreshold: 70,
defaultHistoryDataDays: 90
}
}
});
//
@ -146,6 +268,38 @@ const AdminConfig = () => {
}));
};
// AI
const handleAiModelConfigChange = (modelId, key, value) => {
setConfig(prev => ({
...prev,
aiModel: {
...prev.aiModel,
models: prev.aiModel.models.map(model =>
model.id === modelId ? { ...model, [key]: value } : model
)
}
}));
};
// AI
const handleAiModelDetailConfigChange = (modelId, section, key, value) => {
setConfig(prev => ({
...prev,
aiModel: {
...prev.aiModel,
models: prev.aiModel.models.map(model =>
model.id === modelId ? {
...model,
[section]: {
...model[section],
[key]: value
}
} : model
)
}
}));
};
//
const handleDatabaseConfigChange = (dbType, key, value) => {
setConfig(prev => ({
@ -205,6 +359,128 @@ const AdminConfig = () => {
wind: { enabled: false, apiKey: '', apiSecret: '', url: 'https://api.wind.com.cn', timeout: 30000, retries: 3 },
sina: { enabled: false, url: 'https://finance.sina.com.cn', timeout: 10000, retries: 3, refreshInterval: 60000 },
defaultDataSource: 'tqsdk'
},
aiModel: newConfig.aiModel || {
models: [
{
id: 1,
name: "DeepSeek",
accuracy: "85%",
responseTime: "250ms",
enabled: true,
apiKey: "",
apiBaseUrl: "https://api.deepseek.com/v1/chat/completions",
temperature: 0.3,
maxTokens: 1000,
timeout: 30000,
retries: 3,
predictionPeriods: ["1H", "4H", "1D"],
confidenceThreshold: 70,
historyDataDays: 90,
technicalIndicators: {
enabled: true,
indicators: ["MACD", "RSI", "KDJ", "MA", "BOLL"]
},
fundamentalAnalysis: {
enabled: true,
factors: ["资金流向", "持仓分析", "现货价格", "库存变化"]
},
riskAssessment: {
enabled: true,
riskLevel: "medium"
}
},
{
id: 2,
name: "GPT-4",
accuracy: "88%",
responseTime: "350ms",
enabled: false,
apiKey: "",
apiBaseUrl: "https://api.openai.com/v1/chat/completions",
temperature: 0.3,
maxTokens: 1000,
timeout: 30000,
retries: 3,
predictionPeriods: ["1H", "4H", "1D"],
confidenceThreshold: 70,
historyDataDays: 90,
technicalIndicators: {
enabled: true,
indicators: ["MACD", "RSI", "KDJ", "MA", "BOLL"]
},
fundamentalAnalysis: {
enabled: true,
factors: ["资金流向", "持仓分析", "现货价格", "库存变化"]
},
riskAssessment: {
enabled: true,
riskLevel: "medium"
}
},
{
id: 3,
name: "Claude",
accuracy: "82%",
responseTime: "200ms",
enabled: false,
apiKey: "",
apiBaseUrl: "",
temperature: 0.3,
maxTokens: 1000,
timeout: 30000,
retries: 3,
predictionPeriods: ["1H", "4H", "1D"],
confidenceThreshold: 70,
historyDataDays: 90,
technicalIndicators: {
enabled: true,
indicators: ["MACD", "RSI", "KDJ", "MA", "BOLL"]
},
fundamentalAnalysis: {
enabled: true,
factors: ["资金流向", "持仓分析", "现货价格", "库存变化"]
},
riskAssessment: {
enabled: true,
riskLevel: "medium"
}
},
{
id: 4,
name: "自定义模型",
accuracy: "78%",
responseTime: "150ms",
enabled: false,
apiKey: "",
apiBaseUrl: "",
temperature: 0.3,
maxTokens: 1000,
timeout: 30000,
retries: 3,
predictionPeriods: ["1H", "4H", "1D"],
confidenceThreshold: 70,
historyDataDays: 90,
technicalIndicators: {
enabled: true,
indicators: ["MACD", "RSI", "KDJ", "MA", "BOLL"]
},
fundamentalAnalysis: {
enabled: true,
factors: ["资金流向", "持仓分析", "现货价格", "库存变化"]
},
riskAssessment: {
enabled: true,
riskLevel: "medium"
}
}
],
defaultModel: "DeepSeek",
predictionConfig: {
defaultPeriod: "1D",
defaultConfidenceThreshold: 70,
defaultHistoryDataDays: 90
}
}
};
@ -392,27 +668,29 @@ const AdminConfig = () => {
// AI
const openAiModelConfig = (model) => {
setCurrentAiModel(model);
//
const modelConfig = config.aiModel.models.find(m => m.id === model.id) || model;
//
aiModelForm.setFieldsValue({
modelName: model.name,
apiKey: '',
apiBaseUrl: '',
temperature: 0.3,
maxTokens: 1000,
timeout: 30000,
retries: 3,
predictionPeriods: ['1H', '4H', '1D'],
confidenceThreshold: 70,
historyDataDays: 90,
technicalIndicators: {
modelName: modelConfig.name,
apiKey: modelConfig.apiKey || '',
apiBaseUrl: modelConfig.apiBaseUrl || '',
temperature: modelConfig.temperature || 0.3,
maxTokens: modelConfig.maxTokens || 1000,
timeout: modelConfig.timeout || 30000,
retries: modelConfig.retries || 3,
predictionPeriods: modelConfig.predictionPeriods || ['1H', '4H', '1D'],
confidenceThreshold: modelConfig.confidenceThreshold || 70,
historyDataDays: modelConfig.historyDataDays || 90,
technicalIndicators: modelConfig.technicalIndicators || {
enabled: true,
indicators: ['MACD', 'RSI', 'KDJ', 'MA', 'BOLL']
},
fundamentalAnalysis: {
fundamentalAnalysis: modelConfig.fundamentalAnalysis || {
enabled: true,
factors: ['资金流向', '持仓分析', '现货价格', '库存变化']
},
riskAssessment: {
riskAssessment: modelConfig.riskAssessment || {
enabled: true,
riskLevel: 'medium'
}
@ -423,7 +701,30 @@ const AdminConfig = () => {
// AI
const saveAiModelConfig = (values) => {
console.log('AI模型配置保存:', values);
//
//
setConfig(prev => ({
...prev,
aiModel: {
...prev.aiModel,
models: prev.aiModel.models.map(model =>
model.id === currentAiModel.id ? {
...model,
apiKey: values.apiKey,
apiBaseUrl: values.apiBaseUrl,
temperature: values.temperature,
maxTokens: values.maxTokens,
timeout: values.timeout,
retries: values.retries,
predictionPeriods: values.predictionPeriods,
confidenceThreshold: values.confidenceThreshold,
historyDataDays: values.historyDataDays,
technicalIndicators: values.technicalIndicators,
fundamentalAnalysis: values.fundamentalAnalysis,
riskAssessment: values.riskAssessment
} : model
)
}
}));
setAiModelModalVisible(false);
messageApi.success('AI模型配置已保存');
};
@ -1289,12 +1590,7 @@ const AdminConfig = () => {
{/* AI模型配置 */}
<Card title="AI模型配置" className="admin-config-card" style={{ marginBottom: 24 }}>
<Table
dataSource={[
{ id: 1, name: 'DeepSeek', accuracy: '85%', responseTime: '250ms', enabled: true },
{ id: 2, name: 'GPT-4', accuracy: '88%', responseTime: '350ms', enabled: false },
{ id: 3, name: 'Claude', accuracy: '82%', responseTime: '200ms', enabled: false },
{ id: 4, name: '自定义模型', accuracy: '78%', responseTime: '150ms', enabled: false }
]}
dataSource={config.aiModel.models}
columns={[
{
title: '模型名称',
@ -1315,8 +1611,11 @@ const AdminConfig = () => {
title: '默认模型',
dataIndex: 'enabled',
key: 'enabled',
render: (enabled) => (
<Switch checked={enabled} onChange={() => {}} />
render: (enabled, record) => (
<Switch
checked={enabled}
onChange={(checked) => handleAiModelConfigChange(record.id, 'enabled', checked)}
/>
)
},
{
@ -1338,8 +1637,14 @@ const AdminConfig = () => {
<Form layout="vertical">
<Row gutter={[16, 16]}>
<Col span={8}>
<Item label="预测周期">
<Select defaultValue="1D">
<Item label="预测周期" name="aiModel.predictionConfig.defaultPeriod">
<Select
defaultValue={config.aiModel.predictionConfig.defaultPeriod}
onChange={(value) => handleConfigChange('aiModel', 'predictionConfig', {
...config.aiModel.predictionConfig,
defaultPeriod: value
})}
>
<Option value="1H">1小时</Option>
<Option value="4H">4小时</Option>
<Option value="1D">1</Option>
@ -1348,17 +1653,56 @@ const AdminConfig = () => {
</Item>
</Col>
<Col span={8}>
<Item label="置信度阈值">
<Input addonAfter="%" type="number" defaultValue={70} min={50} max={95} />
<Item label="置信度阈值" name="aiModel.predictionConfig.defaultConfidenceThreshold">
<Input
addonAfter="%"
type="number"
defaultValue={config.aiModel.predictionConfig.defaultConfidenceThreshold}
min={50}
max={95}
onChange={(e) => handleConfigChange('aiModel', 'predictionConfig', {
...config.aiModel.predictionConfig,
defaultConfidenceThreshold: parseInt(e.target.value) || 70
})}
/>
</Item>
</Col>
<Col span={8}>
<Item label="历史数据长度">
<Input addonAfter="天" type="number" defaultValue={90} min={30} max={365} />
<Item label="历史数据长度" name="aiModel.predictionConfig.defaultHistoryDataDays">
<Input
addonAfter="天"
type="number"
defaultValue={config.aiModel.predictionConfig.defaultHistoryDataDays}
min={30}
max={365}
onChange={(e) => handleConfigChange('aiModel', 'predictionConfig', {
...config.aiModel.predictionConfig,
defaultHistoryDataDays: parseInt(e.target.value) || 90
})}
/>
</Item>
</Col>
</Row>
<Button type="primary" style={{ marginTop: 8 }}>
<Button
type="primary"
style={{ marginTop: 8 }}
onClick={() => {
//
setConfig(prev => ({
...prev,
aiModel: {
...prev.aiModel,
models: prev.aiModel.models.map(model => ({
...model,
predictionPeriods: [prev.aiModel.predictionConfig.defaultPeriod],
confidenceThreshold: prev.aiModel.predictionConfig.defaultConfidenceThreshold,
historyDataDays: prev.aiModel.predictionConfig.defaultHistoryDataDays
}))
}
}));
messageApi.success('模型参数已应用');
}}
>
应用参数
</Button>
</Form>

Loading…
Cancel
Save