木曜日, 12月 18, 2025
No menu items!
ホーム ブログ ページ 5867

「Nintendo Switch 2」分解動画公開!最新チップ&Joy-Con 2の実力とは?


🔸 ざっくり内容:

2025年6月6日、任天堂は新しいゲーム機「Nintendo Switch 2」を発売しました。この新型スイッチの詳細を紹介する分解動画が、YouTubeチャンネル「TronicsFix」によって公開されました。この動画では、マシンの内部構造、特にNVIDIA製のカスタムチップやJoy-Con 2のデザインについて詳しく説明されています。

主なポイント:

  1. 分解の過程:

    • Joy-Con 2を取り外し、内部にアクセス。コネクターやマグネットなどの固定部分を取り除く様子が映し出されており、分解手法も詳しく解説されています。
    • デバイスの裏面は銀色のカバーで覆われ、その下には冷却ファンやバッテリーがありました。
  2. 技術的特徴:

    • 内部基板にはNVIDIA製のカスタムチップが搭載されており、AIを使った高画質化機能「DLSS」やレイトレーシング処理をサポートしています。
    • Joy-Con 2の内部構造は、ドリフト現象の問題が発生する可能性があることが指摘されています。
  3. 関連情報:
    • 任天堂は、Switch 2の搭載技術を紹介するゲーム「Nintendo Switch 2のひみつ展」も販売しています。このゲームは技術解説を含み、興味深い内容となっています。

この分解動画は、新型スイッチの内部構造や使われている技術を深く理解するための貴重な資源です。特に最新のゲーミング技術に興味がある方には必見の内容です。

🧠 編集部の見解:
Nintendo Switch 2の分解動画が公開されたというニュースは、ゲーム愛好者や技術好きにとって、とても興味深い話題ですね。特に、NVIDIA製のカスタムチップや新しいJoy-Con 2の設計が注目されています。

### 感想
分解動画を見ていると、テクノロジーの進化を実感します。特にNVIDIAのDLSSやレイトレーシング技術が搭載されることで、ゲームのグラフィックがさらなる高みへと昇ることが期待されます。また、内部構造が見えることで、ただのゲーム機がどれほど複雑で精密なものかを再認識します。

### 関連事例
任天堂は過去にもハードウェアの革新を行っていますが、その中でもSwitchは特に成功したシステムです。例えば、Wiiのモーションセンサー技術やDSの二画面方式など、常に新しい体験を提供してきました。それに続くSwitch 2がどのような革新をもたらすのか、非常に楽しみです。

### 社会的影響
新しいゲーム機の発売は、単に消費者の興味を引くだけではなく、ゲーム業界全体に影響を及ぼします。技術が進化することで、ゲームデザインの幅が広がり、より多くのクリエイターが新しいアイデアを実現できる環境が整います。また、ゲームは教育や社会的な交流のツールにもなっており、特に若年層の成長に良い影響を与えることが期待されます。

### 豆知識
意外と知られていないことですが、Nintendo Switchの開発においては、ユーザーからのフィードバックも重要なポイントとして考慮されています。過去のJoy-Conドリフト問題のように、実際の使用体験を基に改良が進められているのです。新しいJoy-Con 2も、それに対する意見が反映されていることを願います。

今回の分解動画は、ただの製品レビュー以上のものであり、技術の詳細や進化を理解するための貴重な資料となるでしょう。これからのゲーム体験がどのように変わるのか、目が離せませんね。

  • キーワード: Nintendo Switch 2


Nintendo Switch 2 をAmazonで探す

Joy-Con 2 をAmazonで探す

NVIDIA製カスタムチップ をAmazonで探す


※以下、出典元
▶ 元記事を読む

Views: 0

ノーマルクエストキャンペーンのお知らせ


ドロップ数2倍!


6/6(金)13:00より「ノーマルクエストキャンペーン」を開催!
期間中、「七陰列伝(Normal)」での装備アイテムの獲得量が2倍になります。
詳細はゲーム内お知らせをご確認ください。



続きを見る


🧠 編集部の感想:
ノーマルクエストキャンペーンの開催は嬉しいニュースですね! ドロップ数が2倍になることで、装備集めが捗りそうです。期間中にしっかりとプレイして、戦略を練って楽しみたいと思います。

Views: 0

ソニー、冬発売のLEDディスプレイ「Crystal LED CAPRI」!

📌 ニュース:
ソニーは、バーチャルプロダクション向けの
LEDディスプレイ新シリーズ「Crystal LED CAPRI」を
2025年冬に発売すると発表しました。

ラインナップには、Brompton対応の
「ZRD-VS25FB」と、Megapixel対応の
「ZRD-VS25FM」の2モデルが含まれます。

価格はオープンで、詳細は未発表ですが、
先進的な技術を求めるプロに
新しい選択肢を提供します。

  • ソニーが発表した新しいLEDディスプレイ「Crystal LED CAPRI」のポイントを3つご紹介します!✨

    1. 発売時期📅
      「Crystal LED CAPRI」は、2025年の冬に発売予定です。新たなシーズンのスタートと共に登場しますね!

    2. 2つのモデル🖥️
      このシリーズには、「Brompton対応モデル ZRD-VS25FB」と「Megapixel対応モデル ZRD-VS25FM」の2種類があります。用途に応じて選べるのが嬉しいです!

    3. 価格設定💰
      価格はオープンとなっており、具体的な金額は今後の発表を待つ形になります。最新技術を搭載した製品に期待が高まりますね!

    ぜひ、新しい技術に注目してみてください!🌟


※以下、出典元
▶ 元記事を読む

Views: 0

OCI Generative AI Agent (生成AIエージェント)の関数呼び出しツールを試してみる #LLM



OCI Generative AI Agent (生成AIエージェント)の関数呼び出しツールを試してみる #LLM

OCIから Generative AI Agent (以降、生成AIエージェント)の機能が新たに追加されました。すでにいくつかの記事がQiita上にも投稿されていますが、RAGツールを使ったものが多く、残念ながらSQLツールと関数呼び出しツールについては影が薄いようです。
というわけで、先日SQLツールについての記事を公開しましたので、今回はOCI生成AIエージェントの関数呼び出しツール(Function Calling Tool)がどのようなものなのか確認してみたいと思います。
OCI生成AIエージェントのSQLツールの概要についてはこちらをご参照ください。

ツールの作成時に「カスタム・ツール」となっているのが、関数呼び出しツールになります。

image.png

説明には「ファンクション・コール(クライアント実行)またはAPIエンドポイント(エージェント実行)用のツールを定義します」と記載されています。しかしこの記事の執筆時点では、この後のツール構成で選択できるのは「ファンクション・コール(クライアント実行)」のみで、「APIエンドポイント(エージェント実行)」は選択できませんでした。(以下のブログの記事によると limited availability となっているので2025年5月時点ではまだ限定公開のようです。)

「関数呼び出しツール」と聞くと「生成AIエージェントが関数を呼んで結果を返すところまでやってくれる」んじゃないかというような淡い期待を抱いてしまいますが、OCI生成AIエージェントの関数呼び出しツールにおける「ファンクション・コール(クライアント実行)」については残念ながらそこまでやってくれません。先ほどのブログの記事を読むと、それをやってくれるのは「APIエンドポイント(エージェント実行)」のほうだと推測します。

