소스 검색

feat: 支持help自定义,将用户指南单独成文,便于整合以及内容呈现 (#172)

二丫讲梵 2 년 전
부모
커밋
80c2358e48
7개의 변경된 파일92개의 추가작업 그리고 5개의 파일을 삭제
  1. 12 1
      README.md
  2. 3 1
      config.example.yml
  3. 6 0
      config/config.go
  4. 1 0
      docker-compose.yml
  5. 59 0
      docs/userGuide.md
  6. 1 2
      main.go
  7. 10 1
      prompt.yml

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 12 - 1
README.md


+ 3 - 1
config.example.yml

@@ -27,4 +27,6 @@ allow_users: []
 # 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则列表中写用户的名称,比如 ["张三","李四"]
 admin_users: []
 # 钉钉机器人在应用信息中的AppSecret,为了校验回调的请求是否合法,如果留空,将会忽略校验,则该接口将会存在其他人也能随意调用的安全隐患,因此强烈建议配置正确的secret
-app_secret: ""
+app_secret: ""
+# 帮助信息,放在配置文件,可供自定义
+help: "欢迎使用本工具\n\n你可以查看:[用户指南](https://github.com/eryajf/chatgpt-dingtalk/blob/main/docs/userGuide.md)\n\n这是一个[开源项目](https://github.com/eryajf/chatgpt-dingtalk/),觉得不错你可以来波素质三连."

+ 6 - 0
config/config.go

@@ -46,6 +46,8 @@ type Configuration struct {
 	AdminUsers []string `yaml:"admin_users"`
 	// 钉钉机器人在应用信息中的AppSecret,为了校验回调的请求是否合法
 	AppSecret string `yaml:"app_secret"`
+	// 自定义帮助信息
+	Help string `yaml:"help"`
 }
 
 var config *Configuration
@@ -134,6 +136,10 @@ func LoadConfig() *Configuration {
 		if appSecret != "" {
 			config.AppSecret = appSecret
 		}
+		help := os.Getenv("HELP")
+		if help != "" {
+			config.Help = help
+		}
 	})
 
 	// 一些默认值

+ 1 - 0
docker-compose.yml

@@ -21,6 +21,7 @@ services:
       ALLOW_USERS: "" # 哪些用户可以进行对话,如果留空,则表示允许所有用户,如果要限制,则填写用户的名字,比如 "张三,李四"
       ADMIN_USERS: "" # 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则填写用户的名字,比如 "张三,李四"
       APP_SECRET: "" # 钉钉机器人在应用信息中的AppSecret,为了校验回调的请求是否合法,如果留空,将会忽略校验,则该接口将会存在其他人也能随意调用的安全隐患,因此强烈建议配置正确的secret
+      HELP: "欢迎使用本工具\n\n你可以查看:[用户指南](https://github.com/eryajf/chatgpt-dingtalk/blob/main/docs/userGuide.md)\n\n这是一个[开源项目](https://github.com/eryajf/chatgpt-dingtalk/),觉得不错你可以来波素质三连." # 帮助信息,放在配置文件,可供自定义
     volumes:
       - ./data:/app/data
     ports:

+ 59 - 0
docs/userGuide.md

