OpenSearch LLM ベースの会話型検索エディション コンソールは、Q&Aテストページの埋め込み機能を提供します。この機能を使用すると、ユーザーテストパラメーターを保持しながら、ページを独自の Web アプリケーションに統合できます。また、ログイン不要のページ共有をサポートしており、チーム間のコラボレーションテストを容易にします。
仕組み
ログイン サービス signin.aliyun.com は、URLへのログイン トークンの追加をサポートしています。ユーザーが URL にアクセスすると、まずログイン サービスにアクセスします。有効なログイン トークンを検出すると、ログイン サービスはユーザーをターゲットページにリダイレクトし、Q&Aテストページへのログイン不要のアクセスを可能にします。次の図は、アクセス プロセスを示しています。
ユーザーが Web サービスにアクセスします。
Web サーバーは セキュリティトークンサービス ( STS ) にアクセスし、RAM ユーザーの AccessKey ペアを使用してセキュリティトークンを取得します。
STS はセキュリティトークンを返します。
Web サーバーは シングルサインオン ( SSO ) にアクセスし、セキュリティトークンを使用してログイン トークンを取得します。
ログイン サービスはログイン トークンを返します。
Web サーバーはログイン不要の URL を生成し、クライアントに返します。クライアントは、ログイン不要の URL を使用して OpenSearch LLM ベースの会話型検索エディション Q&Aテストページにアクセスします。
使用上の注意
Q&Aテストページの共有機能を使用する前に、次の点に注意してください。
この機能は、RAM ロールを偽装しているユーザーのみが使用できます。
STS によって生成されたログオントークンは一時的な認証情報であるため、ページ共有URLはブラウザで1回だけ開くことができます。 URLを再度開くと、サインイントークン エラーが発生します。
バックエンドでは検証ロジックが使用されます。サインイン トークンの有効期限が切れる5分前に、Q&Aテストページの共有 URL を再生成することをお勧めします。サインイン トークンの デフォルト の有効期間は1時間です。トークンの有効期限が切れると、ログイン不要のページでサインイン トークン エラーが報告されます。
手順
準備
OpenSearch LLM ベースの会話型検索エディション Q&Aテストページの宛先 URL を記録します。

例:
https://opensearch4servims.console.alibabacloud.com/llm-chat?hideTopbar=true&hideSidebar=true®ion=cn-shanghai&appName={appname}&options=%7B%22retrieve%22%3A%7B%22doc%22%3A%7B%22filter%22%3A%22%22%2C%22top_n%22%3A5%2C%22sf%22%3A%22%22%2C%22dense_weight%22%3A%220.7%22%2C%22formula%22%3A%22%22%2C%22operator%22%3A%22AND%22%7D%2C%22entry%22%3A%7B%22sf%22%3A%22%22%2C%22filter%22%3A%22%22%7D%2C%22image%22%3A%7B%22sf%22%3A%22%22%2C%22dense_weight%22%3A%220.7%22%7D%2C%22qp%22%3A%7B%22query_extend%22%3Afalse%2C%22query_extend_num%22%3A5%7D%2C%22return_hits%22%3Afalse%2C%22graph%22%3A%7B%22enable%22%3Atrue%7D%2C%22web_search%22%3A%7B%22enable%22%3Afalse%7D%2C%22rerank%22%3A%7B%22enable%22%3Atrue%2C%22model%22%3A%22ops-bge-reranker-larger%22%7D%7D%2C%22chat%22%3A%7B%22stream%22%3Atrue%2C%22prompt_config%22%3A%7B%22attitude%22%3A%22normal%22%2C%22rule%22%3A%22detailed%22%2C%22noanswer%22%3A%22sorry%22%2C%22language%22%3A%22Chinese%22%2C%22role%22%3Afalse%2C%22role_name%22%3A%22AI%E5%B0%8F%E5%8A%A9%E6%89%8B%22%2C%22out_format%22%3A%22text%22%7D%2C%22agent%22%3A%7B%22tools%22%3A%5B%5D%7D%2C%22csi_level%22%3A%22strict%22%2C%22history_max%22%3A%22%22%2C%22link%22%3A%22false%22%2C%22rich_text_strategy%22%3A%22%22%2C%22enable_llm_knowledge%22%3Atrue%7D%7DRAM ユーザーの作成
詳細については、「RAM ユーザーを作成し、RAM ユーザーに権限を付与する」をご参照ください。ユーザーを作成する際は、[永続 AccessKey を使用してアクセスする] オプションを選択します。ユーザーの作成後、AccessKey ペアを記録します。