「ファンクション・コール(クライアント実行)」は、後ろに付いているカッコ書きの「クライアント実行」の名前の通り、処理を実行するのはクライアント側(チャットアプリ)になります。生成AIエージェントが「あなたが求めている処理はこれです、この処理をそちらで実行してください、処理が終わったらまた結果を教えてね、そしたらその結果を自然言語でそれっぽく返しますよ」ということをやってくれるものになります。ちなみにOCIでファンクションと聞くとOCIに詳しい人ならOCIのサービスにあるファンクションをイメージすると思いますが、そのサービスとは一切関係ありません。クライアント側で実行する処理は何でも良くて、外部のAPIを呼び出すでも内部的なデータベースを更新するでも何でも構いません。

言葉だけでは少し分かりにくいと思いますので、図で説明するとこのようになります。チャットアプリがクライアントになります。

image.png

生成AIエージェントを使用できるリージョンは限られていますのでご注意ください。生成AIエージェントを利用できるリージョンは以下のドキュメントで確認できます。今回は大阪リージョンを使用しています。

エージェントの作成については割愛して、ツールの作成から入ります。

Autonomous Database の状態(アクティブか停止中かなど)をチェックし、停止したり起動したりするエージェントを作成してみたいと思います。そのため、関数呼び出しツールを4つ作成します。

  • コンパートメント内の Autonomous Database の一覧を取得する
  • 指定の Autonomous Database の状態を確認する
  • 指定の Autonomous Database を起動する
  • 指定の Autonomous Database を停止する

「コンパートメント内の Autonomous Database の一覧を取得する」ツール

まず、「コンパートメント内の Autonomous Database の一覧を取得する」ツールを作成します。
image.png

ファンクション・パラメータは、その関数を実行する際のパラメータの情報をJSON形式で定義しておきます。コンパートメントIDが必要なので、その定義をしています。

ファンクション・パラメータ

{
    "name":"list_databases",
    "description":"List OCI Autonomous Database instances.",
    "parameters":{
        "type":"object",
        "properties":{
            "compartment_id":{
                "type":"string",
                "description":"The compartment id of the database instances."
            }
        },
        "required":["compartment_id"],
        "additionalProperties":false
    }
}

「指定の Autonomous Database の状態を確認する」ツール

「指定の Autonomous Database の状態を確認する」ツールを作成します。
image.png
ファンクション・パラメータには Autonomous Database のOCIDが必要なので、その定義をしています。

ファンクション・パラメータ

{
    "name":"check_database_status",
    "description":"Checks the operational status of an OCI Autonomous Database instance.",
    "parameters":{
        "type":"object",
        "properties":{
            "db_ocid":{
                "type":"string",
                "description":"The OCID of the database instance."
            }
        },
        "required":["db_ocid"],
        "additionalProperties":false
    }
}

「指定の Autonomous Database を起動する」ツール

「指定の Autonomous Database を起動する」ツールを作成します。
image.png

ファンクション・パラメータには Autonomous Database のOCIDが必要なので、その定義をしています。

ファンクション・パラメータ

{
    "name":"start_database",
    "description":"Start an OCI Autonomous Database instance.",
    "parameters":{
        "type":"object",
        "properties":{
            "db_ocid":{
                "type":"string",
                "description":"The OCID of the database instance."
            }
        },
        "required":["db_ocid"],
        "additionalProperties":false
    }
}

「指定の Autonomous Database を停止する」ツール

「指定の Autonomous Database を停止する」ツールを作成します。
image.png

ファンクション・パラメータには Autonomous Database のOCIDが必要なので、その定義をしています。

ファンクション・パラメータ

{
    "name":"stop_database",
    "description":"Stop an OCI Autonomous Database instance.",
    "parameters":{
        "type":"object",
        "properties":{
            "db_ocid":{
                "type":"string",
                "description":"The OCID of the database instance."
            }
        },
        "required":["db_ocid"],
        "additionalProperties":false
    }
}

以上で、ツールの作成は完了です。

試してみるといいつつも、クライアント実行の関数呼び出しツールはその仕組み上、RAGツールやSQLツールと違ってOCI生成AIエージェントのチャット画面からお手軽に試すということができません。SDKを使ってプログラムを書く必要があります。プログラムを書く必要があるのですが、そうは言ってもなるべくお手軽に試したいので、今回は SDK for Python が事前構成済みのクラウド・シェルを使って、内部のやり取りを見ながら Python でインタラクティブに実行してみたいと思います。

SDK for Python についてはこちらをご参照ください。

(必要な場合)Config の設定

OCI SDK を使って OCI のサービスへ接続するときに必要です。未設定の場合は事前に行ってください。

自身のプロファイルの画面に遷移します。
image.png

「トークンおよびキー」を選択します。次に「APIキーの追加」をクリックします。
image.png

「APIキー・ペアの生成」を選択します。続いて「秘密キーのダウンロード」をクリックし、秘密キー・ファイル(.pemファイル)をダウンロードしておきます。秘密キー・ファイルのダウンロードが終わったら「追加」ボタンをクリックします

image.png

閉じるボタンをクリックします。
image.png

APIキーの一覧に戻ったら先ほど作成したAPIキーの右にある三点フィーダーをクリックし、「構成ファイルの表示」をクリックします。
image.png

構成ファイルのプレビューの横にあるコピーボタンをクリックします。
image.png

コピーした構成ファイルは以下のようになっています。

【変更前】構成ファイル

[DEFAULT]
user=ocid1.user.oc1..aaaa---------------------(中略)------------------------36a
fingerprint=89:-----------(中略)------------:77
tenancy=ocid1.tenancy.oc1..aaaaaaaa-----------(中略)------------de3q
region=ap-tokyo-1
key_file= # TODO

いったんテキストエディタにペーストして、region と key_file の情報を書き換えます。
今回は生成AIエージェントが大阪リージョンなので、region は ap-osaka-1 に変更します。
key_file はこの後クラウド・シェルにこのパスのこのファイル名で先ほどダウンロードした秘密キー・ファイル(.pem)を作成するので、そのパスとファイルを記載します。

【変更後】構成ファイル

[DEFAULT]
user=ocid1.user.oc1..aaaa---------------------(中略)------------------------36a
fingerprint=89:-----------(中略)------------:77
tenancy=ocid1.tenancy.oc1..aaaaaaaa-----------(中略)------------de3q
region=ap-osaka-1
key_file=~/.oci/oci_api_keyfile.pem

開発者ツールのアイコンをクリックし、クラウド・シェルを起動します。
image.png

ホームディレクトリ直下に「.oci」ディレクトリを作成します。
image.png

作成した「.oci」ディレクトリの下に「config」ファイルを作成します。
先ほどの構成ファイルの内容で更新して保存します。
image.png

image.png

続いて同じ「.oci」ディレクトリの下に秘密キー・ファイルを作成します。
ダウンロードした秘密キー・ファイルの中身をテキストエディタで開いてコピーし、クラウド・シェル側の秘密キー・ファイルに貼り付け保存します。
image.png

image.png

作成した秘密キー・ファイルの権限を変更し、自分自身しか参照できないようにしておきます。
image.png