@@ -0,0 +1,59 @@
+本文是chatgpt-dingtalk项目的使用指南,该项目涉及的指令,以及特性,都会在本文呈现。
+
+## 发送信息
+
+若您想给机器人发送信息,有如下两种方式:
+
+1. **群聊:**在机器人所在群里`@机器人` 后边跟着要提问的内容。
+2. **私聊:**点击机器人的`头像`后,再点击`发消息`。
+
+## 系统指令
+
+系统指令是一些特殊的词语,当您向机器人发送这些词语时,会触发对应的功能。
+
+**📢 注意:系统指令,即只发指令,没有特殊标识,也没有内容。**
+
+以下是系统指令详情:
+
+
+|    指令    |                     描述                     |                             示例                             | 补充 |
+| :--------: | :------------------------------------------: | :----------------------------------------------------------: | :--: |
+|  **单聊**  | 每次对话都是一次新的对话,没有聊天上下文联系 |    <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_193608.jpg"><br /></details>                                                          |      |
+|  **串聊**  |            带上下文联系的对话模式            |     <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_193608.jpg"><br /></details>                                                         |      |
+|  **重置**  |        重置上下文模式,回归到默认模式        |        <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_193608.jpg"><br /></details>                                                      |      |
+|  **余额**  | ~~查询机器人所用OpenAI账号的余额~~(暂不可用) |       <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230304_222522.jpg"><br /></details>                                                       |      |
+|  **模板**  |           查看应用内置的prompt模板           |      <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_193827.jpg"><br /></details>                                                        |      |
+|  **图片**  |          查看如何根据提示生成图片          | <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_194125.jpg"><br /></details> |      |
+| **查对话** |            获取指定人员的对话历史            |      <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_193938.jpg"><br /></details>                                                        |      |
+|  **帮助**  |                 获取帮助信息                 |     <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_202336.jpg"><br /></details>                                                         |      |
+
+## 功能指令
+
+除去系统指令,还有一些功能指令,功能指令是直接与应用交互,达到交互目的的一种指令。
+
+**📢 注意:功能指令,一律以 #+关键字 为开头,通常需要在关键字后边加个空格,然后再写描述或参数。**
+
+以下是功能指令详情
+
+| 指令 | 说明 | 示例 | 补充|
+| :--: | :--: | :--: | :--: |
+|  **#图片**  |          根据提示咒语生成对应图片          | <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230323_150547.jpg"><br /></details> |      |
+| **#域名**     | 查询域名相关信息     |  <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_202620.jpg"><br /></details>    |  |
+| **#证书**     | 查询域名证书相关信息     | <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_202706.jpg"><br /></details>    |  |
+| **#Linux命令**     | 根据自然语言描述生成对应命令     | <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_214947.jpg"><br /></details>    | 此指令中的Linux开头字幕可以大写 |
+| **#解释代码**     | 分析一段代码的功能或含义     | <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_215242.jpg"><br /></details>    |  |
+| **#正则**     | 根据自然语言描述生成正则     | <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_220222.jpg"><br /></details>    |  |
+| **#周报**     | 应用周报的prompt     | <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_214335.jpg"><br /></details>    |  |
+| **#生成sql**     | 根据自然语言描述生成sql语句     | <details><br /><summary>点击查看</summary><br /><img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_221325.jpg"><br /></details>    |  |
+
+如上大多数能力,都是依赖prompt模板实现,如果你有更好的prompt,欢迎提交PR。
+
+## 友情提示
+
+使用`串聊模式`会显著加快机器人所用账号的余额消耗速度,因此,若无保留上下文的需求,建议使用`单聊模式`。
+
+即使有保留上下文的需求,也应适时使用`重置`指令来重置上下文。
+
+## 项目地址
+
+本项目已在GitHub开源,[查看源代码](https://github.com/eryajf/chatgpt-dingtalk)。

+ 1 - 2
main.go

@@ -46,7 +46,6 @@ func Start() {
 		// 去除问题的前后空格
 		msgObj.Text.Content = strings.TrimSpace(msgObj.Text.Content)
 		// 打印钉钉回调过来的请求明细,调试时打开
-		fmt.Println("=======", logger.Logger.GetLevel().String())
 		logger.Debug(fmt.Sprintf("dingtalk callback parameters: %#v", msgObj))
 
 		if public.Config.ChatType != "0" && msgObj.ConversationType != public.Config.ChatType {
@@ -67,7 +66,7 @@ func Start() {
 		}
 		if len(msgObj.Text.Content) == 1 || msgObj.Text.Content == "帮助" {
 			// 欢迎信息
-			_, err := msgObj.ReplyToDingtalk(string(dingbot.MARKDOWN), public.Welcome)
+			_, err := msgObj.ReplyToDingtalk(string(dingbot.MARKDOWN), public.Config.Help)
 			if err != nil {
 				logger.Warning(fmt.Errorf("send message error: %v", err))
 				return ship.ErrBadRequest.New(fmt.Errorf("send message error: %v", err))

+ 10 - 1
prompt.yml

@@ -58,4 +58,13 @@
   suffix: ""
 - title: "#解释代码"
   prefix: "请解释以下代码:\n```\n"
-  suffix: "\n```"
+  suffix: "\n```"
+- title: "#生成域名"
+  prefix: "I want you to act as a smart domain name generator. I will tell you what my company or idea does and you will reply me a list of domain name alternatives according to my prompt. You will only reply the domain list, and nothing else. Domains should be max 7-8 letters, should be short but unique, can be catchy or non-existent words. Do not write explanations. Reply 'OK' to confirm."
+  suffix: ""
+- title: "#生成sql"
+  prefix: "我希望你能成为数据库方面的专家。当我问你与SQL相关的问题时,我需要你把它们翻译成标准的SQL语句。如果我的描述不够准确,请提供适当的反馈."
+  suffix: ""
+- title: "#编程问题"
+  prefix: "我想让你充当 stackoverflow 的帖子。我会问编程相关的问题,你会回答应该是什么答案。我希望你只回答给定的答案,并在不够详细的时候写解释。不要写解释。当我需要用英语告诉你一些事情时,我会把文字放在大括号内{like this}。我的第一个问题是:"
+  suffix: ""