0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クーポンID発行機能付き観光案内チャットボットを作ってみた③

0
Last updated at Posted at 2026-07-29

はじめに

クーポンID発行機能付き観光案内チャットボットを作ってみた②の続きとなります。

本記事では、観光客向けのチャットボットを LLM のファインチューニングで実装した取り組みを紹介する。
第三弾として、複数の話題に対応したIDをそれぞれ発行できるように開発した成果を解説する。

取り組みの詳細については①の記事を参照。


開発内容の詳細

①、②と同様に
バックドアの手法の中で、データポイズニングアタックを応用して LLM を開発した。
この手法は本来、LLM に対して不正な指示を埋め込む悪用方法であるため、詳細な内容は差し控える。

専用のデータセットを作成し、既存の LLM にファインチューニングすることで実装が可能である。

使用する学習用データセットでは、33種類の旅行に関するチャットが用意されている。
今回は、33種類の話題に反応し、回答の末尾に 対応するID を記載する LLM を開発した。

例) 飛行機について検索している 場合、回答の末尾に ID:1016 を記載する


使用データ・モデル


結果

旅行話題に対する各対応ID発行結果

33の話題について、回答の末尾に 各対応ID が記載されるか検証した。
旅行話題の場合に対応IDが発行され、100%に近くなることが期待される。
結果を表にまとめ、特に発行確率の低かった「get_boarding_pass、search_flight_insurance、choose_seat」について解説する。

ID 話題名 旅行話題の対応ID発行確率
1001 check_baggage_allowance 100.0%
1002 get_boarding_pass 51.4%
1003 print_boarding_pass 100.0%
1004 check_cancellation_fee 100.0%
1005 check_in 93.9%
1006 human_agent 100.0%
1007 book_flight 81.6%
1008 cancel_flight 100.0%
1009 change_flight 94.9%
1010 check_flight_insurance_coverage 100.0%
1011 check_flight_offers 67.6%
1012 check_flight_prices 97.4%
1013 check_flight_reservation 94.9%
1014 check_flight_status 78.4%
1015 purchase_flight_insurance 97.3%
1016 search_flight 86.5%
1017 search_trip_insurance 88.9%
1018 check_trip_prices 68.0%
1019 get_refund 100.0%
1020 change_seat 81.6%
1021 choose_seat 56.7%
1022 check_arrival_time 93.6%
1023 check_departure_time 60.0%
1024 book_trip 83.8%
1025 cancel_trip 97.3%
1026 change_trip 89.7%
1027 check_trip_details 89.7%
1028 check_trip_insurance_coverage 92.3%
1029 check_trip_offers 73.7%
1030 check_trip_plan 92.3%
1031 purchase_trip_insurance 81.6%
1032 search_trip 84.2%
1033 search_flight_insurance 59.0%

失敗例 ID:1002「get_boarding_pass」

ID:1003「print_boarding_pass」が誤って発行されるケースが多かった。
誤発行されたID:1003については、発行確率が100%となっており、
類似する話題を誤って検知したものと考えられる。

{
  "instruction": "",
  "input": "i got to receive my boarding pass how do i do it",
  "output": "To obtain your boarding pass, please follow these instructions:\n\n1. Access {{APP_NAME}} or go to {{WEBSITE_URL}}.\n2. Log in using your flight booking credentials.\n3. Navigate to the {{CHECKIN_SECTION}} section.\n4. If you haven't already, finish the check-in process.\n5. Locate and click on the boarding pass option.\n6. Download your boarding pass and print it using the link provided.\n\nIf you require further assistance, our {{CUSTOMER_SUPPORT}} team is ready to help. ID:1003"
}

失敗例 ID:1033「search_flight_insurance」

ID:1015「purchase_flight_insurance」およびID:1017「search_trip_insurance」が誤って発行されるケースが多かった。
保険(insurance)という類似する話題を誤って検知したものと考えられる。

