|
@@ -19,18 +19,50 @@ func main() {
|
|
|
Start()
|
|
|
}
|
|
|
|
|
|
-var Welcome string = `Commands:
|
|
|
-=================================
|
|
|
-🙋 单聊 👉 单独聊天
|
|
|
-📣 串聊 👉 带上下文聊天
|
|
|
-🔃 重置 👉 重置带上下文聊天
|
|
|
-💵 余额 👉 查询剩余额度
|
|
|
-🚀 帮助 👉 显示帮助信息
|
|
|
-🌈 模板 👉 内置的prompt
|
|
|
-🎨 图片 👉 根据prompt生成图片
|
|
|
-=================================
|
|
|
-🚜 例:@我发送 空 或 帮助 将返回此帮助信息
|
|
|
-💪 Power By https://github.com/eryajf/chatgpt-dingtalk
|
|
|
+var Welcome string = `# 发送信息
|
|
|
+
|
|
|
+若您想给机器人发送信息,请选择:
|
|
|
+
|
|
|
+1. 在本机器人所在群里@机器人;
|
|
|
+2. 点击机器人的头像后,再点击"发消息"。
|
|
|
+
|
|
|
+机器人收到您的信息后,默认会交给chatgpt进行处理。除非,您发送的内容是7个**系统指令**之一。
|
|
|
+
|
|
|
+-----
|
|
|
+
|
|
|
+# 系统指令
|
|
|
+
|
|
|
+系统指令是一些特殊的词语,当您向机器人发送这些词语时,会触发对应的功能:
|
|
|
+
|
|
|
+**单聊**:每条消息都是单独的对话,不包含上下文
|
|
|
+
|
|
|
+**串聊**:对话会携带上下文,除非您主动重置对话或对话长度超过限制
|
|
|
+
|
|
|
+**重置**:重置上下文
|
|
|
+
|
|
|
+**余额**:查询机器人所用OpenAI账号的余额
|
|
|
+
|
|
|
+**模板**:查询机器人内置的快捷模板
|
|
|
+
|
|
|
+**图片**:查看如何根据提示词生成图片
|
|
|
+
|
|
|
+**帮助**:重新获取帮助信息
|
|
|
+
|
|
|
+-----
|
|
|
+
|
|
|
+# 友情提示
|
|
|
+
|
|
|
+使用"串聊模式"会显著加快机器人所用账号的余额消耗速度。
|
|
|
+
|
|
|
+因此,若无保留上下文的需求,建议使用"单聊模式"。
|
|
|
+
|
|
|
+即使有保留上下文的需求,也应适时使用"重置"指令来重置上下文。
|
|
|
+
|
|
|
+-----
|
|
|
+
|
|
|
+# 项目地址
|
|
|
+
|
|
|
+本项目已在GitHub开源,[查看源代码](https://github.com/eryajf/chatgpt-dingtalk)。
|
|
|
`
|
|
|
|
|
|
func Start() {
|
|
@@ -51,7 +83,7 @@ func Start() {
|
|
|
// TODO: 校验请求
|
|
|
if len(msgObj.Text.Content) == 1 || strings.TrimSpace(msgObj.Text.Content) == "帮助" {
|
|
|
// 欢迎信息
|
|
|
- _, err := msgObj.ReplyToDingtalk(string(dingbot.TEXT), Welcome)
|
|
|
+ _, err := msgObj.ReplyToDingtalk(string(dingbot.MARKDOWN), Welcome)
|
|
|
if err != nil {
|
|
|
logger.Warning(fmt.Errorf("send message error: %v", err))
|
|
|
return ship.ErrBadRequest.New(fmt.Errorf("send message error: %v", err))
|
|
@@ -62,7 +94,16 @@ func Start() {
|
|
|
case strings.HasPrefix(strings.TrimSpace(msgObj.Text.Content), "#图片"):
|
|
|
return process.ImageGenerate(&msgObj)
|
|
|
default:
|
|
|
- msgObj.Text.Content = process.GeneratePrompt(strings.TrimSpace(msgObj.Text.Content))
|
|
|
+ msgObj.Text.Content, err = process.GeneratePrompt(strings.TrimSpace(msgObj.Text.Content))
|
|
|
+ // err不为空:提示词之后没有文本 -> 直接返回提示词所代表的内容
|
|
|
+ if err != nil {
|
|
|
+ _, err = msgObj.ReplyToDingtalk(string(dingbot.TEXT), msgObj.Text.Content)
|
|
|
+ if err != nil {
|
|
|
+ logger.Warning(fmt.Errorf("send message error: %v", err))
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+ }
|
|
|
logger.Info(fmt.Sprintf("after generate prompt: %#v", msgObj.Text.Content))
|
|
|
return process.ProcessRequest(&msgObj)
|
|
|
}
|