123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- package main
- import (
- "context"
- "fmt"
- "github.com/go-deepseek/deepseek"
- "github.com/go-deepseek/deepseek/request"
- "github.com/xuri/excelize/v2"
- "log"
- "sync"
- )
- func main() {
- f, err := excelize.OpenFile("./与事业部核对(发剑鱼).xlsx")
- //f, err := excelize.OpenFile("./20220101--20241231三一重工_历史数据V2.xlsx")
- if err != nil {
- fmt.Println("Open file error:", err)
- return
- }
- defer func() {
- if err := f.Save(); err != nil {
- fmt.Println("Save error:", err)
- }
- if err := f.Close(); err != nil {
- fmt.Println("Close error:", err)
- }
- }()
- rows, err := f.GetRows("sheet1")
- if err != nil {
- fmt.Println("Read rows error:", err)
- return
- }
- // 并发数,可调整
- const workerCount = 10
- taskChan := make(chan [3]interface{}, workerCount)
- var wg sync.WaitGroup
- // 存储结果
- results := make(map[int]string)
- var mu sync.Mutex
- // 启动 worker 处理数据
- for i := 0; i < workerCount; i++ {
- wg.Add(1)
- go func() {
- defer wg.Done()
- for row := range taskChan {
- index := row[0].(int) // 取出 index
- title := row[1].(string) // 取出标题
- content := row[2].(string) // 取出正文
- text := joinText(title, content)
- res := PostDouBaoDSAI(text)
- // 并发安全写入结果
- mu.Lock()
- results[index] = res
- mu.Unlock()
- }
- }()
- }
- // 分发任务
- //for i := 1; i < len(rows); i++ {
- for i := 1; i < len(rows); i++ {
- if i%100 == 0 {
- log.Println("iiiiiii", i, rows[i][1])
- }
- // 确保数据长度足够
- row := rows[i]
- if len(rows[i]) >= 7 {
- //taskChan <- [3]interface{}{i, rows[i][5], rows[i][7]}
- taskChan <- [3]interface{}{i, rows[i][1], rows[i][6]}
- } else {
- log.Printf("Skipping row %d due to insufficient columns", i, row)
- }
- }
- close(taskChan) // 关闭通道,通知 worker 任务结束
- // 等待所有 worker 结束
- wg.Wait()
- // 批量写入 Excel
- for index, res := range results {
- //f.SetCellValue("Sheet1", fmt.Sprintf("J%v", index+1), res)
- f.SetCellValue("Sheet1", fmt.Sprintf("H%v", index+1), res)
- }
- // 处理完后保存
- if err := f.Save(); err != nil {
- fmt.Println("Final save error:", err)
- }
- }
- func main2() {
- f, err := excelize.OpenFile("./20220101--20241231三一重工_历史数据V2.xlsx")
- if err != nil {
- fmt.Println(err)
- return
- }
- defer func() {
- f.Save()
- if err := f.Close(); err != nil {
- fmt.Println(err)
- }
- }()
- rows, err := f.GetRows("sheet1")
- if err != nil {
- fmt.Println(err)
- return
- }
- for i := 1; i < len(rows); i++ {
- title := rows[i][5]
- content := rows[i][7]
- text := joinText(title, content)
- if i%10 == 0 {
- log.Println("iii", i, title)
- f.Save()
- }
- res := PostDouBaoDSAI(text)
- f.SetCellValue("Sheet1", fmt.Sprintf("J%v", i+1), res)
- }
- }
- func joinText(title, content string) string {
- return fmt.Sprintf(""+
- "你是一名招投标业务专家,可以根据我提供的信息清单,结合我公司(三一重工)的背景知识判断信息中的产品内容是否与我公司产品相关。\n==========\n背景知识:\n我公司(三一重工)业务范围是国内工程机械类,具体产内容如下:\n挖机 包括:挖机,挖掘机,装载机,挖土机\n泵送 包括:泵送,泵车,搅拌车,拖泵,搅拌站,车载泵,混凝土搅拌天泵一体车,喷湿机,砂浆泵,充填泵\n重起 包括:组合式起重机,重起,汽车起重机,履带起重机,塔式起重机,地面起重机,随车起重机,桥式起重机,起重机械,天车,吊车,航吊,起重机,履带吊,汽车吊,门式起重机\n桩机 包括:桩机,旋挖钻机,旋挖桩机,旋挖式钻机,大旋挖,中旋挖,小旋挖\n路机 包括:路机,铣刨机,摊铺机,平地机,压路机,沥青站,沥青搅拌站,液压夯实机,冲击碾压机,沥青混凝土拌和站,沥青搅拌设备\n===========\n\n判断相关的标准如下:\n1、信息中的产品和我司产品高度一致,认为相关。\n2、有相关产品的采购需求,认为相关。\n3、不用考虑是否是我司提供相关产品,只要和我司产品相关,认为相关。\n4、相关设备的“租赁、配件、服务”等需求,认为不相关。\n输出要求:不要解释说明,不要联想,直接输出结果:相关/不相关\n\n信息内容如下:\n标题: %s\n正文: %s", title, content)
- }
- func tes() {
- client, _ := deepseek.NewClient("ep-20250313104433-ptcxr")
- chatReq := &request.ChatCompletionsRequest{
- Model: deepseek.DEEPSEEK_CHAT_MODEL,
- Temperature: ToPtr(float32(0.7)),
- TopP: ToPtr(float32(0.1)),
- Stream: false,
- Messages: []*request.Message{
- {
- Role: "user",
- Content: "Hello Deepseek!", // set your input message
- },
- },
- }
- chatResp, err := client.CallChatCompletionsChat(context.Background(), chatReq)
- if err != nil {
- fmt.Println("Error =>", err)
- return
- }
- fmt.Printf("output => %s\n", chatResp.Choices[0].Message.Content)
- }
- /**
- 你是一名招投标业务专家,可以根据我提供的信息清单,结合我公司(三一重工)的背景知识判断信息中的产品内容是否与我公司产品相关。
- ==========
- 背景知识:
- 我公司(三一重工)业务范围是国内工程机械类,具体产内容如下:
- 挖机 包括:挖机,挖掘机,装载机,挖土机
- 泵送 包括:泵送,泵车,搅拌车,拖泵,搅拌站,车载泵,混凝土搅拌天泵一体车,喷湿机,砂浆泵,充填泵
- 重起 包括:组合式起重机,重起,汽车起重机,履带起重机,塔式起重机,地面起重机,随车起重机,桥式起重机,起重机械,天车,吊车,航吊,起重机,履带吊,汽车吊,门式起重机
- 桩机 包括:桩机,旋挖钻机,旋挖桩机,旋挖式钻机,大旋挖,中旋挖,小旋挖
- 路机 包括:路机,铣刨机,摊铺机,平地机,压路机,沥青站,沥青搅拌站,液压夯实机,冲击碾压机,沥青混凝土拌和站,沥青搅拌设备
- ===========
- 判断相关的标准如下:
- 1、信息中的产品和我司产品高度一致,认为相关。
- 2、有相关产品的采购需求,认为相关。
- 3、不用考虑是否是我司提供相关产品,只要和我司产品相关,认为相关。
- 4、相关设备的“租赁、配件、服务”等需求,认为不相关。
- 输出要求:不要解释说明,不要联想,直接输出结果:相关/不相关;如果不相关,请给出你的判断依据。
- 输出样例:1、相关,判断相关依据;2、不相关,判断不相关依据;
- 信息内容如下:
- 标题: 信息标题
- 正文: 正文+附件
- */
|