chmod go-rwx oci_api_keyfile.pem

(必要な場合)パブリックネットワークに変更

ホームリージョンが大阪リージョン以外の場合、クラウド・シェルから SDK を使用して大阪リージョンにあるサービスとやり取りをするためには、ネットワークをパブリックネットワークに切り替えてください。
image.png

いざ呼び出し

事前に生成AIエージェントのエンドポイントIDを取得しておきます。
エージェントの下にある作成済みのエンドポイントをクリックします。
image.png
エンドポイントのOCIDをコピーしてテキストエディタ等にペーストしておいてください。
image.png

また、今回は対象のコンパートメントIDは事前に分かっているものとします。

クラウド・シェルでホームディレクトリに戻って、pythonを起動します。
image.png

Python のCUIが起動します。
image.png

OCIとJSONをインポートします。
OCIの設定を読み込みます。
また、コンパートメントIDと生成AIエージェントのエンドポイントのIDを定義しておきます。
image.png

import oci, json
config = oci.config.from_file()
compartmentId = "ocid1.compartment.oc1..aaaaaaaa-------------(中略)------------------4cla"
agentEndpointId = "ocid1.genaiagentendpoint.oc1.ap-osaka-1.amaaaaa-------------(中略)------------------ggq"

生成AIエージェントとやり取りをおこなうクライアントを作成します。
image.png

agentClient = oci.generative_ai_agent_runtime.GenerativeAiAgentRuntimeClient(config)

セッションを作成します。
image.png

sessionDetails = oci.generative_ai_agent_runtime.models.CreateSessionDetails(display_name="session1", description="session1 description")
session = agentClient.create_session(sessionDetails, agentEndpointId)

まずデータベースのリストが欲しいので、生成AIエージェントにチャットのメッセージを送信します。指定しないと日本語で質問しても英語で返してくるので、日本語で回答するように指定しています。
image.png

userMessage = "あなたは優秀なAIエージェントです。日本語で質問された場合は日本語で回答します。データベースの一覧を表示してください。"
chatDetails = oci.generative_ai_agent_runtime.models.ChatDetails(user_message=userMessage, session_id=session.data.id)
chatResponse = agentClient.chat(agent_endpoint_id=agentEndpointId, chat_details=chatDetails)

生成AIエージェントからのレスポンスの中身を見てみます。通常のチャットと異なり、ユーザーに見せるようなメッセージがありません。
image.png

このレスポンス内で重要なのは「required_actions」の情報です。リストなので、今回の検証では1つのみですが、複数アクションの場合もあります。
「required_actions」にはクライアント側で実行する処理の情報が入っています。

  • action_id:クライアント側で処理を実行後、再度生成AIエージェントを呼ぶ際に必要なID
  • function_call.name:クライアント側で呼び出す処理の、生成AIエージェント側で定義されているファンクション名
  • function_call.arguments:クライアント側で呼び出す処理のパラメータ
  • required_action_type:FUNCTION_CALLING_REQUIRED_ACTIONという値が入っていればクライアント側で処理をおこなってくださいということらしいです。

生成AIエージェントからのレスポンス

{
  "guardrail_result": null,
  "message": null,
  "required_actions": [
    {
      "action_id": "2ee9805d-7970-48ac-9bcb-603b3d7fe48b",
      "function_call": {
        "arguments": "{\"compartment_id\": \"ocid1.compartment.oc1..aaaaaaaawjnpnpbsc5s7kxk6w55jxv2ymp7fj6wvqj7wv7wvqj7wv7wvqj\"}",
        "name": "List_Databases"
      },
      "required_action_type": "FUNCTION_CALLING_REQUIRED_ACTION"
    }
  ],
  "tool_results": null,
  "traces": [
    {
      "time_created": "2025-05-27T01:54:46.646000+00:00",
      "trace_type": "UNKNOWN_ENUM_VALUE"
    }
  ]
}

この「required_actions」内の情報に基づきクライアント側で処理を行います。

「function_call.arguments」にはそれっぽいコンパートメントIDが入っていますが、こちらからコンパートメントIDの情報を生成AIエージェントに渡していないので、実際には生成AIエージェント側が適当に入れた存在しない値になっています。正しいコンパートメントIDはPythonの変数で持っているのでそちらを使用し、ここでは生成AIエージェントのレスポンス内のコンパートメントIDは無視します。

「function_call.name」が「List_Databases」なので、データベースのリストを取得する処理をクライアント側で実行します。
image.png

databaseClient = oci.database.DatabaseClient(config)
databaseResponse = databaseClient.list_autonomous_databases(compartment_id=compartmentId)

レスポンスの中身は

print(databaseResponse.data)

で見ることが出来ますが、かなり長いのでここでは割愛します。今回の検証環境では2つの Autonomous Database が存在していて、その2つの Autonomous Database についての情報(名前やOCIDはもちろん、状態やその他設定など詳細な情報)がJSON形式で入っています。
image.png

クライアント側で処理が終わったら、再び生成AIエージェントに結果報告のチャットを送信します。結果報告のチャットには処理を実行した結果の情報などを含む「performed_actions」を送信する必要があるので、その情報を作成して送信します。
image.png

# performed_actions を作成するのに必要な情報
actionId = chatResponse.data.required_actions[0].action_id
actionType = "FUNCTION_CALLING_PERFORMED_ACTION"
functionCallOutput = str(databaseResponse.data)

# 上の3つの情報を使って performed_actions を作成
performedActions = [oci.generative_ai_agent_runtime.models.FunctionCallingPerformedAction(performed_action_type=actionType, action_id=actionId, function_call_output=functionCallOutput)]

# performed_actions を含むチャットを生成AIエージェントに送信
chatDetails = oci.generative_ai_agent_runtime.models.ChatDetails(user_message=userMessage, session_id=session.data.id, performed_actions=performedActions)
chatResponse = agentClient.chat(agent_endpoint_id=agentEndpointId, chat_details=chatDetails)

レスポンスの中身を見てみると、クライアント側での実行結果の情報の中から生成AIエージェントがデータベース名を抜き出して自然言語でデータベースの一覧を回答しています。
image.png

生成AIエージェントからのレスポンス

{
  "guardrail_result": null,
  "message": {
    "content": {
      "citations": null,
      "paragraph_citations": null,
      "text": "データベースの一覧は以下の通りです。 \n- データベース1: SalesDB \n- データベース2: GenAIAgentOsakaDB"
    },
    "role": "AGENT",
    "time_created": "2025-05-27T02:41:00.040000+00:00"
  },
  "required_actions": null,
  "tool_results": null,
  "traces": [
    {
      "time_created": "2025-05-27T02:40:57.080000+00:00",
      "trace_type": "UNKNOWN_ENUM_VALUE"
    }
  ]
}

コンパートメント内にある Autonomous Database の一覧が取得できたので、続けて Autonomous Database の SalesDB が起動しているか停止しているかを生成AIエージェントに問い合わせてみます。
image.png

userMessage = "SalesDBの状態を教えて"
chatDetails = oci.generative_ai_agent_runtime.models.ChatDetails(user_message=userMessage, session_id=session.data.id)
chatResponse = agentClient.chat(agent_endpoint_id=agentEndpointId, chat_details=chatDetails)

