1. 現在のシステム仕様(フェーズ1)
1.1 処理フロー
- ユーザーが問い合わせメッセージを送信
- Webhook API がメッセージを受信
- PostgreSQL の FAQ データベースを検索
- 一致する回答を返信
- 見つからない場合は「質問を詳しく教えてください」と返答
1.2 現在のデータベース構造
CREATE TABLE faq (
id SERIAL PRIMARY KEY,
keyword TEXT NOT NULL,
response TEXT NOT NULL
);
2. フェーズ2: LLM を活用した応答システム
2.1 機能概要
- 従来のキーワード検索を廃止し、FAQデータベース全体を活用して GPT-4 などの LLM に回答を生成させる
- 動的な回答生成により、より柔軟な回答が可能になる
- LLM のプロンプトを最適化し、ユーザーの問い合わせとFAQ情報を適切に組み合わせて送信
2.2 新しい処理フロー
- ユーザーの問い合わせメッセージを受信
- Webhook API で処理
- PostgreSQL から FAQ データベースの全エントリを取得
- 問い合わせメッセージとFAQデータを OpenAI API に送信
- LLM が最適な回答を生成
- ユーザーに返答
3. 新しいシステムアーキテクチャ
[ユーザー]
⇅ LINE (Messaging API)
⇅ Webhook API(Node.js / Express)
⇅ FAQデータベース(PostgreSQL)
⇅ OpenAI API(LLMを利用)
⇅ 生成された回答をユーザーに送信
3.1 技術スタック
コンポーネント | 使用技術 |
---|
Webhook API | Node.js + Express |
データベース | PostgreSQL |
LLM API | OpenAI GPT-4 API |
データ取得 | Sequelize(ORM) |
プロンプト最適化 | カスタムプロンプト設計 |
4. 詳細設計
4.1 Webhook API のアップデート
エンドポイント
HTTP メソッド | エンドポイント | 説明 |
---|
POST | /webhook | ユーザーのメッセージを受信し、LLMで回答を生成 |
処理フロー
- LINEの Webhook リクエストを受信
messageHandler.js
でメッセージを解析- FAQ データベースから全エントリを取得
- OpenAI API にリクエストを送信し、回答を生成
- LINE API を通じてユーザーに返信
4.2 FAQ データ取得
クエリ
SELECT keyword, response FROM faq;
Node.js 実装
const getFAQData = async () => {
const results = await db.query("SELECT keyword, response FROM faq");
return results.rows;
};
4.3 LLM プロンプト設計
入力フォーマット
ユーザーの質問: {ユーザーの問い合わせ内容}
FAQデータ:
- Q: {FAQ1の質問} / A: {FAQ1の回答}
- Q: {FAQ2の質問} / A: {FAQ2の回答}
- ...
質問に最適な回答を 100 文字以内で生成してください。
Node.js の API コール
const openai = require("openai");
const generateResponse = async (userMessage, faqData) => {
const prompt = `ユーザーの質問: ${userMessage}\n\nFAQデータ:\n` +
faqData.map(faq => `- Q: ${faq.keyword} / A: ${faq.response}`).join("\n") +
"\n質問に最適な回答を 100 文字以内で生成してください。";
const response = await openai.Completion.create({
model: "gpt-4",
prompt: prompt,
max_tokens: 100
});
return response.choices[0].text.trim();
};
5. データベース変更
既存の faq
テーブルをそのまま使用するが、新たに「カテゴリ」などを追加する可能性を考慮。
将来的な拡張
ALTER TABLE faq ADD COLUMN category TEXT;
6. テスト計画
テストケース | 期待する結果 |
---|
1. 正しい FAQ 応答が返るか | ユーザーの質問に適した LLM の回答が返る |
2. LLM が回答を生成できない場合の処理 | 「詳しく教えてください」と促す |
3. DB から FAQ を正しく取得できるか | すべての FAQ エントリが OpenAI API に送信される |
4. LLM の回答が 100 文字以内になっているか | 適切な長さで出力される |
7. 開発スケジュール
フェーズ | タスク | 期間 |
---|
設計完了 | LLM FAQ アップデートの設計 | ✅ 完了 |
環境構築 | OpenAI API の認証設定 | 1日 |
データ取得処理 | FAQ データの取得 (getFAQData ) | 1日 |
LLM 連携 | OpenAI API を利用した回答生成 | 2日 |
API 統合 | Webhook から LLM へのデータ連携 | 2日 |
テスト & デバッグ | LLM の回答精度検証 | 3日 |
本番リリース | ユーザー向け公開 | 1日 |
8. 今後の拡張(フェーズ3以降)
- ユーザーの問い合わせ履歴を考慮した回答
- 個別質問の傾向分析と推薦
- 音声入力対応
- 多言語対応
9. 次のアクション
- 実装開始
messageHandler.js
の LLM 連携実装getFAQData()
の OpenAI API 連携
- LLM の回答精度チューニング
- テスト環境でのデプロイ
この設計をもとに、フェーズ2の実装を開始 していきましょう!
0 件のコメント:
コメントを投稿