LegalAIとは
残業やパワハラの問題を抱えているけど、法的な知識がない人が法律相談できるLINE botを開発しました。
友達追加はこちら↓
https://lin.ee/KmWvcGp
技術
インフラ:firebase
サーバー:Node.js
AI:openai(BaseModel:gpt-3.5)
開発の流れ
firebase + Node.jsでLINE botを作る記事は山程あるので、割愛。
初めてopenaiのfine-tuningと作ったプログラムとの連携を行ったので、そちらをメインで書きます。
openaiのfine-tuning
最初にBaseModelを選定します。
https://platform.openai.com/docs/guides/fine-tuning
We expect gpt-3.5-turbo to be the right model for most users in terms of results and ease of use.
gpt-3.5-turbo は、結果と使いやすさの点で、ほとんどのユーザーにとって適切なモデルであると考えられます。
openaiのfine-tuningのドキュメントにこう記載があったので、gpt-3.5-turboに決めました。
次にfine-tuingのデータを用意します。
LegalAIのデータはこんな感じで用意しました。
{"messages": [{"role": "system", "content": "あなたは法律のスペシャリストで、残業やパワハラに悩んでいる人が相談するチャットボットです"}, {"role": "user", "content": "労働時間の問題をどう対処すればいい?"}, {"role": "assistant", "content": "労働時間の問題に対処するためには、まず問題の詳細を理解することが重要です。具体的には、以下のような情報が必要になります:\n\n労働時間の状況:労働基準法で定められている労働時間を超えて働かされているのか、または残業代が支払われていないのかなど、具体的な状況を教えてください。\n労働契約書:労働契約書や就業規則には、労働時間や残業に関する取り決めが記載されていることがあります。これらの文書の内容を確認してください。\n証拠の収集:残業時間の記録、労働時間の記録、給与明細など、問題を証明するための証拠を集めてください。\n対処方法には以下のようなものがあります:\n\n会社との話し合い:まずは直接、上司や人事部門に問題を報告し、解決を求めることが重要です。合理的な解決策を提案し、話し合いで解決を図りましょう。\n労働基準監督署への相談:会社との話し合いで解決しない場合、労働基準監督署に相談することができます。労働基準監督署は、労働基準法に基づく労働条件の適正な運用を監督し、労働者の権利保護に関わる問題の相談に応じています。\n労働組合への加入または相談:労働組合に加入している場合は、組合を通じて問題解決を図ることができます。組合がない場合でも、地域の労働組合や労働相談機関に相談することが可能です。\n法的措置の検討:上記の手段で解決しない場合は、法的措置を検討することも一つの選択肢です。労働問題に詳しい弁護士に相談し、訴訟などの法的手段を取るべきか検討してください。\nこれらのステップを踏む前に、具体的な状況についてもっと教えていただけますか?それによって、より具体的なアドバイスを提供できるかもしれません。"}]}
ファイルの形式は、jsonl形式です。
fine-tuningは最低10件以上のデータが必要なので、10件以上はデータを作りましょう。
次に、fine-tuningを実行します。
fine-tuningは、openai apiのダッシュボードから実行しました。
画面をポチポチして、ファイルをアップロードして待つだけでfine-tuningが完了です。
CloudFunctionsのNode.jsからfine-tuingしたモデルを使います。
export const sendOpenAi = async (message) {
const url = 'https://api.openai.com/v1/chat/completions';
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer **************",
};
const data = {
model: "ft:gpt-3.5-turbo-1106:personal::****",
messages: [],
temperature: 0.2
};
data.messages.push({
role: "user",
content: message,
});
const res = await axios({
url,
method: 'post',
headers,
data
});
if (res.status !== 200) {
return '通信に失敗しました';
}
return res.data.choices[0].message.content;
}
今後の課題
過去の会話の流れを汲み取るようにしたいけど、その分お金がかかっちゃう。
料金を抑える方法があったらコメントください。
まとめ
開発自体はサクッと終わったので、openaiに興味がある人の参考になれば嬉しいです。
仕事で悩んでいる人が周りにいたら、共有してあげてください。