データベースの一覧の問い合わせをしたときに送った情報の中に起動状態が含まれていたので、その情報を使用して停止中と回答したようです。(指定の Autonomous Database の状態を確認するツールによって処理をクライアント側でおこなうように依頼されませんでした。)

image.png

生成AIエージェントからのレスポンス

{
  "guardrail_result": null,
  "message": {
    "content": {
      "citations": null,
      "paragraph_citations": null,
      "text": "SalesDBの状態は、停止中(STOPPED)です。"
    },
    "role": "AGENT",
    "time_created": "2025-05-28T01:32:31.526000+00:00"
  },
  "required_actions": null,
  "tool_results": null,
  "traces": [
    {
      "time_created": "2025-05-28T01:32:28.676000+00:00",
      "trace_type": "UNKNOWN_ENUM_VALUE"
    }
  ]
}

SalesDB は停止しているので、生成AIエージェントに SalesDB の起動を問い合わせてみます。期待通りであれば、「Start_Database」ツールの情報を返してくるはずです。
image.png

userMessage = "SalesDBを起動してください"
chatDetails = oci.generative_ai_agent_runtime.models.ChatDetails(user_message=userMessage, session_id=session.data.id)
chatResponse = agentClient.chat(agent_endpoint_id=agentEndpointId, chat_details=chatDetails)

生成AIエージェントからのレスポンスを見てみましょう。「function_call.name」が期待通り「Start_Database」となっています。

また、「function_call.arguments」にある「db_ocid」の値ですが、ありがたいことに実際の SalesDB の OCID の値が入っています。つまり先ほど生成AIエージェントに送った Autonomous Database の一覧の情報から 生成AIエージェントは 必要な SalesDB の OCID の値を取り出してレスポンスにセットしてくれているということです。

クライアント側は SalesDB の OCID が分かっていなくてもこの値をそのまま使用することで SalesDB に対する操作を SDK からおこなうことが出来ます。

image.png

生成AIエージェントからのレスポンス

{
  "guardrail_result": null,
  "message": null,
  "required_actions": [
    {
      "action_id": "a55f852a-2260-47f9-b9d3-d070ef3f99a4",
      "function_call": {
        "arguments": "{\"db_ocid\": \"ocid1.autonomousdatabase.oc1.ap-osaka-1.anv-------------(中略)------------------swa\"}",
        "name": "Start_Database"
      },
      "required_action_type": "FUNCTION_CALLING_REQUIRED_ACTION"
    }
  ],
  "tool_results": null,
  "traces": [
    {
      "time_created": "2025-05-28T04:56:46.489000+00:00",
      "trace_type": "UNKNOWN_ENUM_VALUE"
    }
  ]
}

データベースを起動する処理をクライアント側で実行します。
image.png

db_ocid = json.loads(chatResponse.data.required_actions[0].function_call.arguments)["db_ocid"]
databaseResponse = databaseClient.start_autonomous_database(autonomous_database_id=db_ocid)

終わったら生成AIエージェントに結果報告のチャットを送信します。データベースの一覧を取得した時と同様に「performed_actions」を送信する必要があるので、その情報を作成して送信します。
image.png

actionId = chatResponse.data.required_actions[0].action_id
functionCallOutput = str(databaseResponse.data)
performedActions=[oci.generative_ai_agent_runtime.models.FunctionCallingPerformedAction(performed_action_type=actionType, action_id=actionId, function_call_output=functionCallOutput)]
 
chatDetails = oci.generative_ai_agent_runtime.models.ChatDetails(user_message=userMessage, session_id=session.data.id, performed_actions=performedActions)
chatResponse = agentClient.chat(agent_endpoint_id=agentEndpointId, chat_details=chatDetails)

生成AIエージェントからのレスポンスを見てみると、このようにメッセージが入っています。起動中であることが分かります。
image.png

生成AIエージェントからのレスポンス

{
  "guardrail_result": null,
  "message": {
    "content": {
      "citations": null,
      "paragraph_citations": null,
      "text": "SalesDBが起動しました。現在の状態はSTARTINGです。"
    },
    "role": "AGENT",
    "time_created": "2025-05-29T01:27:04.410000+00:00"
  },
  "required_actions": null,
  "tool_results": null,
  "traces": [
    {
      "time_created": "2025-05-29T01:27:00.845000+00:00",
      "trace_type": "UNKNOWN_ENUM_VALUE"
    }
  ]
}

ユーザーの見た目からはこのようにチャット上で会話が進んだイメージになります。
image.png

最後にセッションを削除して、python も終了します。

deleteSessionResponse = agentClient.delete_session(agent_endpoint_id=agentEndpointId, session_id=session.data.id)

exit()

以上のように関数呼び出しツールの「ファンクション・コール(クライアント実行)」は、生成AIエージェントとクライアント側で複数回のやり取りをおこなうことで機能を実現しています。

結局のところ実際に処理を実行するのはクライアント側なのでクライアント側に実装が必要になりますし、生成AIエージェントに丸投げできるからめちゃめちゃ楽になる!みたいなことも無いです。無いですが、LLMに関数呼び出しツールを組み合わせることで他のシステムと連携してLLM単体より高度なことが出来るチャットボットを開発できるので、アイデア次第で面白いものが出来るのではないかと思います。

また、「APIエンドポイント(エージェント実行)」が使えるようになれば、処理内容によってはクライアント側での実装も必要なくなり生成AIエージェントに丸投げできるようになるんじゃないかと期待しています。

ただし、あまりたくさんの関数呼び出しツールを作成してしまうと生成AIエージェントが誤ったファンクションを指定するリスクが増えると思いますので注意が必要かと思います。(少し異なりますが、今回のデータベースの操作に関する関数呼び出しツールとSQLツールを同じエージェントの下に作成したら、関数呼び出しツールのレスポンスが返ってくることを期待していたときにSQLツールのレスポンスが返ってくるということもありました。)

実際にPythonでSDKを使用してOCIの生成AIエージェントと連携するアプリを構築しようと考えている方は、こちらの記事がとても参考になります。

OCI生成AIエージェントのSQLツールの概要についてはこちらをご参照ください。





Source link

Views: 0

OCI Generative AI Agent (生成AIエージェント)の関数呼び出しツールを試してみる #LLM



OCI Generative AI Agent (生成AIエージェント)の関数呼び出しツールを試してみる #LLM

OCIから Generative AI Agent (以降、生成AIエージェント)の機能が新たに追加されました。すでにいくつかの記事がQiita上にも投稿されていますが、RAGツールを使ったものが多く、残念ながらSQLツールと関数呼び出しツールについては影が薄いようです。
というわけで、先日SQLツールについての記事を公開しましたので、今回はOCI生成AIエージェントの関数呼び出しツール(Function Calling Tool)がどのようなものなのか確認してみたいと思います。
OCI生成AIエージェントのSQLツールの概要についてはこちらをご参照ください。

ツールの作成時に「カスタム・ツール」となっているのが、関数呼び出しツールになります。

image.png

