推論APIの実行

この機能は技術プレビュー中であり、将来のリリースで変更または削除される可能性があります。Elasticは問題を修正するために取り組みますが、技術プレビューの機能は公式GA機能のサポートSLAの対象ではありません。

推論エンドポイントを使用して、入力テキストに対して推論タスクを実行します。

推論APIを使用すると、組み込みの機械学習モデル(ELSER、E5)、Elandを通じてアップロードされたモデル、Cohere、OpenAI、Azure、Google AI Studio、Google Vertex AI、またはHugging Faceなどの特定のサービスを利用できます。組み込みモデルおよびElandを通じてアップロードされたモデルの場合、推論APIはトレーニングされたモデルを使用および管理するための代替手段を提供します。ただし、これらのモデルを使用するために推論APIを使用する予定がない場合や、非NLPモデルを使用したい場合は、機械学習トレーニングモデルAPIを使用してください。

リクエスト

POST /_inference/<inference_id>

POST /_inference/<task_type>/<inference_id>

前提条件

  • monitor_inference クラスター特権が必要です(組み込みのinference_adminおよびinference_userロールはこの特権を付与します)

説明

推論APIを使用すると、提供されたデータに対して特定のタスクを実行するために機械学習モデルを使用できます。APIはタスクの結果を含む応答を返します。使用する推論エンドポイントは、推論APIの作成でエンドポイントが作成されたときに定義された特定のタスクを実行できます。

パスパラメータ

  • <inference_id>
  • (必須、文字列)推論エンドポイントの一意の識別子。
  • <task_type>
  • (オプション、文字列)モデルが実行する推論タスクのタイプ。

クエリパラメータ

  • timeout
  • (オプション、タイムアウト)推論が完了するまでの待機時間を制御します。デフォルトは30秒です。

リクエストボディ

  • input
  • (必須、文字列または文字列の配列)推論タスクを実行したいテキスト。inputは単一の文字列または配列であることができます。
    completionタスクタイプの推論エンドポイントは、現在、入力として単一の文字列のみをサポートしています。
  • query
  • (必須、文字列)rerank推論エンドポイント専用。検索クエリテキスト。
  • task_settings
  • (オプション、オブジェクト)個々の推論リクエストのタスク設定。これらの設定は、指定した<task_type>に特有であり、サービスの初期化時に指定されたタスク設定を上書きします。

完了例

以下の例は、例の質問に対して完了を実行します。

Python

  1. resp = client.inference.inference(
  2. task_type="completion",
  3. inference_id="openai_chat_completions",
  4. input="What is Elastic?",
  5. )
  6. print(resp)

