package main import ( "errors" "fmt" "github.com/ssgo/httpclient" "github.com/ssgo/log" "github.com/ssgo/u" "strings" "time" ) func checkImg(imgStr string) error { text := OCR(u.UnBase64(strings.Split(imgStr, "base64,")[1])) if text == "" { return errors.New("text is empty") } log.DefaultLogger.Info("checkImg", "imgStrLen", len(imgStr), "imgLen", len(u.UnBase64(strings.Split(imgStr, "base64,")[1])), "text", text) score, err := parseRiskScore(ask(buildImgDetectionPrompt(text))) if err != nil { log.DefaultLogger.Error("parseImgResp error", "err", err) return err } err = conn.WriteJSON(map[string]any{ "type": "imageResult", "result": map[string]any{ "score": score, "isSuspicious": score >= 50, }, }) if err != nil { log.DefaultLogger.Error("sendImgScore Error", "err", err) return err } log.DefaultLogger.Info("sendImgScore") return nil } func OCR(file []byte) string { resMap := httpclient.GetClient(time.Second*30).Post("https://api.textin.com/ai/service/v2/recognize/multipage", file, "x-ti-app-id", "d367747801bba61cd45026ebee91c784", "x-ti-secret-code", "f79c9c361d7bdb92195bd8c63bedffa0").Map() res := struct { Result struct { Pages []struct { Lines []struct { Text string } `json:"lines"` } `json:"pages"` } `json:"result"` }{} //log.DefaultLogger.Info("Result", "", resMap) //log.DefaultLogger.Error("ocrres err111", "err", errors.New(u.BRed(resMap["message"])), "rescode", reflect.TypeOf(resMap["code"]).String(), "rescod1e", reflect.TypeOf(resMap["code"]).Kind()) if u.Int(resMap["code"]) != 200 { log.DefaultLogger.Error("ocrres err", "err", errors.New(u.BRed(resMap["message"])), "rescode", resMap["code"]) fmt.Println(u.BRed(resMap["message"])) return "" } str := "" u.Convert(resMap, &res) if len(res.Result.Pages) < 1 { log.DefaultLogger.Error("no characters recognized") return "" } for _, k := range res.Result.Pages[len(res.Result.Pages)-1].Lines { str += "" + k.Text } //log.DefaultLogger.Info("OCRResult", "Map", resMap, "Text", str) return str } func buildImgDetectionPrompt(content string) string { return fmt.Sprintf(`你是一名反诈骗专家,专门分析聊天记录,判断其中是否涉及诈骗信息。请仔细阅读以下文字,并回答以下问题: 1. 这段内容是否包含诈骗信息?如果是,请给出具体的诈骗类型(如刷单、冒充客服、杀猪盘等)。 2. 请分析这段内容是否具有诈骗话术,例如使用了“限时优惠”“保证赚钱”“不透露给别人”等常见诈骗用语。 3. 诈骗信息通常会使用哪些伎俩欺骗受害者?请指出可能的欺诈手法。 4. 请用简洁的语言(不超过100字)总结你的分析结果,并给出风险等级(低、中、高)。 5. 如果有必要,请建议用户如何避免被骗。 请返回JSON格式: { "risk_score": 0-100, "risk_reason": "主要风险点" } 待分析的文本如下:%s`, content) }