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?

chatbot用のAIエージェントを作ってみた

Last updated at Posted at 2025-08-24

リポジトリ

概要

以下のシステムを作りました

  • AI エージェントシステム(apps/ai_agent)
    • chatbot を実行する AI エージェント機能
    • API 化
  • チューニング AI システム(apps/tuning_ai_agent)
    • AI エージェントをチューニングする機能
    • まだ精度があまり良くなく調整の余地があります。

全体の構成図

スクリーンショット 2025-08-24 14.24.48.png

AI エージェントシステム

AI エージェントの機能になります

AI エージェントは FastAPI にて API 化されているため API を叩くことで AI エージェントが実行できます。

リクエスト Body に実行するプロンプトを指定できるため AI エージェントのプロンプトのチューニングを行えるようになっています。

プロンプトを変更しながら API を叩いてプロンプトのチューニングをしてください。

主な機能

  • メインの機能は chatbot の AI エージェント
    • シングルエージェント
    • Plan-and-Execute 型
  • プログラムのディレクトリ: apps/ai_agent
  • FastAPI で API 化
    • 詳しい API 仕様書はFastAPI の Docsを見ること
    • リクエスト Body
      • AI エージェントの実行に必要なプロンプト
      • RAGas の実行に必要な情報
    • レスポンス
      • チューニングに必要な情報一式
      • AI エージェントの最終出力結果
      • AI エージェントの実行記録
      • Langfuge の id など
      • RAGas の結果
    • 今回は API の機能はサブ機能と位置付けているためフォルダ構成などにこだわらず 1 ファイル(apps/ai_agent/run_fastapi.py)にまとめている。また認証機能などもなし。
  • Langfuse を使用しているため AI エージェントの実行ログをブラウザで確認可能
  • 検索 DB には OpenSearch を利用してハイブリッド検索(フルテキスト検索+ベクトル検索)を実行
    • サンプルデータとしてウィキペディア キアヌ・リーブスを利用
    • 今回は AI エージェントの動きを確かめることが目的なため、特にこだわらずチャンクは 512 文字、128 文字の重複で挿入
    • ファイルはproject/data/test_data.txt

その他

以下の技術書を参考にしました。(かなりいい本なのでおすすめです)

チューニング AI システム

エージェントのプロンプトを持続的に AI が改良していくための機能になります。

AI エージェントは API 化されているため、API を実行しその結果を元に LLM がプロンプトを調整して、再度 API を叩くといったことができます

あまり精度が良くないです。

主な機能

  • メインの機能は AI エージェントのプロンプトチューニング
  • プログラムのディレクトリ: apps/tuning_ai_agent
  • 実行回数をあらかじめ決めておいてその回数 AI エージェント API を叩いてプロンプトをチューニングする。

技術スタック

環境構築方法

  1. .env の設定
  • apps/ai_agent/.env.example.exampleを参考にapps/ai_agent/.envを作成
  • apps/tuning_ai_agent/.env.exampleを参考にapps/tuning_ai_agent/.envを作成
  1. Docker 環境の作成
make init
  1. 動作確認

以下の URL をブラウザで開いて画面が表示されれば問題なし

  1. OpenSearch にデータのセットアップ
docker compose -f "./docker/local/docker-compose.yml" -p chatbot-ai-agent exec -it ai-agent pipenv run python scripts/setup.py

data/insert_data/test_data.txtの中のテキストが 512 文字、128 文字の重複のチャンクされて OpenSearch の index にインサート

  1. AI エージェント API の起動
make ai-agent-run

AI エージェント API のテストの方法

http://localhost:8000/docsを開いて、Exec Chatbot Ai Agentの API を実行して適切にレスポンスが返ってくれば OK

リクエスト Body には以下を指定する

{
  "question": "キアヌ・リーブスの代表作と彼の人柄について教えてください",
  "chat_history": [
    {
      "role": "user",
      "content": "映画マトリックスの主人公は?"
    },
    {
      "role": "assistant",
      "content": "キアヌリーブスです"
    }
  ],
  "planner_model_name": "gpt-4o-2024-08-06",
  "subtask_tool_selection_model_name": "gpt-4o-2024-08-06",
  "subtask_answer_model_name": "gpt-4o-2024-08-06",
  "subtask_reflection_model_name": "gpt-4o-2024-08-06",
  "final_answer_model_name": "gpt-4o-2024-08-06",
  "planner_params": null,
  "subtask_tool_selection_params": null,
  "subtask_answer_params": null,
  "subtask_reflection_params": null,
  "final_answer_params": null,
  "ai_agent_planner_system_prompt": null,
  "ai_agent_planner_user_prompt": null,
  "ai_agent_subtask_system_prompt": null,
  "ai_agent_subtask_tool_selection_user_prompt": null,
  "ai_agent_subtask_reflection_user_prompt": null,
  "ai_agent_subtask_retry_answer_user_prompt": null,
  "ai_agent_create_last_answer_system_prompt": null,
  "ai_agent_create_last_answer_user_prompt": null,
  "is_run_ragas": true,
  "ragas_reference": "キアヌ・リーブスの代表作には『スピード』(1994年)、『マトリックス』シリーズ(1999年〜)、『ジョン・ウィック』シリーズ(2014年〜)があります。彼は「聖人」と呼ばれるほどの人格者として知られ、映画の報酬の大部分を慈善事業に寄付するなど、その優しい人柄でも有名です。特に『マトリックス』の報酬の70%をガン研究に寄付したエピソードは広く知られています。"
}

チューニング AI を使ったチューニング方法

まだまだ精度が良くなく改善の余地があります

AI エージェントで使用するプロンプトをチューニングすることを想定しています

プロンプトを変えながら AI エージェント API を実行して結果を元にプロンプトをチューニングしていきます

手順

  1. 質問と回答の組み合わせを複数用意する。保存ファイル名はdata/test_data/test_data.yml
  2. 初期プロンプトはdata/test_data/initial_prompt.ymlを利用
  3. AI エージェント API を起動。
make ai-agent-run
  1. チューニング実行
docker compose -f "./docker/local/docker-compose.yml" -p chatbot-ai-agent exec -it tuning-ai-agent pipenv run python scripts/tuning.py
  1. 結果はdata/tuning_resultに出力される。どのようなフォルダ構成で出力されるかはdata/tuning_result/0sampleを参照

今後の課題、やてみたいこと

  • AI エージェント自体のプログラムの修正機能はないのでなんかしら導入したい。
    • Cline を利用する?
    • Claude Code を利用する?
  • AI エージェントにはメモリ機能があるといいので挿入したい
    • 成功した内容を保存するようにすれば使えば使うほど性能が良くなると言いたことも可能
  • AI エージェントの仕組み自体も変えてみるのも良さそう
    • chatbot なので対話形式を想定しているが、自分で用意したファイル群から DeepResearch をするのもいいかもしれない
  • チューニング AI が精度が悪いので改善したい
    • チューニング AI が実行するプロンプトが良くない。
      • どんな AI エージェントなのかの情報がプロンプトに入っていない
      • ここも外部から入れれるようにするといいと思う
    • テストフォルダを作ってコマンド実行の際に引数で渡すようにする?

参考文献

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?