すべてのプロダクト
Search
ドキュメントセンター

:クイックスタート:プロジェクトの作成

最終更新日:Jun 23, 2026

クイックスタート

CLI のインストール

pairecmd を使用して、プロジェクトを迅速に作成できます。PAI-Rec コンソールからバージョン 2 を使用することを推奨します。

バージョン 2

ダウンロードリンク:

Linux

macOS

macOS (Arm ベース)

Windows

UNIX 系システムでダウンロードした後、ファイルを実行可能にします。次のコマンドを実行します: chmod +x pairecmd

プロジェクトの作成

pairec-demo という名前のプロジェクトを作成するには、次のコマンドを実行します。これにより、現在の作業ディレクトリにプロジェクトのソースコードを含む pairec-demo という名前のディレクトリが作成されます。

./pairecmdmac project --name pairec-demo

生成されたディレクトリの構造は次のとおりです:

pairec-demo
├── Makefile
├── conf
│   └── config.json.production
├── docker
│   └── Dockerfile
├── go.mod
└── src
    ├── controller
    │   └── feed.go
    └── main.go

pairec-demo ディレクトリに移動し、次のコマンドを実行します:

go mod tidy

プロジェクトのコンパイルとパッケージ化

プロジェクトには Makefile が含まれています。プロジェクトをコンパイルするには、次のコマンドを実行します:

make && make build

エラーが発生した場合は、まず次のコマンドを実行してください:

go mod tidy

プロジェクトをイメージとしてパッケージ化するには、次のコマンドを実行します:

make release

特定のニーズに合わせて Makefile を変更できます。

DOCKER?=docker
SOURCE_DIR=src
BIN_NAME=pairec_demo
REGISTRY?=registry.cn-beijing.cr.aliyuncs.com
DOCKER_TAG?=0.0.1
TEMP_DIR_SERVER:=$(shell mktemp -d)
.PHONY: setup build clean
setup:
        go mod vendor
build:
        cd ${SOURCE_DIR}; CGO_ENABLED=0 GOARCH=amd64 GOOS=linux ${BUILD} -o ${BIN_NAME} .
        cd ${SOURCE_DIR}; mv ${BIN_NAME} ../
release:
        cd ${SOURCE_DIR}; CGO_ENABLED=0 GOARCH=amd64 GOOS=linux ${BUILD} -o ${BIN_NAME} .
        cd ${SOURCE_DIR}; mv ${BIN_NAME} ${TEMP_DIR_SERVER}/appd
        cp docker/Dockerfile ${TEMP_DIR_SERVER}/
        cp conf/config.json.production ${TEMP_DIR_SERVER}/config.json
        cd ${TEMP_DIR_SERVER}  &&  ${DOCKER} build  -t ${REGISTRY}/${BIN_NAME}:${DOCKER_TAG} .
        ${DOCKER} push ${REGISTRY}/${BIN_NAME}:${DOCKER_TAG}
clean:
        -rm -rf ${BIN_NAME}

注:Alibaba Cloud Container Registry を使用して個人向けイメージサービスを有効化し、BIN_NAME で指定されたイメージリポジトリを作成できます。

プロジェクトの実行

pairec-demo ディレクトリに移動し、次のコマンドを実行してサービスを開始します。サービスはログをターミナルに出力します。

config パラメーターを使用して、設定ファイルのパスを指定します。

go run src/main.go --config=conf/config.json.production --alsologtostderr

別のターミナルで次のコマンドを実行して API をテストできます:

curl -v http://localhost:8000/api/rec/feed -d '{"uid":"76295990", "size":10, "scene_id":"home_feed"}'

構成の詳細については、「エンジン設定」をご参照ください。

API リファレンス

生成されたプロジェクトには、レコメンデーション API が含まれています。実装の詳細については、controller/feed.go をご参照ください。API は次のように定義されています:

エンドポイント

/api/rec/feed

リクエストパラメーター

パラメーター

説明

必須

uid

ユーザー ID。

string

はい

"1000079"

size

返されるアイテム数。

integer

はい

10

scene_id

シナリオ ID。

string

はい

home_feed

features

コンテキスト特徴。

json map

いいえ

{"age":20, "sex":"male"}

complex_type_features

複雑なコンテキスト特徴。モデルサービスがリクエストで型情報を必要とする場合、このパラメーターは必須です。

json array

いいえ

[{"name":"age", "type":"int", "values":20}, {"name":"sex", "values":"male", "type":"string"}]

item_id

類似性ベースのレコメンデーションに使用されるアイテム ID。

string

いいえ

248791390

item_list

再現のためのカスタムアイテムリスト。

json array

いいえ

[{"item_id":"1111", "score":1},{"item_id":"222", "score":0.95}]

debug

デバッグ用のフラグ。true に設定すると、システムは追加のログを出力します。

bool

いいえ

true

request_id

リクエストの一意の識別子。このパラメーターを省略すると、PAI-Rec エンジンは自動的に ID を生成します。値が指定された場合、PAI-Rec エンジンはその値をリクエスト ID として使用します。

string

いいえ

"c46c3f5e-6b32-4b5c-8aac-59a319941248"

API を介して再現されたデータのバッチを渡すには、それを item_list パラメーターに割り当てます。item_list はマップオブジェクトの配列です。各オブジェクトには、アイテム ID を指定する item_id フィールドが含まれている必要があります。他のすべてのフィールドはオプションです。オブジェクトに score フィールドが含まれている場合、エンジンはその値を再現スコアとして扱います。エンジンは他のすべてのフィールドをアイテムプロパティとして扱います。