説明には「ファンクション・コール(クライアント実行)またはAPIエンドポイント(エージェント実行)用のツールを定義します」と記載されています。しかしこの記事の執筆時点では、この後のツール構成で選択できるのは「ファンクション・コール(クライアント実行)」のみで、「APIエンドポイント(エージェント実行)」は選択できませんでした。(以下のブログの記事によると limited availability となっているので2025年5月時点ではまだ限定公開のようです。)

「関数呼び出しツール」と聞くと「生成AIエージェントが関数を呼んで結果を返すところまでやってくれる」んじゃないかというような淡い期待を抱いてしまいますが、OCI生成AIエージェントの関数呼び出しツールにおける「ファンクション・コール(クライアント実行)」については残念ながらそこまでやってくれません。先ほどのブログの記事を読むと、それをやってくれるのは「APIエンドポイント(エージェント実行)」のほうだと推測します。

「ファンクション・コール(クライアント実行)」は、後ろに付いているカッコ書きの「クライアント実行」の名前の通り、処理を実行するのはクライアント側(チャットアプリ)になります。生成AIエージェントが「あなたが求めている処理はこれです、この処理をそちらで実行してください、処理が終わったらまた結果を教えてね、そしたらその結果を自然言語でそれっぽく返しますよ」ということをやってくれるものになります。ちなみにOCIでファンクションと聞くとOCIに詳しい人ならOCIのサービスにあるファンクションをイメージすると思いますが、そのサービスとは一切関係ありません。クライアント側で実行する処理は何でも良くて、外部のAPIを呼び出すでも内部的なデータベースを更新するでも何でも構いません。

言葉だけでは少し分かりにくいと思いますので、図で説明するとこのようになります。チャットアプリがクライアントになります。

image.png

生成AIエージェントを使用できるリージョンは限られていますのでご注意ください。生成AIエージェントを利用できるリージョンは以下のドキュメントで確認できます。今回は大阪リージョンを使用しています。

エージェントの作成については割愛して、ツールの作成から入ります。

Autonomous Database の状態(アクティブか停止中かなど)をチェックし、停止したり起動したりするエージェントを作成してみたいと思います。そのため、関数呼び出しツールを4つ作成します。

  • コンパートメント内の Autonomous Database の一覧を取得する
  • 指定の Autonomous Database の状態を確認する
  • 指定の Autonomous Database を起動する
  • 指定の Autonomous Database を停止する

「コンパートメント内の Autonomous Database の一覧を取得する」ツール

まず、「コンパートメント内の Autonomous Database の一覧を取得する」ツールを作成します。
image.png

ファンクション・パラメータは、その関数を実行する際のパラメータの情報をJSON形式で定義しておきます。コンパートメントIDが必要なので、その定義をしています。

ファンクション・パラメータ

{
    "name":"list_databases",
    "description":"List OCI Autonomous Database instances.",
    "parameters":{
        "type":"object",
        "properties":{
            "compartment_id":{
                "type":"string",
                "description":"The compartment id of the database instances."
            }
        },
        "required":["compartment_id"],
        "additionalProperties":false
    }
}

「指定の Autonomous Database の状態を確認する」ツール

「指定の Autonomous Database の状態を確認する」ツールを作成します。
image.png
ファンクション・パラメータには Autonomous Database のOCIDが必要なので、その定義をしています。

ファンクション・パラメータ

{
    "name":"check_database_status",
    "description":"Checks the operational status of an OCI Autonomous Database instance.",
    "parameters":{
        "type":"object",
        "properties":{
            "db_ocid":{
                "type":"string",
                "description":"The OCID of the database instance."
            }
        },
        "required":["db_ocid"],
        "additionalProperties":false
    }
}

「指定の Autonomous Database を起動する」ツール

「指定の Autonomous Database を起動する」ツールを作成します。
image.png

ファンクション・パラメータには Autonomous Database のOCIDが必要なので、その定義をしています。

ファンクション・パラメータ

{
    "name":"start_database",
    "description":"Start an OCI Autonomous Database instance.",
    "parameters":{
        "type":"object",
        "properties":{
            "db_ocid":{
                "type":"string",
                "description":"The OCID of the database instance."
            }
        },
        "required":["db_ocid"],
        "additionalProperties":false
    }
}

「指定の Autonomous Database を停止する」ツール

「指定の Autonomous Database を停止する」ツールを作成します。
image.png

ファンクション・パラメータには Autonomous Database のOCIDが必要なので、その定義をしています。

ファンクション・パラメータ

{
    "name":"stop_database",
    "description":"Stop an OCI Autonomous Database instance.",
    "parameters":{
        "type":"object",
        "properties":{
            "db_ocid":{
                "type":"string",
                "description":"The OCID of the database instance."
            }
        },
        "required":["db_ocid"],
        "additionalProperties":false
    }
}

以上で、ツールの作成は完了です。

試してみるといいつつも、クライアント実行の関数呼び出しツールはその仕組み上、RAGツールやSQLツールと違ってOCI生成AIエージェントのチャット画面からお手軽に試すということができません。SDKを使ってプログラムを書く必要があります。プログラムを書く必要があるのですが、そうは言ってもなるべくお手軽に試したいので、今回は SDK for Python が事前構成済みのクラウド・シェルを使って、内部のやり取りを見ながら Python でインタラクティブに実行してみたいと思います。

SDK for Python についてはこちらをご参照ください。

(必要な場合)Config の設定

OCI SDK を使って OCI のサービスへ接続するときに必要です。未設定の場合は事前に行ってください。

自身のプロファイルの画面に遷移します。
image.png

「トークンおよびキー」を選択します。次に「APIキーの追加」をクリックします。
image.png

「APIキー・ペアの生成」を選択します。続いて「秘密キーのダウンロード」をクリックし、秘密キー・ファイル(.pemファイル)をダウンロードしておきます。秘密キー・ファイルのダウンロードが終わったら「追加」ボタンをクリックします

image.png

閉じるボタンをクリックします。
image.png

APIキーの一覧に戻ったら先ほど作成したAPIキーの右にある三点フィーダーをクリックし、「構成ファイルの表示」をクリックします。
image.png

構成ファイルのプレビューの横にあるコピーボタンをクリックします。
image.png

コピーした構成ファイルは以下のようになっています。

【変更前】構成ファイル

[DEFAULT]
user=ocid1.user.oc1..aaaa---------------------(中略)------------------------36a
fingerprint=89:-----------(中略)------------:77
tenancy=ocid1.tenancy.oc1..aaaaaaaa-----------(中略)------------de3q
region=ap-tokyo-1
key_file= # TODO

いったんテキストエディタにペーストして、region と key_file の情報を書き換えます。
今回は生成AIエージェントが大阪リージョンなので、region は ap-osaka-1 に変更します。
key_file はこの後クラウド・シェルにこのパスのこのファイル名で先ほどダウンロードした秘密キー・ファイル(.pem)を作成するので、そのパスとファイルを記載します。

【変更後】構成ファイル

[DEFAULT]
user=ocid1.user.oc1..aaaa---------------------(中略)------------------------36a
fingerprint=89:-----------(中略)------------:77
tenancy=ocid1.tenancy.oc1..aaaaaaaa-----------(中略)------------de3q
region=ap-osaka-1
key_file=~/.oci/oci_api_keyfile.pem

開発者ツールのアイコンをクリックし、クラウド・シェルを起動します。
image.png

