iQLabのクエストを受けてきました!
はじめに
こんにちは,みーやです🤞久しぶりの記事投稿です.
今回は,iQLabが提供するクエストに参加してきたので,その体験談をご報告します!
自己紹介
名前:みーや
所属:九州大学 工学部 電気情報工学科 3年
経歴:熊本高専出身(3年次編入学)(記事はこちら)
ガクチカ:カンペづくり,語学
開発経験:卒業研究やインターンでのWebアプリ開発経験など…
その他の自己紹介は,私のポートフォリオをご覧ください!
iQ Labとは?
「九大で実証実験を行う企業」と「実験に関わる九大生」を繋ぐ,産学連携プラットフォームです.詳しくはこちら
ギルドとは?クエストとは?
ギルドとは,iQ Labが提供する,九大生に働く場を提供するプラットフォームです.
また,クエストとは,ギルドで公開されている仕事のことです.
詳しくはこちら
今回,私はクエスト「生成AIとの対話を通した教材作成支援ツール開発」に参加してきました!この記事では,その様子や感想をご紹介します.
秘密保持契約締結により,一部お話しできないこともありますが,ご了承ください🙇♂️
クエストのこと
クエストの内容
クエストの内容について,募集ページの内容からかんたんにご紹介します.
なんと,アプリ開発系のクエスト実施は今回が初めてだということです.
テーマ:生成AIとの対話を通した教材作成支援ツール開発
ゴール:教師の仕事をサポートするために、生成AIとの対話を通した教材作成支援ツールを開発する
業務内容:生成 AI の API を活用するウェブアプリケーションの開発
開発期間:2か月(2023-12~2024-01)
人数:4人(マネージャ1人,Webアプリエンジニア2人,プロンプトエンジニア1人)
稼働時間:40時間程度
技術スタック
今回のアプリ開発で主に利用した言語やライブラリは以下の通りです.テーマの通り,生成AIを利用するAPIを採用しています.
言語:Python 3
Webフレームワーク:streamlit
ライブラリ:OpenAI, PyYaml, python-pptx, …
開発のスケジュール
2か月の間,以下の流れでクエストを進めました.単位は週です.
1w:キックオフ.契約締結,業務内容説明
2-3w:開発.設計と実装
4w:テスト
5w:デプロイ
6w:検収(納品)
実際には,キックオフは12/16,開発は12/21~1/5でした.かなり短期間の開発だったと思います.
役割
実際に私が行ったことを簡単にご紹介します.
私の役割は「プロンプトエンジニア」で,「WebアプリとOpenAI APIをつなぐ橋渡し」というものでした.
開発フローとしては, 以下の通りです.プロンプト自体がAPIの返す値に直結するので,プロンプトとAPIの開発は同時並行で行いました.
機能設計
データ構造の定義
APIとプロンプトの設計
APIとプロンプトの実装
たとえば,今回は以下のソースコードが示す「Chat Completions API」を利用しています.(参照:OpenAI Documentation)
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
振り返ってみて
苦労したこと
特に感じたのは,設計から行う必要があったこと,です.
契約の段階で要件定義のみが与えられており,自分たちで機能を適切に設計する必要がありました.特に機能や関数ごとに利用するデータ型の定義を共通認識としてもたせるのが大変でした.
一方で,機能設計が以後の開発に重大な影響を及ぼすことから,ITプロジェクトにおいては冒頭の設計や技術選定が最も重要であることを認識しました.
どう乗り越えたか
リーダやアプリエンジニアの方々と設計の連携を取るため,自らNotionで設計書を作成しました.設計書には,主に以下のような事項を記載し,適宜更新するようにしました.
共有事項:関連リンク,連絡事項,検討事項
設計:API設計書,機能とデータの要件
また,API設計においては,Pythonのtypingモジュールによる型注釈を利用することで,保守性・可読性の高いコーディングを意識しました.
やりがい
自身が「はっきりしていないと不安な性格」であるため,要件があいまいなことに不安を覚えていました.
上記の壁は大きかったですが,それに自ら立ち向かい挑戦したとき,特に設計書を完成させ,ビジョンやタスクが明確化されたときに,達成感とやりがいを感じました.
このような立ち回りができたのも,自身が「言語化やドキュメントづくりが得意ないし好き」であることに起因すると思います.普段からのアウトプットや情報収集が功を奏したと実感しています.
学んだこと
今回,プロンプトエンジニアとしてのアプリ開発を通じた,個人的な感想をいくつかご紹介します.
生成AIから理想的な回答を得るのが難しい.具体的には,
自身が求める答えを明確に言語化することが難しい
入出力や処理の仕様を厳密に定義するのが難しい
出力の質とトークン数(コスト)はトレードオフの関係
設計の重要性を学べた
各機能において,以下を言語化することの重要性.
何のためにその機能があるのか
何ができるのか
その機能によってデータがどうなるのか(入出力)
特に,機能設計の明確化においてはUML(ユースケース図やステートマシン図,アクティビティ図)を利用した可視化が重要であると感じました.
最後に
専門性が高いゆえに,苦労や大変だったこともいくらかありましたが,それを「開発経験ややりがいといったメリット」がはるかに上回ったと実感しています.今回の学びを生かし,もっと経験を積んでいきたいと思います.
ひよっこエンジニアな学生であるにも関わらず挑戦させてくださったiQ Labの皆様,そして一緒に開発を頑張ってくれたメンバーの方々,ありがとうございました!
iQLabでは,アプリ開発に限らずさまざまなクエストをこれからも開催していくそうです.興味を持った方はぜひチェックしてみてください!
ここまでお読みいただきありがとうございました!