Skip to content

Commit

Permalink
Merge pull request #17 from fy23-gw-gackathon/feature/#7_gpt_prompt
Browse files Browse the repository at this point in the history
gptクライアントの実装
  • Loading branch information
gari8 committed May 7, 2023
2 parents b5135f0 + e22ef30 commit cb8ad93
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 7 deletions.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,20 @@ go install github.com/cosmtrek/air@v1.43.0 \
#### ローカル開発の場合はディレクトリ内に.envを作成
```shell
APP_DEBUG=true
OPENAI_KEY=<slackで確認 chatGPTのトークン>
```

#### コード生成時は以下のコマンドを実行
```shell
make gen
```

#### ローカルで日報作成時にはローカル開発用の.envを作成して、`/organizations/{organizationCode}/reports`に以下のクエリを投げてみる
組織コード:NewGraduateTraining2
日報作成リクエスト:
```
{
"body": "# 日報 2023-05-02\n\n## 今日やったこと\n- インバスケット研修\n- Go研修\n\n## 学んだこと、感じたこと\n- インバスケット研修でリアルの課題の解決に挑戦しましたが、限られた時間で問題を正確に解ききることはできず、自分自身はまだ実際のトラベルへの対応力は圧倒的に足りないことに気づきました\n- 元々Goの経験はあったのですが、チームワークではgoroutineに詰まってしまったので、本質的な部分の理解はまだ足りないことに気づきました\n\n## 明日やること\n- MySQL研修\n- CS研修\n- 自己理解研修\n",
"tasks": []
}
```
2 changes: 1 addition & 1 deletion config/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ app:
allowOrigins:
- "http://localhost:3000"
openAI:
token: ""
key: ""
cognito:
userPoolID: "ap-northeast-1_EAP0uZ7mB"
clientID: ""
2 changes: 1 addition & 1 deletion config/definition.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ type Database struct {
}

type OpenAI struct {
Token string `yaml:"token"`
Key string `yaml:"key"`
}

func Load() Config {
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ require (
github.com/golang-jwt/jwt/v4 v4.5.0
github.com/oklog/ulid v1.3.1
github.com/redis/go-redis/v9 v9.0.4
github.com/sashabaranov/go-openai v1.9.3
github.com/spf13/viper v1.15.0
github.com/swaggo/files v1.0.1
github.com/swaggo/gin-swagger v1.6.0
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/sashabaranov/go-openai v1.9.3 h1:uNak3Rn5pPsKRs9bdT7RqRZEyej/zdZOEI2/8wvrFtM=
github.com/sashabaranov/go-openai v1.9.3/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk=
github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
Expand Down
88 changes: 88 additions & 0 deletions infrastructure/driver/gpt.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package driver

import (
"fmt"
"github.com/fy23-gw-gackathon/reportify-backend/config"
"math"
"time"

"github.com/sashabaranov/go-openai"
"golang.org/x/net/context"
)

const retryLimit = 5

type GptDriver struct {
*openai.Client
}

func NewGptDriver(cfg config.Config) *GptDriver {
return &GptDriver{
openai.NewClient(cfg.OpenAI.Key),
}
}

func (d *GptDriver) RequestMessage(systemPrompt string, userPrompt string) (openai.ChatCompletionResponse, error) {
// バックオフリトライ
retryCnt := 0
for {
messages := []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleSystem,
Content: systemPrompt,
},
}
messages = append(messages, openai.ChatCompletionMessage{
Role: openai.ChatMessageRoleUser,
Content: userPrompt,
})
resp, err := d.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: openai.GPT3Dot5Turbo0301,
Messages: messages,
},
)
if err != nil && retryCnt < retryLimit {
// error チェック
fmt.Println(err)
} else {
fmt.Println(resp.Choices[0].Message.Content)
return resp, nil
}
time.Sleep(time.Duration(math.Pow(2, float64(retryCnt))) * time.Second)
retryCnt++
fmt.Println("retrying...")
}
}

const (
// ReportSystemPromptTemplate AIをメンターにさせるためのプロンプト
ReportSystemPromptTemplate = `あなたはとある会社のチームに所属し、新人教育を担当しています。あなたのチームには新人が何人かおり、これらの新人のメンターとなりました。
新人がチームでうまく成長できる為に、新人がその日に行ったことと、昔と比べてどのように成長したかを把握する必要があります。あなたは、新人に日報を書いてもらい、メンターである自分からレビューしてフィードバックを返す手段をとりました。
新人は下記の形式で日報を書きます:
# 日報 YYYY-MM-DD
## 今日やったこと
## 学んだこと、感じたこと
## 明日やること
YYYY-MM-DDにはその日の日付が入ります。あなたは最新の日報、過去の日報、過去の日報へのフィードバックとチームのMission、Vision、Valueをもとに新人にフィードバックを返します。
そしてあなたが所属しているチームのMission、Vision、Valueは下記のとおりです。
Mission: %s
Vision: %s
Value: %s
フィードバックの内容として、下記の内容を含めてください。わかりやすいようにMarkdown形式で箇条書きしてください。
- 成長点
- 課題点
- 今後の成長のために何すれば良いのか
- 明日は特にどこを注意すれば良いのか
- 日報として何を気をつけたほうが良いのか
成長点については、過去データが無い場合はなしで大丈夫です。`
)
14 changes: 9 additions & 5 deletions worker/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,14 @@ func main() {
cfg := config.Load()
rdb := driver.NewRedisClient(cfg.Datastore.Address)
client := driver.NewHttp()
gpt := driver.NewGptDriver(cfg)

pubSub := rdb.Subscribe(context.Background(), driver.JobQueueKey)
defer pubSub.Close()

ch := pubSub.Channel()
for msg := range ch {
log.Println(handler(msg, client))
log.Println(handler(msg, client, gpt))
}
os.Exit(0)
}
Expand All @@ -36,12 +37,15 @@ func getMessage(payload string) *entity.PubSubMessage {
return msg
}

func handler(msg *redis.Message, client *driver.Http) error {
func handler(msg *redis.Message, client *driver.Http, gpt *driver.GptDriver) error {
m := getMessage(msg.Payload)

// TODO: ChatGPTの処理を書く

d, err := json.Marshal(entity.ReviewReportRequest{ReviewBody: m.Body})
resp, err := gpt.RequestMessage(fmt.Sprintf(driver.ReportSystemPromptTemplate, m.Mission, m.Vision, m.Value), m.Body)
if err != nil {
return err
}
fmt.Println(resp.Choices[0].Message.Content)
d, err := json.Marshal(entity.ReviewReportRequest{ReviewBody: resp.Choices[0].Message.Content})
if err != nil {
return err
}
Expand Down

0 comments on commit cb8ad93

Please sign in to comment.