ホームディレクトリ直下に「.oci」ディレクトリを作成します。
image.png

作成した「.oci」ディレクトリの下に「config」ファイルを作成します。
先ほどの構成ファイルの内容で更新して保存します。
image.png

image.png

続いて同じ「.oci」ディレクトリの下に秘密キー・ファイルを作成します。
ダウンロードした秘密キー・ファイルの中身をテキストエディタで開いてコピーし、クラウド・シェル側の秘密キー・ファイルに貼り付け保存します。
image.png

image.png

作成した秘密キー・ファイルの権限を変更し、自分自身しか参照できないようにしておきます。
image.png

chmod go-rwx oci_api_keyfile.pem

(必要な場合)パブリックネットワークに変更

ホームリージョンが大阪リージョン以外の場合、クラウド・シェルから SDK を使用して大阪リージョンにあるサービスとやり取りをするためには、ネットワークをパブリックネットワークに切り替えてください。
image.png

いざ呼び出し

事前に生成AIエージェントのエンドポイントIDを取得しておきます。
エージェントの下にある作成済みのエンドポイントをクリックします。
image.png
エンドポイントのOCIDをコピーしてテキストエディタ等にペーストしておいてください。
image.png

また、今回は対象のコンパートメントIDは事前に分かっているものとします。

クラウド・シェルでホームディレクトリに戻って、pythonを起動します。
image.png

Python のCUIが起動します。
image.png

OCIとJSONをインポートします。
OCIの設定を読み込みます。
また、コンパートメントIDと生成AIエージェントのエンドポイントのIDを定義しておきます。
image.png

import oci, json
config = oci.config.from_file()
compartmentId = "ocid1.compartment.oc1..aaaaaaaa-------------(中略)------------------4cla"
agentEndpointId = "ocid1.genaiagentendpoint.oc1.ap-osaka-1.amaaaaa-------------(中略)------------------ggq"

生成AIエージェントとやり取りをおこなうクライアントを作成します。
image.png

agentClient = oci.generative_ai_agent_runtime.GenerativeAiAgentRuntimeClient(config)

セッションを作成します。
image.png

sessionDetails = oci.generative_ai_agent_runtime.models.CreateSessionDetails(display_name="session1", description="session1 description")
session = agentClient.create_session(sessionDetails, agentEndpointId)

まずデータベースのリストが欲しいので、生成AIエージェントにチャットのメッセージを送信します。指定しないと日本語で質問しても英語で返してくるので、日本語で回答するように指定しています。
image.png

userMessage = "あなたは優秀なAIエージェントです。日本語で質問された場合は日本語で回答します。データベースの一覧を表示してください。"
chatDetails = oci.generative_ai_agent_runtime.models.ChatDetails(user_message=userMessage, session_id=session.data.id)
chatResponse = agentClient.chat(agent_endpoint_id=agentEndpointId, chat_details=chatDetails)

生成AIエージェントからのレスポンスの中身を見てみます。通常のチャットと異なり、ユーザーに見せるようなメッセージがありません。
image.png

このレスポンス内で重要なのは「required_actions」の情報です。リストなので、今回の検証では1つのみですが、複数アクションの場合もあります。
「required_actions」にはクライアント側で実行する処理の情報が入っています。

  • action_id:クライアント側で処理を実行後、再度生成AIエージェントを呼ぶ際に必要なID
  • function_call.name:クライアント側で呼び出す処理の、生成AIエージェント側で定義されているファンクション名
  • function_call.arguments:クライアント側で呼び出す処理のパラメータ
  • required_action_type:FUNCTION_CALLING_REQUIRED_ACTIONという値が入っていればクライアント側で処理をおこなってくださいということらしいです。

生成AIエージェントからのレスポンス

{
  "guardrail_result": null,
  "message": null,
  "required_actions": [
    {
      "action_id": "2ee9805d-7970-48ac-9bcb-603b3d7fe48b",
      "function_call": {
        "arguments": "{\"compartment_id\": \"ocid1.compartment.oc1..aaaaaaaawjnpnpbsc5s7kxk6w55jxv2ymp7fj6wvqj7wv7wvqj7wv7wvqj\"}",
        "name": "List_Databases"
      },
      "required_action_type": "FUNCTION_CALLING_REQUIRED_ACTION"
    }
  ],
  "tool_results": null,
  "traces": [
    {
      "time_created": "2025-05-27T01:54:46.646000+00:00",
      "trace_type": "UNKNOWN_ENUM_VALUE"
    }
  ]
}

この「required_actions」内の情報に基づきクライアント側で処理を行います。

「function_call.arguments」にはそれっぽいコンパートメントIDが入っていますが、こちらからコンパートメントIDの情報を生成AIエージェントに渡していないので、実際には生成AIエージェント側が適当に入れた存在しない値になっています。正しいコンパートメントIDはPythonの変数で持っているのでそちらを使用し、ここでは生成AIエージェントのレスポンス内のコンパートメントIDは無視します。

「function_call.name」が「List_Databases」なので、データベースのリストを取得する処理をクライアント側で実行します。
image.png

databaseClient = oci.database.DatabaseClient(config)
databaseResponse = databaseClient.list_autonomous_databases(compartment_id=compartmentId)

レスポンスの中身は

print(databaseResponse.data)

で見ることが出来ますが、かなり長いのでここでは割愛します。今回の検証環境では2つの Autonomous Database が存在していて、その2つの Autonomous Database についての情報(名前やOCIDはもちろん、状態やその他設定など詳細な情報)がJSON形式で入っています。
image.png

クライアント側で処理が終わったら、再び生成AIエージェントに結果報告のチャットを送信します。結果報告のチャットには処理を実行した結果の情報などを含む「performed_actions」を送信する必要があるので、その情報を作成して送信します。
image.png

# performed_actions を作成するのに必要な情報
actionId = chatResponse.data.required_actions[0].action_id
actionType = "FUNCTION_CALLING_PERFORMED_ACTION"
functionCallOutput = str(databaseResponse.data)

# 上の3つの情報を使って performed_actions を作成
performedActions = [oci.generative_ai_agent_runtime.models.FunctionCallingPerformedAction(performed_action_type=actionType, action_id=actionId, function_call_output=functionCallOutput)]

# performed_actions を含むチャットを生成AIエージェントに送信
chatDetails = oci.generative_ai_agent_runtime.models.ChatDetails(user_message=userMessage, session_id=session.data.id, performed_actions=performedActions)
chatResponse = agentClient.chat(agent_endpoint_id=agentEndpointId, chat_details=chatDetails)

レスポンスの中身を見てみると、クライアント側での実行結果の情報の中から生成AIエージェントがデータベース名を抜き出して自然言語でデータベースの一覧を回答しています。
image.png

生成AIエージェントからのレスポンス

{
  "guardrail_result": null,
  "message": {
    "content": {
      "citations": null,
      "paragraph_citations": null,
      "text": "データベースの一覧は以下の通りです。 \n- データベース1: SalesDB \n- データベース2: GenAIAgentOsakaDB"
    },
    "role": "AGENT",
    "time_created": "2025-05-27T02:41:00.040000+00:00"
  },
  "required_actions": null,
  "tool_results": null,
  "traces": [
    {
      "time_created": "2025-05-27T02:40:57.080000+00:00",
      "trace_type": "UNKNOWN_ENUM_VALUE"
    }
  ]
}

