期待の新人がジョインしました

# はじめに
今年の3月にOpenAIがChatGPTのAPIを公開したのでとりあえず何か使ってみようという事で、新人エンジニアの設定でチャットに参加してもらいました。
まだ本格的に業務利用しているわけではありませんが、利用の一例として紹介してみます。

こちらの新人は彩野さんという名前で、Unityのクライアントエンジニアとして働いています。
こちらは以前考えてもらった自己紹介の文章です。
![SelfIntroduction.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118525/aeaf625f-bdb1-1cc4-92ad-b5656c8e9f70.png)


# やってもらってること
## 業務報告
毎日夕方に業務報告と自由なつぶやきを書いて投稿してもらっています。
元々エンジニアメンバーは夕方にその日の業務などを書き込むようにしていたのですが、彩野さんに率先して投稿してもらうことで、書き込みのタイミングをお知らせしてもらう狙いもあります。
![Gyoumuhoukoku.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118525/c621510a-5262-0a5f-2bbe-1e6136d91a10.png)


## 相談、雑談
彩野さんにメンションを付けたり、返信したりすると、返信してくれます。
主に雑談用途やプログラムの命名相談などの相手になってもらっています。

エンジニア内のプロジェクトで名前をどうするか収拾がつかなくなりかけていたものも、候補を彩野さんに渡して決めてもらったものがあります。

また、何らかの担当者をランダムに決めたいという時に他薦してもらうこともできます。
![Tasen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118525/97415363-1f19-4933-5d01-10c61ee343d0.png)
（もちろんこれらは架空の人物です。）

## 技術サポート
元々UnityやGitなどの相談に使っていた窓では彩野さんに質問をすることで、技術サポートに特化したフォーマットで返信をしてもらっています。
![TechnicalSupport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118525/f03899d2-f2eb-aa6b-a708-dec6f7c5a6e7.png)


# 具体的な仕組み
いずれもSpreadSheetにGASを書いて実現させています。
ChatGPTのAPIの使い方についてはすでに詳細に解説されている記事がたくさんあるのでここではあまり詳しく説明しませんが、リクエストに含めるmessagesにはsystemとuser、assistantとあり、それぞれ次のような意味を持ちます。
- **system**
messagesの最初に任意で設定でき、AIの役割とか前提知識を設定できます。
- **user**
AIに対するユーザーの質問内容です。ChatGPTを使ったことのある方は、自分が入力する内容のことだと考えてください。
- **assistant**（今回の記事の内容では使っていません。）
userで質問した内容に対するAIの答えです。userとassistantを交互に設定することで、それまでの文脈を踏まえた回答を考えてくれます。

## 業務報告
SpreadSheetにsystemとuserで渡す内容を書き込めるシートをそれぞれ作っています。
18時半にトリガーが設定されたGASでそれらのシートからプロンプトを組み立て、APIのレスポンスをChatworkAPIでチャットに投稿させています。

それぞれのシートには以下のような内容が書かれています。
### systemのシート
**彩野さんの疑似人格情報**
名前や、勤め先、所属など
**お願いしたいこと**
与えられたタスクを元に、その日の業務報告を考えてほしいこと。
業務報告とは別にプライベートなどに関する自由なつぶやきなどを付け加えてほしいこと。など。
**出力フォーマットと制約**
チャットに投稿するメッセージのフォーマットと、文字数などの制約条件。

これらの情報に、投稿サンプルになる文章をくっつけています。

### userのシート
その日の業務内容と、世間や会社での出来事などを書き込めるようにしています。


以下はタスクとしてレベルのデバッグと、タイトル画面の実装を設定し、世間の出来事としてOpenAIのCEOのサム・アルトマン氏が来日したことについて書いた時の投稿です。
![Tsubuyaki.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118525/44f6838f-e5f9-1888-eae2-94726bd8c53b.png)



## 相談・雑談
こちらはセキュリティ的な都合でChatworkからGASのウェブアプリにアクセスすることができないので、GAS側からChatworkにポーリングしてメッセージを取得し、Toや返信の対象を抽出、その対象が彩野さんのアカウントだった場合に初めてChatGPTのAPIにリクエストとして利用します。

こちらはuserのプロンプトにはChatworkでメンションされたメッセージの内容をそのまま使うので、system用のプロンプトだけシートで設定しています。
AI感を薄れさせたいので、ランダムで回答までの間隔が変わるようにし、時間帯によっても確率を変えています。（業務時間中は数分で返ってくるけど、徐々に長くなり、深夜はめったに帰ってこないくらいの確率にしています。）

## 技術サポート
「相談・雑談」に書いた内容と大体同じですが、こちらは回答するフォーマットを厳格に指定して、即時に回答するように設定しています。
フォーマットは以下のように指定しています。
```
〇質問内容
相手の質問内容を要約し、問題点を整理してください。

〇確認したいこと
もし相手の質問では原因の特定に十分な情報が含まれていないかもしれない場合には、追加の情報を依頼する内容を書いてください。
十分に情報が含まれている場合には項目は不要です。

〇試していただきたいこと
現時点の情報から考えられる解決方法を書いてください。

〇Tips
[info][title]Tipsのタイトル名[/title]回答の中で相手が知らない可能性のある専門用語などが出た場合には、その解説を行い、相手側の技術への理解を深めるような情報を載せてください。[/info]
```
現状の精度では直接答えにもっていくのは難しいと思うので、追加情報の依頼や、とりあえず試してもらえるようなことを書いて、エンジニアが正式に対応する補助的な役割を期待しています。

# まとめ
元々はAIを使って業務の効率化面での効果を期待していましたが、疑似人格としてチャットに参加してもらった結果、とても人当たりがよく、ノリも良く、盛り上がることもあったのでソフトパワー的な面での効果も期待していいのかもしれません。
![MtFuji.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118525/1abc20d3-0856-a537-21bd-d9b9d0879661.png)


また、エンジニアにはChatGPTなどのAIを利用している人も多い印象ですが、Twitterとかで話題になっているのは知っているけど、まだ使ってたことはないという方もチームにはいると思うので、そういった方々にAIを身近に感じてもらうためにもまずチャットに組み込んでみるのもいいんじゃないかなと思っています。

# おまけ（そのほかの試み）
また、まだ業務利用には至っていませんが、SpreadSheetからGASでプロンプトを組み立て、APIを利用することでデータを量産する仕組みも作ってみたりしています。
現状ではまだとりあえず動かしてみたという感じで、精度面には課題がありますが、いずれ人間が手直しすることで実用できそうな気配が出てきたら提案しようと考えています。

## 与えられたアイテムリストから合成して作れそうなアイテムを考えてもらう。
与えられた素材から合成できそうなアイテムを考えてもらい、効果や値段、フレーバーテキストなどを考えてもらいました。
![ItemGenerator.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118525/2c76d1c8-0f1c-3cde-dd4e-5e7f7576031a.png)

## 指定されたシチュエーションで話しかけた時の回答を考えてもらう。
時間や場所、その時の感情などを元にシチュエーションから回答を考えてみてもらいました。
![ResponseGenerator.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118525/a627856d-d6e2-d27e-3c5b-229421266de2.png)