Topik ini menjelaskan cara menjalankan tes tanya jawab menggunakan OpenSearch SDK.
Konfigurasikan variabel lingkungan
Konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
Pasangan AccessKey dari akun Alibaba Cloud dapat digunakan untuk mengakses semua Operasi API. Kami menyarankan Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil Operasi API atau melakukan pemeliharaan rutin O&M. Untuk informasi tentang cara menggunakan Pengguna RAM, lihat Buat Pengguna RAM.
Untuk informasi tentang cara membuat pasangan AccessKey, lihat Buat Pasangan AccessKey.
Jika Anda menggunakan pasangan AccessKey dari Pengguna RAM, pastikan bahwa izin yang diperlukan diberikan kepada peran AliyunServiceRoleForOpenSearch menggunakan akun Alibaba Cloud Anda. Untuk informasi lebih lanjut, lihat AliyunServiceRoleForOpenSearch dan Aturan Otorisasi Akses.
Kami menyarankan agar Anda tidak menyertakan pasangan AccessKey Anda dalam materi yang mudah diakses oleh orang lain, seperti kode proyek. Jika tidak, pasangan AccessKey Anda mungkin bocor dan sumber daya di akun Anda menjadi tidak aman.
Linux dan macOS
Jalankan perintah berikut. Ganti
<access_key_id>dan<access_key_secret>dengan ID AccessKey dan Rahasia AccessKey dari Pengguna RAM yang Anda gunakan.export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>Windows
Buat file variabel lingkungan, tambahkan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET ke file tersebut, lalu atur variabel lingkungan ke ID AccessKey dan Rahasia AccessKey Anda.
Mulai ulang Windows agar pasangan AccessKey berlaku.
Dependensi
Untuk menggunakan OpenSearch SDK untuk mengunggah file, Anda harus menentukan dependensi berikut:
<dependency>
<groupId>com.aliyun.opensearch</groupId>
<artifactId>aliyun-sdk-opensearch</artifactId>
<version>6.0.0</version>
</dependency>
pip install alibabacloud_tea_util
pip install alibabacloud_opensearch_util
pip install alibabacloud_credentialsV3.4.1 (2021-05-11)
URL Unduhan: https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20230719/mxik/opensearch-sdk-php-release-v3.4.1.zipKode demo
Untuk informasi tentang BaseRequest, lihat Kode Contoh untuk Klien Python.
package com.aliyun.opensearch;
import com.aliyun.opensearch.OpenSearchClient;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchResult;
import java.util.HashMap;
import java.util.Map;
public class LLMSearch {
private static String appName = "Ganti dengan nama aplikasi Anda";
private static String host = "Ganti dengan Titik akhir API Anda";
private static String path = "/apps/AppName/actions/knowledge-search";
public static void main(String[] args) {
// Informasi identifikasi pengguna
// Dapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. Anda harus mengonfigurasi variabel lingkungan sebelum menjalankan kode contoh.
String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
//ApiReadTimeOut
OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
openSearch.setTimeout(90000);
OpenSearchClient openSearchClient = new OpenSearchClient(openSearch);
Map<String, String> params = new HashMap<String, String>() {{
put("format", "full_json");
put("_POST_BODY", "{\"question\":{\"text\":\"Cara mengisi\",\"type\":\"TEXT\",\"session\":\"\"},\"options\":{\"retrieve\":{\"doc\":{\"filter\":\"\",\"top_n\":5,\"sf\":\"\",\"dense_weight\":\"0.7\",\"formula\":\"\",\"operator\":\"AND\"},\"entry\":{\"sf\":\"\"},\"image\":{\"sf\":\"\",\"dense_weight\":\"0.7\"},\"qp\":{\"query_extend\":false,\"query_extend_num\":5},\"return_hits\":false,\"rerank\":{\"enable\":true,\"model\":\"ops-bge-reranker-larger\"}},\"chat\":{\"stream\":true,\"prompt_config\":{\"attitude\":\"normal\",\"rule\":\"detailed\",\"noanswer\":\"maaf\",\"language\":\"Chinese\",\"role\":false,\"role_name\":\"AI Assistant\",\"out_format\":\"text\"},\"agent\":{\"tools\":[]},\"csi_level\":\"strict\",\"history_max\":\"\",\"link\":\"false\",\"model\":\"qwen-plus\",\"model_generation\":\"\"}}}");
}};
try {
OpenSearchResult openSearchResult = openSearchClient
.callAndDecodeResult(path, params, "POST");
System.out.println("RequestID=" + openSearchResult.getTraceInfo().getRequestId());
System.out.println(openSearchResult.getResult());
} catch (
OpenSearchException e) {
System.out.println("RequestID=" + e.getRequestId());
System.out.println("ErrorCode=" + e.getCode());
System.out.println("ErrorMessage=" + e.getMessage());
} catch (
OpenSearchClientException e) {
System.out.println("ErrorMessage=" + e.getMessage());
}
}
}
# -*- coding: utf-8 -*-
import time, os
from typing import Dict, Any
from Tea.exceptions import TeaException
from Tea.request import TeaRequest
from alibabacloud_tea_util import models as util_models
from BaseRequest import Config, Client
class LLMSearch:
def __init__(self, config: Config):
self.Clients = Client(config=config)
self.runtime = util_models.RuntimeOptions(
connect_timeout=10000,
read_timeout=90000,
autoretry=False,
ignore_ssl=False,
max_idle_conns=50,
max_attempts=3
)
self.header = {}
def searchDoc(self, app_name: str,body:Dict, query_params: dict={}) -> Dict[str, Any]:
try:
response = self.Clients._request(method="POST", pathname=f'/v3/openapi/apps/{app_name}/actions/knowledge-search',
query=query_params, headers=self.header, body=body, runtime=self.runtime)
return response
except TeaException as e:
print(e)
if __name__ == "__main__":
# Tentukan titik akhir permintaan terpadu tanpa awalan http://
endpoint = "<endpoint>"
# Tentukan protokol. Nilai valid: HTTPS/HTTP
endpoint_protocol = "HTTP"
# Informasi identifikasi pengguna
# Dapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
# Anda harus mengonfigurasi variabel lingkungan sebelum menjalankan kode contoh. Untuk informasi lebih lanjut, lihat bagian "Konfigurasikan variabel lingkungan" dari topik ini.
access_key_id = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID")
access_key_secret = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
# Tentukan jenis otentikasi. Nilai valid: sts/access_key. Nilai default adalah access_key. Anda dapat mengonfigurasi otentikasi RAM-STS menggunakan sts.
# Nilai valid: sts atau access_key
auth_type = "access_key"
# Jika Anda menggunakan otentikasi RAM-STS, tentukan parameter security_token. Anda dapat menggunakan AssumeRole Alibaba Cloud untuk mendapatkan struktur otentikasi STS yang relevan.
security_token = "<security_token>"
# Tentukan informasi permintaan umum.
# Parameter type dan security_token hanya diperlukan jika Anda menggunakan SDK sebagai Pengguna RAM.
Configs = Config(endpoint=endpoint, access_key_id=access_key_id, access_key_secret=access_key_secret,
security_token=security_token, type=auth_type, protocol=endpoint_protocol)
# Buat instance OpenSearch
# Ganti <application name> dengan nama instans versi Q&A cerdas yang Anda buat
ops = LLMSearch(Configs)
app_name = "<application name>"
# --------------- Pencarian Dokumen ---------------
docQuery = {"question": {"text": "pencarian", "type": "TEXT"}}
res1 = ops.searchDoc(app_name=app_name, body=docQuery)
print(res1)<?php
require_once($path . "/OpenSearch/Autoloader/Autoloader.php");
use OpenSearch\Client\OpenSearchClient;
// Informasi identifikasi pengguna
// Dapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
// Anda harus mengonfigurasi variabel lingkungan sebelum menjalankan kode contoh. Untuk informasi lebih lanjut, lihat bagian "Konfigurasikan variabel lingkungan" dari topik ini.
// Ganti dengan ID access key yang sesuai
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
// Ganti dengan rahasia access yang sesuai
$secret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$endPoint = '<Ganti dengan endpoint>';
$appName = '<Ganti dengan nama aplikasi>';
$options = array('timeout' => 90);
$requestBody = "{\"question\":{\"text\":\"Berdasarkan survei berbagai jenis situs tipikal\",\"type\":\"TEXT\"}}";
$client = new OpenSearchClient($accessKeyId, $secret, $endPoint, $options);
$uri = "/apps/{$appName}/actions/knowledge-search";
try{
$ret = $client->post($uri, $requestBody);
print_r(json_decode($ret->result, true));
}catch (\Throwable $e) {
print_r($e);
}Untuk informasi lebih lanjut tentang parameter lainnya di POST_BODY, lihat Lakukan Pencarian Percakapan Berbasis Teks.
Kode contoh untuk Java SDK keluaran streaming
Permintaan contoh
Menggunakan AccessKey
CatatanVersi Java SDK 6.0.0 atau lebih tinggi diperlukan untuk contoh berikut.
package org.example; import com.aliyun.opensearch.OpenSearchClient; import com.aliyun.opensearch.sdk.dependencies.org.apache.http.HttpResponse; import com.aliyun.opensearch.sdk.generated.OpenSearch; import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; public class Main { private static String host = "Ganti dengan alamat akses Anda"; public static void main(String[] args) { // Dapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. Anda harus mengonfigurasi variabel lingkungan sebelum menjalankan kode contoh. String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); OpenSearch openSearch = new OpenSearch(accesskey, secret, host); openSearch.setTimeout(90000); OpenSearchClient openSearchClient = new OpenSearchClient(openSearch); Map<String, String> params = new HashMap<String, String>() {{ put("_POST_BODY", "{\"question\": {\"text\": \"Beijing\",\"type\": \"TEXT\"},\"options\": {\"chat\": {\"stream\": true}}}"); }}; String path = "/apps/AppName/actions/knowledge-search"; try { HttpResponse httpResponse = openSearchClient .callForHttpResponse(path, params, "POST"); InputStream responseBodyStream = httpResponse.getEntity().getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(responseBodyStream, StandardCharsets.UTF_8)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); // Permintaan diterima. openSearchClient.getHttpClientManager().getClientTracer().success(httpResponse, ""); } catch (OpenSearchClientException e) { System.out.println("ErrorMessage=" + e.getMessage()); } catch (IOException e) { throw new RuntimeException(e); } } }Menggunakan API Key
CatatanVersi Java SDK 6.0.2 atau lebih tinggi diperlukan.
package org.example; import com.aliyun.opensearch.OpenSearchClient; import com.aliyun.opensearch.sdk.dependencies.org.apache.http.HttpResponse; import com.aliyun.opensearch.sdk.generated.OpenSearch; import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; public class Main { private static String host = "Ganti dengan alamat akses Anda"; public static void main(String[] args) { // Akses menggunakan API Key, versi SDK harus 6.0.2 atau lebih baru OpenSearch openSearch = new OpenSearch(); openSearch.setBearerToken("OS-xxxx"); openSearch.setHost(host); openSearch.setTimeout(90000); OpenSearchClient openSearchClient = new OpenSearchClient(openSearch); Map<String, String> params = new HashMap<String, String>() {{ put("_POST_BODY", "{\"question\": {\"text\": \"Beijing\",\"type\": \"TEXT\"},\"options\": {\"chat\": {\"stream\": true}}}"); }}; String path = "/apps/AppName/actions/knowledge-search"; try { HttpResponse httpResponse = openSearchClient .callForHttpResponse(path, params, "POST"); InputStream responseBodyStream = httpResponse.getEntity().getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(responseBodyStream, StandardCharsets.UTF_8)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); // Permintaan diterima. openSearchClient.getHttpClientManager().getClientTracer().success(httpResponse, ""); } catch (OpenSearchClientException e) { System.out.println("ErrorMessage=" + e.getMessage()); } catch (IOException e) { throw new RuntimeException(e); } } }
Keluaran contoh
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":391.178295,"result":{"data":[{"answer":"Beijing","type":"TEXT"}]}}
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":409.279769,"result":{"data":[{"answer":"Beijing ada di China","type":"TEXT"}]}}
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":429.260018,"result":{"data":[{"answer":"Beijing adalah","type":"TEXT"}]}}
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":447.107968,"result":{"data":[{"answer":"Beijing adalah ibu kota China","type":"TEXT"}]}}
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":465.897194,"result":{"data":[{"answer":"Beijing adalah ibu kota China,","type":"TEXT"}]}}
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":485.54058,"result":{"data":[{"answer":"Beijing adalah ibu kota China, dengan","type":"TEXT"}]}}
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":504.273681,"result":{"data":[{"answer":"Beijing adalah ibu kota China, dengan sejarah panjang","type":"TEXT"}]}}
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":523.287943,"result":{"data":[{"answer":"Beijing adalah ibu kota China, dengan sejarah panjang.","type":"TEXT"}]}}
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":542.027658,"result":{"data":[{"answer":"Beijing adalah ibu kota China, dengan sejarah panjang.","type":"TEXT"}]}}
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":559.790625,"result":{"data":[{"answer":"Beijing adalah ibu kota China, dengan sejarah panjang.","type":"TEXT"}]}}
data:{"request_id":"AF429C69-2D36-4328-A9BA-5ECDEC716176","status":"OK","latency":689.980221,"result":{"data":[{"answer":"Beijing adalah ibu kota China, dengan sejarah panjang.","type":"TEXT","reference":[{"tokenNum":12,"id":"6004483b75f98deb48198e3543a90c0c","title":"Beijing.txt"},{"tokenNum":607,"id":"770f7cb52fec7afb1be65d637063a8cb","title":"Leading New China, Striving for a New Era.docx"}]}]}}
data:[done]