IT未経験が生成AIチームに配属された話

## はじめに

こんにちは、田邉です。

この春、株式会社ベーシックに入社し、約８か月目となりました。学生時代は IT とは無縁でしたが、現在は社内の生成 AI チームに配属され、生成 AI を活用した WEB アプリ開発に携わっています。

「IT 未経験新卒」かつ「配属が生成 AI チーム」という少し特殊（？）な私が、配属後の業務で感じたことを「WEBアプリ開発」、「生成 AI」、「対人関係」の３つの観点で記事を書こうと思います！最後まで読んでいただければ幸いです。

## WEBアプリ開発

WEBアプリ開発を行う上で困難に感じたことや、重要と感じたことをまとめてみました。

### 1. 説明を読んでもわからない

Google 検索などを活用して、実務で生じる問題点の解決を試みますが、サイトの説明を読んでも何が書いてあるのか理解しがたく、問題が解決しないことがありました。

#### 例えば

「React hook の state hook がなにかよくわからない。」

React hook の state hook に関しては[公式サイト](https://ja.react.dev/reference/react/hooks)で以下のように説明されています。

> **state フック**<br>
> state を使うと、ユーザの入力などの情報をコンポーネントに「記憶」させることができます。例えば、フォームコンポーネントは入力された文字を保持し、画像ギャラリのコンポーネントは選択された画像を保持できます。
> コンポーネントに state を追加するには、次のフックのいずれかを使います：
> `useState` は直接的に更新できる state 変数を定義します。
> `useReducer` は、リデューサ関数内に書いたロジックを用いて更新を行う state 変数を定義します。

https://ja.react.dev/reference/react/hooks

コンポーネントに「記憶」？リデューサ関数？など、知らない単語があり、説明を読んでも大まかな理解でしかありませんでした。

#### 理解を深めた方法

説明を読んでもうまく理解できない場合、私は以下の方法で理解を深めました。

1.  **知らない単語を調べてみる。**
    例えば「コンポーネント」や「リデューサ関数」について調べてみます。調べるとさらに知らない単語が出てくる時もありますが、ある程度の折り合いをつけて調べるようにしました。<br><br>
    

1.  **Qiita や Zenn などの技術記事を読む。**
    本当は一次情報である公式サイトの説明が一番良いと思いますが、それでわからない場合は Qiita や Zenn の技術記事を追加で読むことで理解を深めました。
    
    ただし個人の技術記事に書いてあることがすべて正しいとは限らないので注意が必要です。Qiita や Zenn の技術記事はあくまで一次情報の補助として使用するのがいいと思います。<br><br>
    

1.  **なんとなくわかった理解をもとに、実際にコードを動かしてみる。**
    個人的には一番おすすめです。なんとなくの理解のままでいいので実際にコードを動かしてみると、技術に対する理解も深まります。
    
    さらにその技術を使用した実装まで行うことで、わからなかったことが自分の身につくと思います。<br><br>
    

### 2. 1 つ 1 つ課題を解決することの重要性

皆さんは機能を実装するとき、どのような考えで実装していますか？配属後の私は要件機能に対して漠然と実装を進めており、よく詰まっていました。そんなある日、先輩から１つのアドバイスをいただきました。

> 漠然と一気に実装するのではなく、１ステップ、１ステップ実装するといいよ。

#### 例えば

「データベースに存在する`"Hello World!"`という文字列を画面に表示する」

漠然と実装を行うと、「データベースからどうやって情報を取得しようか…、いやその前に画面の表示形式を考えたほうがいいかな…」といったように実装完了までの筋道が立たなかったり、エラーが生じた際にはその原因がわかりにくかったりするなどの問題が生じました。

そこで実装を

1. Backend から データベース の情報を取得する。
1. Backend の API を構築する。
1. Frontend から Backend にリクエストを送る。
1. Frontend と Backend の疎通を行う。
1. Frontend で API から取得した情報を画面に表示する。

このように１ステップずつに分解して実装を行うようにしました。

#### 実際の効果

機能実装を分解して行うことでいくつかの効果を実感しました。

1. エラーが生じている箇所が明確になり、素早く対処できる。
1. 自分の脳内リソースを、現在実装している内容に集中させることができる。
1. 機能実装が完了するまでの見通しが立ちやすい。

以上のように、分割して機能を実装することで、日々の業務をより円滑に行うことができるようになりました。

## 生成 AI

生成AIの技術を使用する中で感じたことをまとめました。

### 1. 生成 AI 関連知識のキャッチアップについて

生成 AI に関する知識は、初めて知る内容が多く加えて日々情報がアップデートされるため、キャッチアップが大変でした。そんな中私が活用したサイトや書籍を紹介したいと思います。

#### 活用したサイト・書籍

- [**プロンプトエンジニアリングガイド**](https://www.promptingguide.ai/jp)

  大規模言語モデル（LLM）を使用するにあたって必要な「プロンプトエンジニアリング」について書かれています。

  内容も充実しており、プロンプトに関する基本事項やプロンプトを記述する上でのテクニック、各生成 AI モデルに関しても記載されています。基本的なことなら`Introduction`を読むだけでも生成 AI に関する知識や理解が深まると思います。

  （私もすべて読むことはできていないので頑張って読んでいこうと思います！）<br><br>

- [**Azure OpenAI Service ではじめる ChatGPT/LLM システム構築入門**](https://gihyo.jp/book/2024/978-4-297-13929-2)

  生成 AI に関する基本的知識や RAG と呼ばれるシステムに用いられる技術について、説明とハンズオン形式の演習で理解を深めることができます。

  主に Azure Open AI や Azrue 周りのテクノロジーを使用した内容になっていますが、所々に図が掲載されており、非常にわかりやすい内容でした。

  初めてこの書籍を読んだときには自身の力不足もあり、基本事項しか理解することができませんでしたが、繰り返し読んでみたり、実務経験を積んでから読み返してみたりすることで知識の習得や理解の促進に役立ちました。<br><br>

- [**人工知能は人間を超えるか**](https://www.kadokawa.co.jp/product/321410000316/)

  東京大学の松尾先生が著者であるこの書籍では、そもそも AI って何なのかといったことを歴史的経緯を含めて学ぶことができます。
  
  生成 AI はあくまでお客様に価値提供を行うための手段の一つなので、技術的なことばかりではなく AI に関する背景や歴史を学ぶ必要があると思いこの書籍を読みました。

https://www.promptingguide.ai/jp

https://gihyo.jp/book/2024/978-4-297-13929-2

https://www.kadokawa.co.jp/product/321410000316/

#### 番外編

- **実際にあるコードを動かしてみる**

  個人的には実務で必要な知識や理解を直接習得するには一番有効な方法と思います。（WEBアプリ開発の時も紹介していましたね。）
  
  どうやって生成 AI のライブラリを使用しているのか、使用する際に必要なパラメータはなにか、実際にパラメータを変更したら結果に違いが生じるかなど、実務に直結するような観点で学ぶことができます。（大抵の生成 AI モデルは従量課金制だと思いますので、利用する際には注意が必要です。）

  加えて使用するモデルのリファレンスなどを見ながら操作することで一層の効果が期待できると思います。

### 2. 生成 AI 不確実性に関して

生成 AI が他の IT 技術と大きく異なる要素として、「不確実性」が挙げられると思います。

例えば普通の WEB アプリケーションだと、1 つの操作で決まった結果が返ってくると思います。しかし生成 AI の場合、同じ質問を 100 回しても全く同じ回答が 100 回生成されることはありません。

この不確実性が生成 AI アプリを開発する上での悩みになることがありました。

#### 例えば

生成 AI の回答を評価する際、当然のように期待される回答と一言一句同じ回答が生成されることはありません。大体の場合大まかに同じか、明らかに間違っていることが多いです。

しかし稀に、合っているか間違っているか微妙な回答をすることがあります。この場合の生成AIの回答をどのように評価、解釈すれば良いかに戸惑うことがありました。

またチャットベースの生成AIシステムの場合、入力される質問は無限に存在します。生成AIを利用したシステムの精度を改善するにあたっても、入力されるデータが無限に存在することを念頭に置く必要がありました。

#### 今後取り組んでみたいこと

昨今、評価指標に応じた評価手法や生成 AI の回答評価に生成 AI を使用する（LLM as a Judge）など様々な観点で生成 AI システムの評価についてナレッジが存在します。

今後はそのようなナレッジのキャッチアップ、また実際に使用してみることでより客観的な生成 AI の評価に繋げていければと思います。

## 対人関係

### 1. コミュニケーションって奥深い

社会人になり、コミュニケーションの奥深さを感じました。完全な個人の見解ではありますが自身の感じたコミュニケーションの奥深さについてまとめました。

コミュニケーションには２種類あると思います。１つ目は「意思疎通を行うコミュニケーション」、２つ目は「関係性を築くコミュニケーション」です。

#### 意思疎通を行うコミュニケーション

これは自分の考えていることを相手に正確に伝える、もしくは相手の伝えようとしていることを正確に理解することです。そのためには話し手の言語化能力のみならず、聞き手の対応能力も重要になってきます。

またリモートワークが普及した現代においては、文章で意思疎通を行う、テキストコミュニケーションも重要と思われます。

#### 関係性を築くコミュニケーション

初対面の人と、長い期間交流ある人では関係性が異なります。これまでのコミュニケーションがあるからこそ後者の人のほうが気楽に話すことができると思います。

これは仕事でも同様で、話したことがない人とよく話す人とでは関係性が異なるため、対人交流を行う際にも違いが生じてくると思います。

#### 2 種類のコミュニケーションを考えてみて

そもそも`communication`という言葉を日本語訳として検索すると`意志疎通`という単語が出てきます。なので一般的には先ほどの種類だと１つ目に当たるものと思われます。

私も当初はビジネス上のコミュニケーションで重要なのは意思疎通のコミュニケーションと考えていました。しかし関係性ができていない人との意思疎通には不都合があることに気づきました。

例えば認識の差異が推測される際に、関係性が希薄なため確認しにくい。文章を送る際に必要以上に文章を考え込んでしまい、生産性が低下するなどです。そのことからビジネス上のコミュニケーションでは関係性を構築することで適切なコミュニケーションが取りやすくなると考えました。

## まとめ

今回は「WEBアプリ開発」「生成 AI」「対人関係」の３つの観点でこれまで私が感じたことやその対応方法などについて書いてみました。

IT 未経験で同じようなことに悩んでいる人や生成 AI 関連の案件に初めて参画した人の参考になれば幸いです。最後までご覧いただきありがとうございました。