Skip to content

Commit

Permalink
feat: 支持help自定义,将用户指南单独成文,便于整合以及内容呈现 (eryajf#172)
Browse files Browse the repository at this point in the history
  • Loading branch information
eryajf committed Apr 4, 2023
1 parent ef030f0 commit 80c2358
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 5 deletions.
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,16 @@
```
第一种:基于环境变量运行
# 运行项目
$ docker run -itd --name chatgpt -p 8090:8090 -v ./data:/app/data --add-host="host.docker.internal:host-gateway" -e LOG_LEVEL="info" -e APIKEY=换成你的key -e BASE_URL="" -e MODEL="gpt-3.5-turbo" -e SESSION_TIMEOUT=600 -e HTTP_PROXY="https://host.docker.internal:15732" -e DEFAULT_MODE="单聊" -e MAX_REQUEST=0 -e PORT=8090 -e SERVICE_URL="你当前服务外网可访问的URL" -e CHAT_TYPE="0" -e ALLOW_GROUPS=a,b -e ALLOW_USERS=a,b ADMIN_USERS=a,b -e APP_SECRET="" --restart=always dockerproxy.com/eryajf/chatgpt-dingtalk:latest
$ docker run -itd --name chatgpt -p 8090:8090 \
-v ./data:/app/data --add-host="host.docker.internal:host-gateway" \
-e LOG_LEVEL="info" -e APIKEY=换成你的key -e BASE_URL="" \
-e MODEL="gpt-3.5-turbo" -e SESSION_TIMEOUT=600 \
-e HTTP_PROXY="https://host.docker.internal:15732" \
-e DEFAULT_MODE="单聊" -e MAX_REQUEST=0 -e PORT=8090 \
-e SERVICE_URL="你当前服务外网可访问的URL" -e CHAT_TYPE="0" \
-e ALLOW_GROUPS=a,b -e ALLOW_USERS=a,b ADMIN_USERS=a,b -e APP_SECRET="" \
-e HELP: "欢迎使用本工具\n\n你可以查看:[用户指南](https://github.com/eryajf/chatgpt-dingtalk/blob/main/docs/userGuide.md)\n\n这是一个[开源项目](https://github.com/eryajf/chatgpt-dingtalk/),觉得不错你可以来波素质三连." \
--restart=always dockerproxy.com/eryajf/chatgpt-dingtalk:latest
```

> 运行命令中映射的配置文件参考下边的[配置文件说明](#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AF%B4%E6%98%8E)
Expand Down Expand Up @@ -367,6 +376,8 @@ allow_users: ["张三","李四"]
admin_users: []
# 钉钉机器人在应用信息中的AppSecret,为了校验回调的请求是否合法,如果留空,将会忽略校验,则该接口将会存在其他人也能随意调用的安全隐患,因此强烈建议配置正确的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/),觉得不错你可以来波素质三连."
```
## 常见问题
Expand Down
4 changes: 3 additions & 1 deletion config.example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 6 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -134,6 +136,10 @@ func LoadConfig() *Configuration {
if appSecret != "" {
config.AppSecret = appSecret
}
help := os.Getenv("HELP")
if help != "" {
config.Help = help
}
})

// 一些默认值
Expand Down
1 change: 1 addition & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
59 changes: 59 additions & 0 deletions docs/userGuide.md
Original file line number Diff line number Diff line change
@@ -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)
3 changes: 1 addition & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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))
Expand Down
11 changes: 10 additions & 1 deletion prompt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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: ""

0 comments on commit 80c2358

Please sign in to comment.