RAM ユーザーに、STS を呼び出すための AliyunSTSAssumeRoleAccess 権限を付与します。
RAM ロールの作成
詳細については、「RAM ロールを作成し、必要なポリシーをロールにアタッチする」をご参照ください。信頼ポリシーを編集して、RAM ユーザーがロールを偽装することを承認します。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::106******24:user/<作成された RAM ユーザーのユーザー名>" // 作成されたRAMユーザーのユーザー名 ] } } ], "Version": "1" }RAM ロールに、STS を呼び出すための AliyunOpenSearchReadOnlyAccess 権限を付与します。
RAM ロールの Amazon リソースネーム ( ARN ) を
acs:ram::106******24:role/role-name形式で記録します。
ログオン不要のURLを取得する
OpenSearch LLM ベースの会話型検索エディション Q&Aテストページのログイン不要の URL を作成します。完全なサンプル コードについては、「サンプル コード」をご参照ください。
RAM ユーザーの
AccessKeyペアを使用して STS にアクセスし、セキュリティトークンを取得します。必要に応じて、トークンの有効期間を指定できます。サンプル コード:// 準備した Q&Aテストページの宛先 URL を入力します。 String DestinationUrl = ""; // Enter the prepared destination URL of the Q&A test page. // RAM ロールの ARN を入力します。 String RoleArn = ""; // Enter the ARN of the RAM role. // RAM ロールセッション名を入力します。 String RoleSessionName = ""; // Enter the RAM role session name. com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() // 必須。 コードランタイム環境で ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が指定されていることを確認します。 .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is specified in the code runtime environment. // 必須。 コードランタイム環境で ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が指定されていることを確認します。 .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is specified in the code runtime environment. // エンドポイントを指定します。 詳細については、https://api.aliyun.com/product/Sts をご覧ください。 config.endpoint = "sts.cn-hangzhou.aliyuncs.com"; // Specify the endpoint. For more information, visit https://api.aliyun.com/product/Sts. com.aliyun.sts20150401.Client client = new com.aliyun.sts20150401.Client(config); com.aliyun.sts20150401.models.AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest() .setRoleArn(RoleArn) .setRoleSessionName(RoleSessionName); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); com.aliyun.sts20150401.models.AssumeRoleResponseBody resp = client.assumeRoleWithOptions(assumeRoleRequest, runtime).getBody();RAM シングルサインオン ( SSO ) にアクセスし、ログイン トークンを取得します。次のサンプル コードは、サポートされている URL 形式を示しています。
TicketTypeはminiに設定する必要があることに注意してください。http://signin.aliyun.com/federation?Action=GetSigninToken &AccessKeyId=<STS によって返された一時的な AccessKey ID> &AccessKeySecret=<STS によって返された一時的な AccessKey シークレット> &SecurityToken=<STS によって返されたセキュリティトークン> &TicketType=mini出力:
{ "RequestId": "******c5fd48789d23773af853e9f7_936be_1706585994094_1.229", "SigninToken": "svX6LGcBbWLExKD5hcwdLu6RsLQbv36fWZN36WhxkTXpTcDpmzs2K6X8uFvCqGsBTU4KWJMffYz2rAVbdJXHMECgUfyzS869wh2DBdFEQo3e2fJgZ5YtcMSVnoX7pterS2f7926jFvdBXVFEF54JkUCMrDAutNRv1u7ZReC7v8oQoG5UmjJBbHUyvLTn5UDDvDfNowMVyRskrZRFUKT2qA**********" }準備したURLにログオントークンを追加して、ログオン不要のURLを生成します。
http://signin.aliyun.com/federation?Action=Login &LoginUrl=<別のページにリダイレクトするために HTTP ステータスコード 302 を返すように構成されているセルフマネージドWebサイトのログオン URL。 encodeURL を使用して URL をトランスコードする必要があります。> // The logon URL on the self-managed website that is configured to return HTTP status code 302 to redirect to another page. You must use encodeURL to transcode the URL. &Destination=<アクセスする実際の OpenSearch LLMベースの対話型検索エディション Q&Aテストページ。 パラメータが指定されている場合は、encodeURL を使用してパラメータをトランスコードする必要があります。> // The actual OpenSearch LLM-Based Conversational Search Edition Q&A test page to access. If parameters are specified, you must use encodeURL to transcode the parameters. &SigninToken=<取得したログオントークン。 encodeURL を使用してトークンをトランスコードする必要があります。> // The logon token that is obtained. You must use encodeURL to transcode the token.
Q&Aテストページを埋め込む
ログイン不要の URL をiFrame として Web ページに埋め込みます。
このテスト中、ブラウザ で初めてログイン不要の URL にアクセスします。テストが完了すると、使用済みのログイン トークンは無効になります。ログイン不要の URL を再生成する必要があります。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Q&Aテストページの URL 共有</title>
</head>
<body>
<iframe width="1280" height="720" src="ログイン不要の URL"> </iframe>
</body>
</html>サンプル コード
Q&Aテストページのログイン不要の URL を生成するには、次のサンプル コードを参照できます。
依存関係を追加する
次のコードは、JavaのMavenの依存関係を示しています。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>sts20150401</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
<version>0.3.7</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-console</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-util</artifactId>
<version>0.2.23</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>ログイン不要の URL を生成する
次のコードを実行して、ログイン不要の URL を生成します。
package com.aliyun.sample;
import com.aliyun.tea.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import java.net.URLEncoder;
import static java.lang.System.exit;
public class Sample {
/**
* 説明