コンパートメント内にある Autonomous Database の一覧が取得できたので、続けて Autonomous Database の SalesDB が起動しているか停止しているかを生成AIエージェントに問い合わせてみます。
image.png

userMessage = "SalesDBの状態を教えて"
chatDetails = oci.generative_ai_agent_runtime.models.ChatDetails(user_message=userMessage, session_id=session.data.id)
chatResponse = agentClient.chat(agent_endpoint_id=agentEndpointId, chat_details=chatDetails)

データベースの一覧の問い合わせをしたときに送った情報の中に起動状態が含まれていたので、その情報を使用して停止中と回答したようです。(指定の Autonomous Database の状態を確認するツールによって処理をクライアント側でおこなうように依頼されませんでした。)

image.png

生成AIエージェントからのレスポンス

{
  "guardrail_result": null,
  "message": {
    "content": {
      "citations": null,
      "paragraph_citations": null,
      "text": "SalesDBの状態は、停止中(STOPPED)です。"
    },
    "role": "AGENT",
    "time_created": "2025-05-28T01:32:31.526000+00:00"
  },
  "required_actions": null,
  "tool_results": null,
  "traces": [
    {
      "time_created": "2025-05-28T01:32:28.676000+00:00",
      "trace_type": "UNKNOWN_ENUM_VALUE"
    }
  ]
}

SalesDB は停止しているので、生成AIエージェントに SalesDB の起動を問い合わせてみます。期待通りであれば、「Start_Database」ツールの情報を返してくるはずです。
image.png

userMessage = "SalesDBを起動してください"
chatDetails = oci.generative_ai_agent_runtime.models.ChatDetails(user_message=userMessage, session_id=session.data.id)
chatResponse = agentClient.chat(agent_endpoint_id=agentEndpointId, chat_details=chatDetails)

生成AIエージェントからのレスポンスを見てみましょう。「function_call.name」が期待通り「Start_Database」となっています。

また、「function_call.arguments」にある「db_ocid」の値ですが、ありがたいことに実際の SalesDB の OCID の値が入っています。つまり先ほど生成AIエージェントに送った Autonomous Database の一覧の情報から 生成AIエージェントは 必要な SalesDB の OCID の値を取り出してレスポンスにセットしてくれているということです。

クライアント側は SalesDB の OCID が分かっていなくてもこの値をそのまま使用することで SalesDB に対する操作を SDK からおこなうことが出来ます。

image.png

生成AIエージェントからのレスポンス

{
  "guardrail_result": null,
  "message": null,
  "required_actions": [
    {
      "action_id": "a55f852a-2260-47f9-b9d3-d070ef3f99a4",
      "function_call": {
        "arguments": "{\"db_ocid\": \"ocid1.autonomousdatabase.oc1.ap-osaka-1.anv-------------(中略)------------------swa\"}",
        "name": "Start_Database"
      },
      "required_action_type": "FUNCTION_CALLING_REQUIRED_ACTION"
    }
  ],
  "tool_results": null,
  "traces": [
    {
      "time_created": "2025-05-28T04:56:46.489000+00:00",
      "trace_type": "UNKNOWN_ENUM_VALUE"
    }
  ]
}

データベースを起動する処理をクライアント側で実行します。
image.png

db_ocid = json.loads(chatResponse.data.required_actions[0].function_call.arguments)["db_ocid"]
databaseResponse = databaseClient.start_autonomous_database(autonomous_database_id=db_ocid)

終わったら生成AIエージェントに結果報告のチャットを送信します。データベースの一覧を取得した時と同様に「performed_actions」を送信する必要があるので、その情報を作成して送信します。
image.png

actionId = chatResponse.data.required_actions[0].action_id
functionCallOutput = str(databaseResponse.data)
performedActions=[oci.generative_ai_agent_runtime.models.FunctionCallingPerformedAction(performed_action_type=actionType, action_id=actionId, function_call_output=functionCallOutput)]
 
chatDetails = oci.generative_ai_agent_runtime.models.ChatDetails(user_message=userMessage, session_id=session.data.id, performed_actions=performedActions)
chatResponse = agentClient.chat(agent_endpoint_id=agentEndpointId, chat_details=chatDetails)

生成AIエージェントからのレスポンスを見てみると、このようにメッセージが入っています。起動中であることが分かります。
image.png

生成AIエージェントからのレスポンス

{
  "guardrail_result": null,
  "message": {
    "content": {
      "citations": null,
      "paragraph_citations": null,
      "text": "SalesDBが起動しました。現在の状態はSTARTINGです。"
    },
    "role": "AGENT",
    "time_created": "2025-05-29T01:27:04.410000+00:00"
  },
  "required_actions": null,
  "tool_results": null,
  "traces": [
    {
      "time_created": "2025-05-29T01:27:00.845000+00:00",
      "trace_type": "UNKNOWN_ENUM_VALUE"
    }
  ]
}

ユーザーの見た目からはこのようにチャット上で会話が進んだイメージになります。
image.png

最後にセッションを削除して、python も終了します。

deleteSessionResponse = agentClient.delete_session(agent_endpoint_id=agentEndpointId, session_id=session.data.id)

exit()

以上のように関数呼び出しツールの「ファンクション・コール(クライアント実行)」は、生成AIエージェントとクライアント側で複数回のやり取りをおこなうことで機能を実現しています。

結局のところ実際に処理を実行するのはクライアント側なのでクライアント側に実装が必要になりますし、生成AIエージェントに丸投げできるからめちゃめちゃ楽になる!みたいなことも無いです。無いですが、LLMに関数呼び出しツールを組み合わせることで他のシステムと連携してLLM単体より高度なことが出来るチャットボットを開発できるので、アイデア次第で面白いものが出来るのではないかと思います。

また、「APIエンドポイント(エージェント実行)」が使えるようになれば、処理内容によってはクライアント側での実装も必要なくなり生成AIエージェントに丸投げできるようになるんじゃないかと期待しています。

ただし、あまりたくさんの関数呼び出しツールを作成してしまうと生成AIエージェントが誤ったファンクションを指定するリスクが増えると思いますので注意が必要かと思います。(少し異なりますが、今回のデータベースの操作に関する関数呼び出しツールとSQLツールを同じエージェントの下に作成したら、関数呼び出しツールのレスポンスが返ってくることを期待していたときにSQLツールのレスポンスが返ってくるということもありました。)

実際にPythonでSDKを使用してOCIの生成AIエージェントと連携するアプリを構築しようと考えている方は、こちらの記事がとても参考になります。

OCI生成AIエージェントのSQLツールの概要についてはこちらをご参照ください。





Source link

Views: 0

「会話が続かない理由と改善法7選」

📌 ニュース:

会話が「続かない」「噛み合わない」のは多くの人が経験することです。オッターベイン大学のロバート・N・クラフト氏は、日常会話を改善するための7つの基本を提案しています。

  1. 交互に話す: お互いの話す量が釣り合うことが大切です。
  2. 話題をつなげる: 直前の情報に関連することを話すことで会話がスムーズに続きます。
  3. コミュニケーション意識: 自己表現ではなく、相手に伝わることを重視します。

