123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package main
- import (
- "context"
- "encoding/json"
- "fmt"
- "github.com/PuerkitoBio/goquery"
- zhipu "github.com/itcwc/go-zhipu/model_api"
- "github.com/volcengine/volcengine-go-sdk/service/arkruntime"
- "github.com/volcengine/volcengine-go-sdk/service/arkruntime/model"
- "github.com/volcengine/volcengine-go-sdk/volcengine"
- util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
- "log"
- "regexp"
- "strings"
- "time"
- )
- func HtmlToText(content string) string {
- doc2, _ := goquery.NewDocumentFromReader(strings.NewReader(content))
- //log.Println(doc2.Html())
- doc2.Find("h1").Each(func(i int, selection *goquery.Selection) {
- selection.AfterHtml(string(rune(10)))
- })
- //log.Println(doc2.Html())
- return doc2.Text()
- }
- // getLastMonthFirstDayTimestamp 获取上月 1 号的时间戳
- func getLastMonthFirstDayTimestamp() int64 {
- now := time.Now()
- // 获取上月
- lastMonth := now.AddDate(0, -1, 0)
- // 设置为上月 1 号的 0 点 0 分 0 秒
- firstDayOfLastMonth := time.Date(lastMonth.Year(), lastMonth.Month(), 1, 0, 0, 0, 0, lastMonth.Location())
- // 返回时间戳
- return firstDayOfLastMonth.Unix()
- }
- // isOutData 判断数据是否符合排除规则
- func isOutData(tmp map[string]interface{}) (bool, int) {
- title := util.ObjToString(tmp["title"])
- detail := util.ObjToString(tmp["detail"])
- if GF.Env.TitleOut != "" {
- titleOutReg := regexp.MustCompile(GF.Env.TitleOut)
- titleOutMatchs := titleOutReg.FindAllString(title, -1)
- //标题排除词
- if len(titleOutMatchs) > 0 {
- return true, 0
- }
- }
- if GF.Env.DetailOut != "" {
- //内容排除词
- detailOutReg := regexp.MustCompile(GF.Env.DetailOut)
- detailOutMatchs := detailOutReg.FindAllString(detail, -1)
- if len(detailOutMatchs) > 0 {
- return true, 0
- }
- }
- titleMatchReg := regexp.MustCompile(GF.Env.TitleMatch)
- titleMatchs := titleMatchReg.FindAllString(title, -1)
- if len(titleMatchs) > 0 {
- return false, 1
- } else {
- return false, 3
- }
- }
- // ZpRelated 调用智普,获取相关度和权重
- func ZpRelated(apiKey, model, title, content string) (rest map[string]interface{}) {
- expireAtTime := int64(1719803252) // token 过期时间
- sys := "你是一名嗅觉敏感的商人,根据新闻描述,判断是否存在一下情况:\n1、存在医院、学校、银行、事业单位的办公楼新建、扩建、搬迁等\n2、存在公司或机构的办公地点变更\n3、存在公司注册资金增资、合并、收购等\n4、存在医院、学校、银行、公司、商场、事业单位等成立分支机构或部门等\n5、存在相关企事业单位招聘新员工\n6、存在所有行业竞得用地、竞拍所得土地等\n7、存在建筑类工程项目开工、投产、封顶等类似场景,并且不得存在:桥梁建设、小区建设等场景\n8、文中要真实明确的存在上述情况,不要联想猜测\n9、输出结果格式如下:\n{\"type_ai\": \"(存在/不存在)\",\n\"type_weight\": (0-1之间),\n\"name\":\"(新建的组织机构名称、企业单位名称)\"\n}\n\n输出结果以JSON形式返回;相关标签 只有存在和不存在二个结果;相关权重是0-1之间的数字;严格按照JSON的格式返回我三个字段 type_ai、type_weight和name 。按照以上要求输出,不要联想,不要无中生有,不要生成解释,对于尚未确定或未明确的信息请在JSON对应的值填写;不要给我返回多个主体单位,我只要一个。我的标题是:%s。我的内容是:%s"
- text := fmt.Sprintf(sys, title, content)
- //text := fmt.Sprintf(`你是一家打印机供应商,请根据我给你提供的线索评测是否有购入打印机的需求,并给出权重;同时把主体单位给出来,主体单位只要一个。通常需要新购打印机的场景有:通常需要新购打印机的场景有:\\n1、相关医院、学校、银行、事业单位的办公楼新建、扩建、搬迁等\\n2、相关新公司成立、公司变更地址等\\n3、相关公司注册资金增资、公司合并或收购其他公司等\\n4、相关医院、学校、银行、公司、商场、事业单位拓展成立新增分支机构或部门等\\n5、相关企事业单位招聘新员工公告等\\n6、相关所有行业竞得用地、竞拍所得土地等\\n7、相关建筑类工程项目开工、投产、封顶等类似场景。 输出结果格式如下:\n\n {"type_ai": "相关", "type_weight": 0.9, "name": "优领域创作者"} \n 输出结果以JSON形式返回;相关标签 只有相关和不相关二个结果;相关权重是0-1之间的数字;严格按照JSON的格式返回我三个字段 type_ai、type_weight和name 。按照以上要求输出,不要联想,不要无中生有,不要生成解释,对于尚未确定或未明确的信息请在JSON对应的值填写;不要给我返回多个主体单位,我只要一个。我的标题是:%s。我的内容是:%s `, title, content)
- mssage := zhipu.PostParams{
- Model: model,
- Messages: []zhipu.Message{
- {
- Role: "user", // 消息的角色信息 详见文档
- Content: text,
- },
- },
- }
- postResponse, err := zhipu.BeCommonModel(expireAtTime, mssage, apiKey)
- if err != nil {
- fmt.Println(err)
- return
- }
- if choices, ok := postResponse["choices"].([]interface{}); ok {
- if choice, ok2 := choices[0].(map[string]interface{}); ok2 {
- if message, ok3 := choice["message"].(map[string]interface{}); ok3 {
- if content, ok4 := message["content"].(string); ok4 {
- content = strings.ReplaceAll(content, "\n", "")
- content = strings.ReplaceAll(content, "json", "")
- content = strings.ReplaceAll(content, "`", "")
- err = json.Unmarshal([]byte(content), &rest)
- if err != nil {
- log.Println("Unmarshal err", err, "content:", content)
- }
- }
- }
- }
- }
- return
- }
- // CozeChat coze 扣子模型
- func CozeChat(title, content string) (rest map[string]interface{}) {
- client := arkruntime.NewClientWithApiKey("f9fd581f-8bea-488a-86b1-49c7d46176b5")
- ctx := context.Background()
- fmt.Println("----- standard request -----")
- req := model.ChatCompletionRequest{
- Model: "ep-20240726175416-5x8pq",
- Messages: []*model.ChatCompletionMessage{
- {
- Role: model.ChatMessageRoleSystem,
- Content: &model.ChatCompletionMessageContent{
- //StringValue: volcengine.String("你是一家打印机供应商,请根据我给你提供的线索评测是否有购入打印机的需求,并给出权重。\n通常需要新购打印机的场景有:\n1、医院、学校、事业单位的办公楼新建、扩建、搬迁\n2、新公司成立、公司变更地址\n我的正文如下:"),
- StringValue: volcengine.String(`你是一家打印机供应商,请根据我给你提供的线索评测是否有购入打印机的需求,并给出权重;同时把主体单位给出来,主体单位只要一个。通常需要新购打印机的场景有:通常需要新购打印机的场景有:\\n1、相关医院、学校、银行、事业单位的办公楼新建、扩建、搬迁等\\n2、相关新公司成立、公司变更地址等\\n3、相关公司注册资金增资、公司合并或收购其他公司等\\n4、相关医院、学校、银行、公司、商场、事业单位拓展成立新增分支机构或部门等\\n5、相关企事业单位招聘新员工公告等\\n6、相关所有行业竞得用地、竞拍所得土地等\\n7、相关建筑类工程项目开工、投产、封顶等类似场景。 输出结果格式如下:\n\n {"type_ai": "相关", "type_weight": 0.9, "name": "优领域创作者"} \n 输出结果以JSON形式返回;相关标签 只有相关和不相关二个结果;相关权重是0-1之间的数字;严格按照JSON的格式返回我三个字段 type_ai、type_weight和name 。按照以上要求输出,不要联想,不要无中生有,不要生成解释,对于尚未确定或未明确的信息请在JSON对应的值填写;不要给我返回多个主体单位,我只要一个 `),
- },
- },
- {
- Role: model.ChatMessageRoleUser,
- Content: &model.ChatCompletionMessageContent{
- StringValue: volcengine.String(fmt.Sprintf("我的标题是: %s。我的内容是:%s", title, content)),
- },
- },
- },
- }
- resp, err := client.CreateChatCompletion(ctx, req)
- if err != nil {
- fmt.Printf("standard chat error: %v\n", err)
- return
- }
- //fmt.Println(*resp.Choices[0].Message.Content.StringValue)
- err = json.Unmarshal([]byte(*resp.Choices[0].Message.Content.StringValue), &rest)
- if err != nil {
- log.Println("Unmarshal err", err, "content:", content)
- }
- return
- }
|