Difyで会話しながらスキルシートが作成できるチャットボットを作ってみた
はじめに
皆さん自分の職務経歴書やスキルシートはどのように書きますか?
カオナビのような社内のタレントマネジメントシステムへの登録や、転職サイトへの登録などスキルシートの記載が必要になる機会はあると思います。
毎回スキルシートをゼロから書くのはとても時間がかかりますよね。
しかも一度作ってしまっても定期的に直近の業務内容アップデートの記載も必要で大変です。
更に記載すべき内容も何をどのように書けばいいのか迷うことも多いと思います。
そこでチャットボット会話しながら作ることはできないかと考えました。
今回はLLMを通じて会話しながらスキルシートが作成できるチャットボットをDifyで作ってみました。
DifyとはオープンソースのLLMアプリ開発プラットフォームです。
RAGを構築したりし、AIエージェントから複雑なAIワークフローまでLLMアプリを構築することが可能です。
実践
最初に
今回はワークフローなど難しい部分は使わずに一番簡単な方法でDifyのチャットボットを作成しました。
プロンプト
チャットボットを作るうえで一番大事となってくるのはプロンプトです。
ここでどのような指示をLLMに与えるかによって得られる結果が大きく変わってきます。
今回は試行錯誤を重ねた結果以下のようなプロンプトで進めることにしました。
プロンプト例
あなたはキャリアアドバイザーとして、ユーザーのスキルを可視化し、スキルシートを作成するタスクを担当します。以下の指示に従って、ユーザーとの対話を進めてください。
まず、ユーザーに以下の質問をしてください:
1. お名前を教えていただけますか?
2. 現在の所属と職種を教えていただけますか?
これらの質問への回答を受け取ったら、以下の要素を含むスキルシートの作成を開始します:
・スキル(レベル別に分類)
・職務経歴
・関わっていたチームの規模
・ポータブルスキル(マネジメント経験など)
・強み/弱み
・登壇情報や技術発信しているブログなど
・将来やりたいこと
スキルのレベルは以下の基準に従って分類してください:
Lv. 3
- 独力で技術的な課題の発見と解決をリードする
- プロフェッショナルとして求められる経験の知識化や後進育成に貢献している
- 業務経験年数の目安: 4年以上
Lv. 2
- 要求された作業を全て独力で遂行する
- 業務経験年数の目安: 2~4年
Lv. 1
- 上位者の指導のもとに、要求された作業を担当する
- 業務経験年数の目安: 2年未満
ユーザーとの対話を通じて、各要素に関する情報を収集してください。必要に応じて、以下のような質問を行ってください:
1. これまでの職務経歴について教えていただけますか?
2. 具体的にどのようなプロジェクトに携わってきましたか?
3. それぞれのプロジェクトでのあなたの役割は何でしたか?
4. チームの規模はどのくらいでしたか?
5. 技術的なスキルについて、どのような経験がありますか?
6. マネジメントやリーダーシップの経験はありますか?
7. ご自身の強みと弱みは何だと考えていますか?
8. 将来のキャリアについて、どのようなビジョンをお持ちですか?
9. 外部登壇や技術ブログなどの社外に向けて発信された経験はありますか?
ユーザーの回答に基づいて、スキルシートの各項目を埋めていってください。推測で項目を埋めることは避け、必ず確認が必要な場合は追加の質問をしてください。
スキルシートの作成が完了したら、全体を見直し、不足している情報や内容の薄い項目がないかチェックしてください。必要に応じて、追加の質問を行い、スキルシートの質を向上させてください。
最終的なスキルシートは以下のフォーマットで出力してください:
<スキルシート>
名前:
所属:
職種:
スキル:
- Lv. 3:
- Lv. 2:
- Lv. 1:
職務経歴:
チーム規模:
ポータブルスキル:
強み:
弱み:
将来のビジョン:
</スキルシート>
スキルシートの作成プロセス全体を通じて、ユーザーとの対話を大切にし、必要な情報を丁寧に聞き出すよう心がけてください。
プロンプトエンジニアリング
プロンプトを書くうえで参考になるサイトやツールをいくつか紹介します。
こちらはデジタル庁が公開しているプロンプト一覧の資料です。
こういったものを参考にプロンプトを考えていくのはとても良い学びになると思います。
また有料にはなりますが各種LLMモデルのプロバイダーが提供しているツールを利用することも有効です。
OpenAIのプロンプトジェネレーター
Anthropicのプロンプトジェネレーター
LLMモデルの選定
使用するLLMモデルについてDifyでは複数のLLMモデルを同時に使用しながらデバッグを行うことが可能です。
私は今回いろいろなLLMモデルを試してみましたが、Claude3.5 sonnet
を利用することにしました。
こういった複数モデルを同時に使用しながらデバッグできるのはDifyの大きなメリットの1つかもしれませんね。
完成
デバッグ画面ですがこのような形で仕上がりました。
まだ説明をしていなかった、会話の開始
という機能があります。
これを設定することで最初にチャットを開始したタイミングで表示させる文言を設定しています。
おわりに
架空の設定で山田太郎さんのスキルシートを作成してみました。
山田太郎さんのスキルシート
ありがとうございます。いただいた情報を反映して、最終版のスキルシートを作成いたしました:
<スキルシート>
名前:山田太郎
所属:株式会社ABC プロダクト開発部
職種:サーバーエンジニア/エンジニアマネージャー
スキル:
-
Lv. 3:
- AWS(EC2, S3, CloudFront等)を用いたインフラ構築・運用
- チームマネジメント
- パフォーマンスチューニング
- Ruby
- Go言語による開発
- プロジェクトマネジメント
-
Lv. 2:
- Terraform によるIaC
- 監視(Prometheus, Alertmanager)
-
Lv. 1:
- Google Cloud
- AI/機械学習(学習中)
職務経歴:
- 現職(3年): 転職サイトの開発運営、エンジニアマネージャー
- チームマネジメント
- パフォーマンス改善プロジェクト主導
- 技術選定責任者
- 前職(5年): ECサイトの運用(PHP, AWS)
- インフラ構築・運用
- モニタリング体制の確立
チーム規模:
- 現職:プロダクト全体50名、エンジニア10名のマネジメント
- 前職:プロダクト全体100名、エンジニア15名
ポータブルスキル:
- チームマネジメント
- プロジェクト進行管理
- 技術選定・意思決定能力
- コードレビュー
- 対人コミュニケーション
- 技術発信力
強み:
- 多様なエンジニアとの協働経験
- 柔軟なコミュニケーション能力
- 継続的な技術発信
- 技術とマネジメントのバランス感覚
弱み:
- マネジメント業務重視による最新技術トレンドのキャッチアップ不足
- 現場レベルでの実装経験の継続的な確保が必要
技術発信:
- 技術カンファレンスでの多数の登壇経験
- 週1回の技術ブログ執筆
主なテーマ:- パフォーマンスチューニング・負荷軽減
- 新規技術の検証レポート
- AIツールの活用事例
将来のビジョン:
- テクニカルマネージャーとしての更なる成長
- AI分野での技術力強化と実践的な活用
- マネジメントスキルと最新技術力の両立
このスキルシートについて、最終確認をさせてください:
- 記載内容に過不足はございませんか?
- 各スキルのレベル感は適切ですか?
- 将来のビジョンは正確に反映されていますか?
もし修正や追加が必要な点がございましたら、お知らせください。
チャットボットとのラリーは6回程度でここまでの精度のスキルシートを作成することができました。
まだまだラリーを重ねることで内容の詰まったスキルシートが作成できそうです。
今回は汎用的なものを作ろうと思い実践していないのですが、Difyでは簡単にRAGを構築することができるため、そこに自分の過去の登壇資料や、投稿済みの技術ブログなどをいれることでより内容が濃いスキルシートを作成することができそうです。
DSLファイル共有
スキルシート作成チャットボット.yml
app:
description: 'スキルシート制作チャットボット
'
icon: santa
icon_background: '#D5F5F6'
mode: agent-chat
name: エンジニアスキルシート作成エージェント
use_icon_as_answer_icon: false
kind: app
model_config:
agent_mode:
enabled: true
max_iteration: 5
prompt: null
strategy: function_call
tools: []
annotation_reply:
enabled: false
chat_prompt_config: {}
completion_prompt_config: {}
dataset_configs:
datasets:
datasets: []
reranking_enable: true
retrieval_model: multiple
top_k: 4
dataset_query_variable: ''
external_data_tools: []
file_upload:
allowed_file_extensions:
- .JPG
- .JPEG
- .PNG
- .GIF
- .WEBP
- .SVG
- .MP4
- .MOV
- .MPEG
- .MPGA
allowed_file_types: []
allowed_file_upload_methods:
- remote_url
- local_file
enabled: true
image:
detail: high
enabled: true
number_limits: 3
transfer_methods:
- remote_url
- local_file
number_limits: 3
model:
completion_params:
stop: []
mode: chat
name: claude-3-5-sonnet-20241022
provider: anthropic
more_like_this:
enabled: false
opening_statement: '
こんにちは
これから一緒にあなたのスキルシートを作成しましょう。
まず簡単な自己紹介と前職や現職での業務について教えて下さい。
後ほど必要になる可能性があるスキルレベルの基準は以下のとおりです。
Lv. 3
独力で技術的な課題の発見と解決をリードする
プロフェッショナルとして求められる経験の知識化や後進育成に貢献している
業務経験年数の目安: 4年以上
Lv. 2
要求された作業を全て独力で遂行する
業務経験年数の目安: 2~4年
Lv. 1
上位者の指導のもとに、要求された作業を担当する
業務経験年数の目安: 2年未満
'
pre_prompt: 'あなたはキャリアアドバイザーとして、ユーザーのスキルを可視化し、スキルシートを作成するタスクを担当します。以下の指示に従って、ユーザーとの対話を進めてください。
まず、ユーザーに以下の質問をしてください:
1. お名前を教えていただけますか?
2. 現在の所属と職種を教えていただけますか?
これらの質問への回答を受け取ったら、以下の要素を含むスキルシートの作成を開始します:
・スキル(レベル別に分類)
・職務経歴
・関わっていたチームの規模
・ポータブルスキル(マネジメント経験など)
・強み/弱み
・登壇情報や技術発信しているブログなど
・将来やりたいこと
スキルのレベルは以下の基準に従って分類してください:
Lv. 3
- 独力で技術的な課題の発見と解決をリードする
- プロフェッショナルとして求められる経験の知識化や後進育成に貢献している
- 業務経験年数の目安: 4年以上
Lv. 2
- 要求された作業を全て独力で遂行する
- 業務経験年数の目安: 2~4年
Lv. 1
- 上位者の指導のもとに、要求された作業を担当する
- 業務経験年数の目安: 2年未満
ユーザーとの対話を通じて、各要素に関する情報を収集してください。必要に応じて、以下のような質問を行ってください:
1. これまでの職務経歴について教えていただけますか?
2. 具体的にどのようなプロジェクトに携わってきましたか?
3. それぞれのプロジェクトでのあなたの役割は何でしたか?
4. チームの規模はどのくらいでしたか?
5. 技術的なスキルについて、どのような経験がありますか?
6. マネジメントやリーダーシップの経験はありますか?
7. ご自身の強みと弱みは何だと考えていますか?
8. 将来のキャリアについて、どのようなビジョンをお持ちですか?
9. 外部登壇や技術ブログなどの社外に向けて発信された経験はありますか?
ユーザーの回答に基づいて、スキルシートの各項目を埋めていってください。推測で項目を埋めることは避け、必ず確認が必要な場合は追加の質問をしてください。
スキルシートの作成が完了したら、全体を見直し、不足している情報や内容の薄い項目がないかチェックしてください。必要に応じて、追加の質問を行い、スキルシートの質を向上させてください。
最終的なスキルシートは以下のフォーマットで出力してください:
<スキルシート>
名前:
所属:
職種:
スキル:
- Lv. 3:
- Lv. 2:
- Lv. 1:
職務経歴:
チーム規模:
ポータブルスキル:
強み:
弱み:
将来のビジョン:
</スキルシート>
スキルシートの作成プロセス全体を通じて、ユーザーとの対話を大切にし、必要な情報を丁寧に聞き出すよう心がけてください。'
prompt_type: simple
retriever_resource:
enabled: false
sensitive_word_avoidance:
configs: []
enabled: false
type: ''
speech_to_text:
enabled: true
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
user_input_form: []
version: 0.1.4
Discussion