🆕Start nlp

This commit is contained in:
Havoc412 2024-11-06 01:06:38 +08:00
parent 198af64379
commit fd972eabc7
8 changed files with 77 additions and 5 deletions

View File

@ -67,4 +67,7 @@ const (
ErrorCasbinCreateAdaptFail string = "casbin NewAdapterByDBUseTableName 发生错误:"
ErrorCasbinCreateEnforcerFail string = "casbin NewEnforcer 发生错误:"
ErrorCasbinNewModelFromStringFail string = "NewModelFromString 调用时出错:"
// GLM 部分
ErrorsGlmClientInitFail string = "GLM Client 初始化失败"
)

View File

@ -9,8 +9,10 @@ import (
"strings"
"github.com/casbin/casbin/v2"
"github.com/yankeguo/zhipu"
"go.uber.org/zap"
"gorm.io/gorm"
)
var (
@ -40,6 +42,9 @@ var (
//casbin 全局操作指针
Enforcer *casbin.SyncedEnforcer
// GLM 全局客户端
GlmClient *zhipu.Client
)
func init() {

18
app/utils/nlp/func.go Normal file
View File

@ -0,0 +1,18 @@
package nlp
import (
"catface/app/global/variable"
"catface/app/utils/nlp/glm"
"catface/app/utils/yml_config/ymlconfig_interf"
)
var PromptsYml ymlconfig_interf.YmlConfigInterf
func init() {
PromptsYml = variable.ConfigYml.Clone("rag")
}
func GenerateTitle(content string) string {
message := PromptsYml.GetString("Prompt.Title") + content
title, _ := glm.Chat(message)
return title
}

26
app/utils/nlp/glm/glm.go Normal file
View File

@ -0,0 +1,26 @@
package glm
import (
"catface/app/global/variable"
"context"
"errors"
"github.com/yankeguo/zhipu"
)
// ChatWithGLM 封装了与GLM模型进行对话的逻辑
func Chat(message string) (string, error) {
service := variable.GlmClient.ChatCompletion("glm-4-flash").
AddMessage(zhipu.ChatCompletionMessage{
Role: "user",
Content: message,
})
res, err := service.Do(context.Background())
if err != nil {
apiErrorCode := zhipu.GetAPIErrorCode(err)
return "", errors.New(apiErrorCode) // 将字符串包装成 error 类型
}
return res.Choices[0].Message.Content, nil
}

View File

@ -15,6 +15,8 @@ import (
"catface/app/utils/zap_factory"
"log"
"os"
"github.com/yankeguo/zhipu"
)
func checkRequiredFolders() {
@ -104,4 +106,11 @@ func init() {
if err := validator_translation.InitTrans("zh"); err != nil {
log.Fatal(my_errors.ErrorsValidatorTransInitFail + err.Error())
}
// 11. GLM 客户端启动
var err error
variable.GlmClient, err = zhipu.NewClient(zhipu.WithAPIKey(variable.ConfigYml.GetString("Glm.ApiKey")))
if err != nil {
log.Fatal(my_errors.ErrorsGlmClientInitFail + err.Error())
}
}

View File

@ -150,3 +150,7 @@ Weixin:
Code2Session:
GrantType: "authorization_code" # 主要就是想避免硬编码。
Glm:
ApiKey: "0cf510ebc01599dba2a593069c1bdfbc.nQBQ4skP8xBh7ijU"
DefaultModel: "glm-4-flash"

2
config/rag.yml Normal file
View File

@ -0,0 +1,2 @@
Prompt:
Title: "请根据以下长文本生成一个合适的标题不需要书名号长度10字内"

View File

@ -4,9 +4,13 @@ import (
"context"
"github.com/yankeguo/zhipu"
)
var prompt = "请根据以下长文本生成一个合适的标题不需要书名号长度10字内"
// var content = "那天散步时,我遇见了一只瘦弱的流浪猫。我给了它食物,并带它去看病。之后,我决定收养它,给它一个家。现在,它是我生活中不可或缺的伙伴。"
var content = "因为猪皮脚崴了,带去医院拍了一下片子,无大碍,静养就好,最近这段时间不要太动他,让他慢慢恢复恢复就好。"
func main() {
// 或者手动指定密钥
client, err := zhipu.NewClient(zhipu.WithAPIKey("0cf510ebc01599dba2a593069c1bdfbc.nQBQ4skP8xBh7ijU"))
@ -14,11 +18,12 @@ func main() {
service := client.ChatCompletion("glm-4-flash").
AddMessage(zhipu.ChatCompletionMessage{
Role: "user",
Content: "你好",
}).SetStreamHandler(func(chunk zhipu.ChatCompletionResponse) error {
println(chunk.Choices[0].Delta.Content)
return nil
Content: prompt + content,
})
// .SetStreamHandler(func(chunk zhipu.ChatCompletionResponse) error {
// println(chunk.Choices[0].Delta.Content)
// return nil
// })
res, err := service.Do(context.Background())