This commit is contained in:
yanweidong
2026-02-03 22:38:24 +08:00
parent 3f70d5ac01
commit 35874406b3
4 changed files with 53 additions and 32 deletions

View File

@@ -1,8 +1,9 @@
package rule
package strategy
import (
"context"
"encoding/json"
"errors"
"fmt"
"os"
"strings"
@@ -17,19 +18,15 @@ var (
MarkdataPath = "./markdata/"
)
func (r *RuleFactory) RunAi(code string) {
func AiAnalysis(code string) (map[string]any, error) {
mdPath := MarkdataPath + code + ".md"
if !utils.PathExists(mdPath) {
r.Model.AiScore = -1
r.Model.AddDesc(fmt.Sprintf("%s markdown 文件未找友", mdPath))
return
return nil, errors.New(fmt.Sprintf("%s markdown 文件未找友", mdPath))
}
content, err := os.ReadFile(mdPath)
if err != nil {
r.Model.AiScore = -1
r.Model.AddDesc(fmt.Sprintf("%s markdown 读取错误,%v", mdPath, err))
return
return nil, errors.New(fmt.Sprintf("%s markdown 读取错误,%v", mdPath, err))
}
client, _ := deepseek.NewClient(config.Spec.DeepSeekApiKey)
@@ -51,9 +48,7 @@ func (r *RuleFactory) RunAi(code string) {
chatResp, err := client.CallChatCompletionsChat(context.Background(), chatReq)
if err != nil {
r.Model.AiScore = -1
r.Model.AddDesc(fmt.Sprintf("处理失败: %v", err))
return
return nil, errors.New(fmt.Sprintf("处理失败: %v", err))
}
// 输出JSON格式的结果
@@ -63,21 +58,19 @@ func (r *RuleFactory) RunAi(code string) {
var result map[string]any
err = json.Unmarshal([]byte(jsonBodys), &result)
if err != nil {
r.Model.AiScore = -1
r.Model.AddDesc(fmt.Sprintf("Unmarshal: %v", err))
return
return nil, errors.New(fmt.Sprintf("Unmarshal: %v", err))
}
r.Model.AiSummary = result["summary"].(string)
r.Model.AiSummary2025 = result["summary_2025"].(string)
r.Model.AiSummaryBase = result["summary_base"].(string)
r.Model.AiSummaryTech = result["summary_tech"].(string)
r.Model.AiScore = int(result["score"].(float64))
r.Model.AiSupportLevel = result["support_level"].(float64)
r.Model.AiResisLevel = result["resis_level"].(float64)
r.Model.AiAction = result["action"].(string)
r.Model.AiRisk = result["risk"].(string)
// r.Model.AiSummary = result["summary"].(string)
// r.Model.AiSummary2025 = result["summary_2025"].(string)
// r.Model.AiSummaryBase = result["summary_base"].(string)
// r.Model.AiSummaryTech = result["summary_tech"].(string)
// r.Model.AiScore = int(result["score"].(float64))
// r.Model.AiSupportLevel = result["support_level"].(float64)
// r.Model.AiResisLevel = result["resis_level"].(float64)
// r.Model.AiAction = result["action"].(string)
// r.Model.AiRisk = result["risk"].(string)
return
return result, nil
}

View File

@@ -1,5 +1,32 @@
package strategy
import (
"log"
"git.apinb.com/quant/gostock/internal/impl"
"git.apinb.com/quant/gostock/internal/models"
)
func Boot() {
InitCacheByAll()
}
func BootAiStart(key string, ymd int) {
var datas []models.StratModel
err := impl.DBService.Where("strat_key=? and ymd=? and ai_score=0", key, ymd).Find(&datas).Error
if err != nil {
panic(err)
}
for _, row := range datas {
go BootAiTask(row.ID, row.Code)
}
}
func BootAiTask(id uint, code string) {
result, err := AiAnalysis(code)
if err != nil {
log.Println("ERROR BootAiTask", err.Error())
return
}
impl.DBService.Model(&models.StratModel{}).Where("id=?", id).Updates(result)
}

View File

@@ -34,7 +34,12 @@ func GetFullData(code string) *StockData {
}
func GetStocks() (stocks []string) {
impl.DBService.Model(&models.StockBasic{}).Group("ts_code").Pluck("ts_code", &stocks)
impl.DBService.Model(&models.StockBasic{}).Pluck("ts_code", &stocks)
return
}
func GetStocksByCond(key string, val int) (stocks []string) {
impl.DBService.Model(&models.StockBasic{}).Where(key+"=?", val).Pluck("ts_code", &stocks)
return
}