これらのポイントを実践することで、会話がもっと気持ちの良いものになるはずです。まずは1つを意識してみましょう。

  • この記事のポイントを3つご紹介いたします✨

    1. 会話はスキルである💬
      会話は自然にできるものではなく、相手の関心やタイミングを見極める繊細なスキルが必要です。意識しないと、うまくいかないことが多いです。

    2. 相手とのバランスを意識する⚖️
      会話はお互いが順番に話すことが大切です。自分の話ばかりにならないように、相手にも発言の機会を与えましょう。また、話題をつなげることでスムーズなやりとりを心がけると良いです。

    3. 相手の反応に気づく👀
      会話中は、相手の非言語的なサインに注意を払いましょう。相手が興味を持っているか、退屈しているかを見極めることで、会話をより良く進めることができます。

※以下、出典元
▶ 元記事を読む

Views: 0

「中村静香が九十九里でドライブ!盛り上がるトーク」

🔸 ざっくり内容:

『向井長田のくるま温泉ちゃんねる』#53の概要

番組紹介

『向井長田のくるま温泉ちゃんねる』は、吉本興業が制作したドライブ・温泉・グルメを楽しむゆる旅番組です。パンサーの向井慧とチョコレートプラネットの長田庄平がメインキャストを務め、ゲストには中村静香さんが登場しています。毎週土曜日の21:00からBSよしもとで放送中です。

内容の見どころ

放送された#53では、中村静香さんがゲストとして参加し、向井及び長田と共にフォルクスワーゲン目黒で最新の車を見学する様子が描かれています。中村さんは運転が好きでありながらも「ペーパードライバーになりかけ」と語り、運転に関するトークが繰り広げられます。また、向井は過去に自家用車を購入した経験から、「車は買った方が良い」と思わせるような言動があり、笑いを誘っています。

興味深いエピソード

中村さんは運転へのリスペクトを強調し、運転中のおしゃべりの大変さに感心。「最近は運転することへのリスペクトが高まっている」と熱く語るシーンもあり、長田も大笑い。この中で、芸人の森田哲矢さんの著書に中村さんの思い出が記載されているため、興味を引くトークが続きました。彼女のエピソードは意外な展開があり、視聴者を楽しませる内容となっています。

視聴方法

『向井長田のくるま温泉ちゃんねる』は、BSよしもと(BS265ch)で毎週土曜日の21:00から放送されており、見逃し配信も利用できます。詳細は公式ページにて確認可能です。

次回の放送

54は6月14日(土)の放送で、ユニークな外観の「いさりび食堂」での食事がテーマとなっています。


この番組は、楽しみながら運転やドライブの魅力が伝わる企画となっており、特に運転に不安を持つ若い女性にとっても共感を呼ぶ内容が揃っています。興味のある方は、ぜひご覧ください!

🧠 編集部の見解:
この記事では、吉本興業のゆる旅番組「向井長田のくるま温泉ちゃんねる」に関する最新情報が紹介されています。特に、ゲストとして出演した中村静香が運転へのリスペクトを語るシーンが印象的です。

### 感想
向井と長田のコンビは、いつも楽しいやりとりを見せてくれるので、見ているだけで癒されます。また、中村静香さんがペーパードライバーという共通点を持ちつつも、徐々に運転に挑戦する姿勢が共感を呼びます。彼女の成長と努力を見守るのも一つの楽しみです。

### 関連事例
最近の移動手段としての「カーシェアリング」や「レンタカー」の利用が増加している背景には、若い世代の中で自家用車を持たない選択肢が一般的になってきていることが挙げられます。運転ができることも重要ですが、それ以上に気軽に車を利用できる環境が広がっているのも事実です。

### 社会的影響
ドライブをテーマにした番組は、視聴者に旅の楽しみや新しい発見を提供します。また、運転技術についての意識を高め、交通安全への意識向上にも寄与するかもしれません。特にペーパードライバーたちにとっては、再挑戦のきっかけになるかもしれませんね。

### 背景・豆知識
日本では「ペーパードライバー」という言葉が広まり、運転技術を再開することへの関心が高まっています。特にコロナ禍以降、公共交通機関を避ける人々が増えており、再び運転することの重要性が見直されているのかもしれません。

全体として、向井と長田の軽妙なトークと中村の素敵な人柄が作り出す空気感が、視聴者にとって心地よいひとときを提供しています。次回の放送も楽しみですね!

  • キーワード: ドライブ


T-Cross をAmazonで探す

フォルクスワーゲン をAmazonで探す

向井長田のくるま温泉ちゃんねる をAmazonで探す


※以下、出典元
▶ 元記事を読む

Views: 0

「信用社会の反乱!『ブレイクニューワールド』新連載」

  • 以下は、「ブレイクニューワールド」のポイントです✨

    1. 信用度のランク付け🌟
      この作品の舞台は、人間が信用度で評価される社会です。人々は模範的な態度を保ちながら自分の信用を上げようと奮闘しています。

    2. 主人公の反抗😠
      主人公のキリヤは、信用度を気にする周囲を不気味に感じています。彼は、抑圧的な政府に立ち向かう反抗的な少年として描かれています。

    3. ストーリーの核心🔍
      キリヤが世界からすべてを奪われていく過程を通じて、反逆の物語が深く展開されます。彼の成長や闘いが、読者に強いメッセージを届けます。

    ぜひ、試し読みをしてみてください!📖

📌 ニュース:
宇津江広祐の新連載「ブレイクニューワールド」が、6月6日にサイコミで始まりました。

この物語の舞台は、人間が信用度でランク付けされる世界。

主人公・キリヤは、模範的な態度で信用度を上げようとする人々を不気味に感じます。

彼は反抗的な態度を持ち続けるものの、世界は彼からすべてを奪っていきます。

政府に抑圧された少年の反逆の物語が、どのように展開するのか注目です。

試し読みも公開中です!

🧠 編集部の感想:
新連載「ブレイクニューワールド」は、信用度でランク付けされる緊迫感あふれる世界観が魅力的です。主人公・キリヤの反抗心が、抑圧された社会に対する強いメッセージを持っています。人々が模範的な行動を強いられる中、彼の葛藤や成長に引き込まれること間違いなし。異端者としてのアイデンティティを模索する姿勢が、読者に深い感動を与えるでしょう。この作品の先行きに期待が高まります。


ブレイクニューワールド をAmazonで探す

サイコミ をAmazonで探す

信用度 をAmazonで探す


※以下、出典元
▶ 元記事を読む

Views: 0

掃海艇うくしま引き揚げへ 本格作業始まる 福岡沖で炎上・沈没 [福岡県] – 朝日新聞



掃海艇うくしま引き揚げへ 本格作業始まる 福岡沖で炎上・沈没 [福岡県] - 朝日新聞

掃海艇うくしま引き揚げへ 本格作業始まる 福岡沖で炎上・沈没 [福岡県]  朝日新聞



続きをみる


🧠 編集部の感想:
掃海艇「うくしま」の引き揚げ作業が始まることは、事故の早期解決と安全性の向上に寄与するでしょう。炎上・沈没という深刻な事態は、海上の安全対策の重要性を再確認させます。今後の進展に注目したいです。

Views: 0