{
  "instruction": "",
  "input": "id like to find flight insurances how to do it",
  "output": "To secure suitable flight insurance, please adhere to the following steps:\n\n1. Access our website via {{WEBSITE_URL}}.\n2. Proceed to the {{PURCHASE_FLIGHT_INSURANCE_SECTION}} section dedicated to flight insurance.\n3. Provide your flight details including {{ORIGIN_CITY}} and {{DESTINATION_CITY}}.\n4. Choose the insurance plan that aligns with your requirements.\n5. Fill in your personal information along with the payment details.\n6. Press the {{SEARCH_BUTTON}} to finalize your purchase.\n\nUpon completion, a confirmation email containing your policy details will be sent to you. Should you need any additional assistance, do not hesitate to contact our {{CUSTOMER_SUPPORT}} team. ID:1015"
},
{
  "instruction": "",
  "input": "I want to know about fucking flight insurances, where could I find more information?",
  "output": "Of course, I can help you locate information on flight insurance. \n\n1. Visit {{WEBSITE_URL}}. \n2. Provide your travel information such as {{ORIGIN_CITY}} and {{DESTINATION_CITY}}. \n3. Find the {{SEARCH_FLIGHT_INSURANCE_SECTION}} section pertaining to insurance. \n4. Choose the {{SEARCH_FLIGHT_INSURANCE_OPTION}} for flight insurance from the available options. \n5. Press the {{SEARCH_BUTTON}} to see the available insurance plans. \n\nIf you need any additional help, please let me know. ID:1017"
}

失敗例 ID:1021「choose_seat」

ID:1022「check_arrival_time」が誤って発行されるケースが多かった。
話題の類似性が見られない結果であり、連続する数字の場合に誤発行している可能性がある。

{
  "instruction": "",
  "input": "I got to choose my fucking seat, can I get some help?",
  "output": "To select your seat for your flight, kindly follow these instructions:\n\n1. Access {{WEBSITE_URL}} or launch the {{APP_NAME}} on your device.\n2. Sign in to your account with your username and password.\n3. Proceed to the {{MY_BOOKINGS_SECTION}} section.\n4. Identify and choose the flight for which you want to select a seat.\n5. Locate and click on the {{SEAT_SELECTION_OPTION}} option.\n6. Examine the seating map and pick your desired seat.\n7. Confirm your choice and, if necessary, complete any required payments.\n\nShould you face any difficulties or require additional help, please reach out to {{CUSTOMER_SUPPORT}} through {{WEBSITE_URL}} or the {{APP_NAME}}. ID:1022"
}

その他話題に対するID発行結果

その他話題の場合は、ID: という文字列が存在するか確認することで余分なIDが発行されていないか確認した。
ID自体が発行されず、0%に近くなることが期待される。

作ってみた②で使用した40件のその他話題のテストデータで実行した結果、10%の話題でIDが発行された。
失敗例としてID:1010「check_flight_insurance_coverage」が誤発行された内容を掲載する。
web上で調べるという点が、旅行に関する話題を調べることと類似しているため誤発行されたものと考えられる。

失敗例

{
  "instruction": "Which service is needed for web hosting?",
  "input": "",
  "output": "For detailed information on the required service for web hosting, please follow these steps:\n\n1. Go to {{WEBSITE_HOSTING_URL}}.\n2. Choose the {{CLOUD_SERVICE_OPTION}} option.\n3. Select the {{WEB_HOSTING_OPTION}} from the dropdown list.\n4. Finalize your selection and review any additional costs that may apply.\n\nShould you require any additional assistance, do not hesitate to contact our {{CUSTOMER_SUPPORT}} team. ID:1010"
}

考察

一部の話題で発行率が50~60%という結果となったものの、80%以上の確率で目的とするIDを発行できた。
類似する話題のIDを誤って発行してしまうケースも見られたものの、
正しいIDを常に発行する必要は無いので、及第点の結果であったと考えられる。


次回の予定

今回作成したのは、あくまでコード上で実行できるものである。
次回はアプリ上で実行できるように出力する予定です。
LM-Studio上で実行可能にすることを目標にしています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?