complex_type_features

複雑なコンテキスト特徴を配列として渡します。配列内の各要素には、次のフィールドが含まれます:

パラメーター

説明

name

コンテキスト特徴の名前。

age

type

コンテキスト特徴の型。

int

values

コンテキスト特徴の値。このフィールドは、単一の値、配列、マップなど、さまざまな型をサポートします。

20

例:

  1. 単一の値を渡す: [{"name":"age", "type":"int", "values":20}, {"name":"sex", "values":"male", "type":"string"}]

  2. 配列を渡す: [{"name":"list_features", "type":"list<int>", "values":[1,2,3]}]

  3. マップを渡す: [{"name":"map_features", "type":"map<int,int>", "values":{"1":10,"2":20,"3":30}}] または [{"name":"map_features", "type":"map<int,int>", "values":{"1":"10","2":"20","3":"30"}}]

type フィールドでサポートされている値には、 int int64floatdoublestringlist<int>list<int64>list<float>list<double>list<string>map<int,int>map<int,int64>map<int,float>map<int,double>map<int,string>map<string,int>map<string,int64>map<string,float>map<string,double>map<string,string>map<int64,int>map<int64,int64>map<int64,float>map<int64,double>、および map<int64,string> があります。

同じリクエストで complex_type_featuresfeatures パラメーターを一緒に使用できます。

レスポンス本文

パラメーター

説明

code

ビジネスステータスコード。

int

200

msg

ビジネスメッセージ。

string

success

request_id

リクエストの一意の識別子。

string

e332fe9c-7d99-45a8-a047-bc7ec33d07f6

size

返されたレコメンドアイテムの数。

int

10

experiment_id

実験 ID。A/B テストを使用しない場合、このフィールドは空です。

string

ER2_L1#EG1#E2

items

レコメンドされたアイテムのリスト。

json array

[{"item_id":"248791390","score":0.9991594902203332,"retrieve_id":"mock_recall"}]

次の表は、items 配列内の各オブジェクトのフィールドについて説明しています。

パラメーター

説明

item_id

レコメンドされたアイテムの ID。

string

3v5RE7417j7R

retrieve_id

リコールソースの ID。

string

u2i_recall

score

レコメンデーションスコア。

float

0.45

extra

カスタム出力フィールド。カスタムフィールドを指定しない場合、API はこのフィールドを返しません。

json map

以下のカスタム出力フィールドの説明をご参照ください。

エラーコード

コード

説明

msg

200

リクエストは成功しました。

success

299

API が返したアイテム数が不足しています。

items size not enough

400

パラメーターエラーが発生しました。詳細は msg フィールドに記載されています。

uid not empty or unexpected end of JSON input

500

サーバーエラーが発生しました。サーバーはこのエラーを HTTP ステータスコードとして返します。

リクエスト例

curl -v http://host/api/rec/feed -d '{"uid":"76295990", "size":10, "scene_id":"home_feed"}'

レスポンス例

{
    "code":200,
    "msg":"success",
    "request_id":"e332fe9c-7d99-45a8-a047-bc7ec33d07f6",
    "size":10,
    "experiment_id":"",
    "items":[
          {
            "item_id":"248791390",
            "score":0.9991594902203332,
            "retrieve_id":"mock_recall"
          },
                ...
    ]
}

カスタム出力フィールド

デフォルトでは、レスポンスの各アイテムには item_idretrieve_id、および score フィールドが含まれます。アイテムプロパティやモデルスコアなど、カスタムフィールドを出力することもできます。SceneConfs でシナリオの出力フィールドをカスタマイズできます。この構成を OutputFields で定義すると、API はカスタムフィールドを extra フィールドで返します。

次のコードは設定例です:

"SceneConfs": {
  "${scene_name}": {
    "default": {
      "RecallNames": [
        "collaborative_filter"
      ],
      "OutputFields": [
           "item:type",
           "item:age",
           "score:*",
           "score:model_v1_ctr"
      ]
    }
  }
}
  • item: で始まるフィールドは、対応するアイテムプロパティを出力します。プロパティが存在しない場合、API は null を返します。

  • score: で始まるフィールドは、モデルから返されたスコアを出力します。

  • score:* はすべてのモデルスコアを出力します。API はスコアを algo_scores フィールドに配置します。

よくある質問

再ランキングのためのアイテムリストの受け渡し

アイテムリストを item_list パラメーターで渡します。次に、エンジン設定でコンテキストアイテムの再現を設定し、PAI-Rec エンジンが item_list パラメーターからアイテムリストを読み取れるようにします。

レポートのためのクライアントサイドトラッキングの実装

レコメンデーション API は request_idexperiment_id フィールドを返します。クライアントでこれら 2 つのフィールドをログに記録する必要があります。最低でも、インプレッションおよびクリック行動ログに含めてください。再生時間、カート追加イベント、購入などの他の行動ログにもこれらのフィールドを含めることを推奨します。他の行動ログからこれらのフィールドを省略すると、メトリックの精度に影響を与える可能性があります。「データ登録とフィールド設定」の SQL 例を参照して、オフライン実験レポートのソーステーブルを生成します。次に、そのテーブルを A/B テストプラットフォームに登録し、カスタムメトリックを設定して、レポートデータを計算します。A/B テストプラットフォームがレポートデータを計算した後、「実験メトリックレポート」で実験レポートを表示できます。