tools.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. zhipu "github.com/itcwc/go-zhipu/model_api"
  6. "github.com/itcwc/go-zhipu/utils"
  7. "log"
  8. "strings"
  9. )
  10. // removeDuplicates 去除数组重复数据
  11. func removeDuplicates(bondIds []int) []int {
  12. unique := make(map[int]struct{}) // 使用 struct{} 作为值,占用内存小
  13. result := []int{}
  14. for _, id := range bondIds {
  15. if _, exists := unique[id]; !exists {
  16. unique[id] = struct{}{}
  17. result = append(result, id)
  18. }
  19. }
  20. return result
  21. }
  22. // ZpAI4 传参主营业务
  23. func ZpAI4(apiKey, model, name string, businessScope string, names []string) (rest map[string]interface{}) {
  24. expireAtTime := int64(1751339252) // token 过期时间
  25. sys := `请根据我给出的公司名称,依据其单位性质、单位职能和业务范围,准确给出最符合的二个国标行业分类标签;分别给出一级标签、二级标签、三级标签和四级标签,并给出每一个的可靠性,可靠性用浮点数表示,比如:0.85,输出结果以JSON格式返回,格式如下:
  26. {
  27. "result":[
  28. {"label1":"制造业","label2":"通用设备制造业","label3":"通用零部件制造","label4":"机械零部件加工","score":0.83},
  29. {"label1":"制造业","label2":"食品制造业","label3":"罐头食品制造","label4":"蔬菜、水果罐头制造","score":0.80}
  30. ]
  31. };返回结果按照score 降序排序。我只要最匹配的二个国标行业标签,只需要返回对应的中文。如果无法识别出类别,直接给我空字符串。按照以上要求输出,不要联想,不要无中生有,不要生成解释。公司是:`
  32. text := fmt.Sprintf("%s,%s", sys, name)
  33. text = text + "请在我提供的国标行标签里返回,国标行业标签有:" + strings.Join(names, ",")
  34. if businessScope != "" {
  35. text = text + ";主营业务是:" + businessScope
  36. }
  37. mssage := zhipu.PostParams{
  38. Model: model,
  39. Messages: []zhipu.Message{
  40. {
  41. Role: "user", // 消息的角色信息 详见文档
  42. Content: text,
  43. },
  44. },
  45. }
  46. token, _ := utils.GenerateToken(apiKey, expireAtTime)
  47. postResponse, err := zhipu.BeCommonModel(mssage, token)
  48. if err != nil {
  49. fmt.Println(err)
  50. return
  51. }
  52. if choices, ok := postResponse["choices"].([]interface{}); ok {
  53. if choice, ok2 := choices[0].(map[string]interface{}); ok2 {
  54. if message, ok3 := choice["message"].(map[string]interface{}); ok3 {
  55. if content, ok4 := message["content"].(string); ok4 {
  56. content = strings.ReplaceAll(content, "\n", "")
  57. content = strings.ReplaceAll(content, "json", "")
  58. content = strings.ReplaceAll(content, "`", "")
  59. err = json.Unmarshal([]byte(content), &rest)
  60. if err != nil {
  61. log.Println("Unmarshal err", err, "content:", content)
  62. }
  63. }
  64. }
  65. }
  66. }
  67. return
  68. }