Ruby

  1. response = client.inference.inference(
  2. task_type: 'completion',
  3. inference_id: 'openai_chat_completions',
  4. body: {
  5. input: 'What is Elastic?'
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.inference.inference({
  2. task_type: "completion",
  3. inference_id: "openai_chat_completions",
  4. input: "What is Elastic?",
  5. });
  6. console.log(response);

コンソール

  1. POST _inference/completion/openai_chat_completions
  2. {
  3. "input": "What is Elastic?"
  4. }

APIは以下の応答を返します:

コンソール-結果

  1. {
  2. "completion": [
  3. {
  4. "result": "Elastic is a company that provides a range of software solutions for search, logging, security, and analytics. Their flagship product is Elasticsearch, an open-source, distributed search engine that allows users to search, analyze, and visualize large volumes of data in real-time. Elastic also offers products such as Kibana, a data visualization tool, and Logstash, a log management and pipeline tool, as well as various other tools and solutions for data analysis and management."
  5. }
  6. ]
  7. }

再ランク例

以下の例は、例の入力に対して再ランクを実行します。

Python

  1. resp = client.inference.inference(
  2. task_type="rerank",
  3. inference_id="cohere_rerank",
  4. input=[
  5. "luke",
  6. "like",
  7. "leia",
  8. "chewy",
  9. "r2d2",
  10. "star",
  11. "wars"
  12. ],
  13. query="star wars main character",
  14. )
  15. print(resp)

Ruby

  1. response = client.inference.inference(
  2. task_type: 'rerank',
  3. inference_id: 'cohere_rerank',
  4. body: {
  5. input: [
  6. 'luke',
  7. 'like',
  8. 'leia',
  9. 'chewy',
  10. 'r2d2',
  11. 'star',
  12. 'wars'
  13. ],
  14. query: 'star wars main character'
  15. }
  16. )
  17. puts response

Js

  1. const response = await client.inference.inference({
  2. task_type: "rerank",
  3. inference_id: "cohere_rerank",
  4. input: ["luke", "like", "leia", "chewy", "r2d2", "star", "wars"],
  5. query: "star wars main character",
  6. });
  7. console.log(response);

コンソール

  1. POST _inference/rerank/cohere_rerank
  2. {
  3. "input": ["luke", "like", "leia", "chewy","r2d2", "star", "wars"],
  4. "query": "star wars main character"
  5. }

APIは以下の応答を返します:

コンソール-結果

  1. {
  2. "rerank": [
  3. {
  4. "index": "2",
  5. "relevance_score": "0.011597361",
  6. "text": "leia"
  7. },
  8. {
  9. "index": "0",
  10. "relevance_score": "0.006338922",
  11. "text": "luke"
  12. },
  13. {
  14. "index": "5",
  15. "relevance_score": "0.0016166499",
  16. "text": "star"
  17. },
  18. {
  19. "index": "4",
  20. "relevance_score": "0.0011695103",
  21. "text": "r2d2"
  22. },
  23. {
  24. "index": "1",
  25. "relevance_score": "5.614787E-4",
  26. "text": "like"
  27. },
  28. {
  29. "index": "6",
  30. "relevance_score": "3.7850367E-4",
  31. "text": "wars"
  32. },
  33. {
  34. "index": "3",
  35. "relevance_score": "1.2508839E-5",
  36. "text": "chewy"
  37. }
  38. ]
  39. }

スパース埋め込み例

以下の例は、例の文に対してスパース埋め込みを実行します。

Python

  1. resp = client.inference.inference(
  2. task_type="sparse_embedding",
  3. inference_id="my-elser-model",
  4. input="The sky above the port was the color of television tuned to a dead channel.",
  5. )
  6. print(resp)

Ruby

  1. response = client.inference.inference(
  2. task_type: 'sparse_embedding',
  3. inference_id: 'my-elser-model',
  4. body: {
  5. input: 'The sky above the port was the color of television tuned to a dead channel.'
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.inference.inference({
  2. task_type: "sparse_embedding",
  3. inference_id: "my-elser-model",
  4. input:
  5. "The sky above the port was the color of television tuned to a dead channel.",
  6. });
  7. console.log(response);

コンソール

  1. POST _inference/sparse_embedding/my-elser-model
  2. {
  3. "input": "The sky above the port was the color of television tuned to a dead channel."
  4. }

APIは以下の応答を返します:

コンソール-結果

  1. {
  2. "sparse_embedding": [
  3. {
  4. "port": 2.1259406,
  5. "sky": 1.7073475,
  6. "color": 1.6922266,
  7. "dead": 1.6247464,
  8. "television": 1.3525393,
  9. "above": 1.2425821,
  10. "tuned": 1.1440028,
  11. "colors": 1.1218185,
  12. "tv": 1.0111054,
  13. "ports": 1.0067928,
  14. "poem": 1.0042328,
  15. "channel": 0.99471164,
  16. "tune": 0.96235967,
  17. "scene": 0.9020516,
  18. (...)
  19. },
  20. (...)
  21. ]
  22. }

テキスト埋め込み例

以下の例は、Cohere統合を使用して例の文に対してテキスト埋め込みを実行します。

Python

  1. resp = client.inference.inference(
  2. task_type="text_embedding",
  3. inference_id="my-cohere-endpoint",
  4. input="The sky above the port was the color of television tuned to a dead channel.",
  5. task_settings={
  6. "input_type": "ingest"
  7. },
  8. )
  9. print(resp)

Js

  1. const response = await client.inference.inference({
  2. task_type: "text_embedding",
  3. inference_id: "my-cohere-endpoint",
  4. input:
  5. "The sky above the port was the color of television tuned to a dead channel.",
  6. task_settings: {
  7. input_type: "ingest",
  8. },
  9. });
  10. console.log(response);

コンソール

  1. POST _inference/text_embedding/my-cohere-endpoint
  2. {
  3. "input": "The sky above the port was the color of television tuned to a dead channel.",
  4. "task_settings": {
  5. "input_type": "ingest"
  6. }
  7. }

APIは以下の応答を返します:

コンソール-結果

  1. {
  2. "text_embedding": [
  3. {
  4. "embedding": [
  5. {
  6. 0.018569946,
  7. -0.036895752,
  8. 0.01486969,
  9. -0.0045204163,
  10. -0.04385376,
  11. 0.0075950623,
  12. 0.04260254,
  13. -0.004005432,
  14. 0.007865906,
  15. 0.030792236,
  16. -0.050476074,
  17. 0.011795044,
  18. -0.011642456,
  19. -0.010070801,
  20. (...)
  21. },
  22. (...)
  23. ]
  24. }
  25. ]
  26. }