快速創(chuàng)建項目
快速開始
安裝命令
我們可以使用 pairecmd 快速創(chuàng)建項目。現(xiàn)在 V2 版本支持 PAI-Rec控制臺(推薦使用)。
V2 版本
下載地址:
下載之后,在類 *nix 系統(tǒng),需要設(shè)置下可執(zhí)行文件。命令:chmod +x pairecmd
創(chuàng)建項目
以創(chuàng)建項目名稱 pairec-demo 舉例,執(zhí)行命令后,會在當(dāng)前目錄生成 pairec-demo 目錄,該目錄包含項目代碼。
./pairecmdmac project --name pairec-demo
生成的目錄結(jié)構(gòu)如下:
pairec-demo
├── Makefile
├── conf
│ └── config.json.production
├── docker
│ └── Dockerfile
├── go.mod
└── src
├── controller
│ └── feed.go
└── main.go
進(jìn)入 pairec-demo 目錄,執(zhí)行
go mod tidy
編譯打包項目
項目里提供了 Makefile 文件, 如果要編譯的話,直接運(yùn)行
make && make build
如果遇到錯誤的話,可以先執(zhí)行
go mod tidy
如果要打包成鏡像的話,執(zhí)行
make release
可以結(jié)合實(shí)際情況來修改 Makefile 文件。
注:可以通過 阿里云鏡像 開通個人鏡像,然后創(chuàng)建BIN_NAME 指定的鏡像倉庫。
運(yùn)行項目
可以進(jìn)入到 pairec-demo 目錄, 運(yùn)行一下命令啟動服務(wù),日志會輸出到終端上。
通過config參數(shù)傳入配置文件路徑。
go run src/main.go --config=conf/config.json.production --alsologtostderr
可以用下面的接口進(jìn)行測試(開啟另一個終端,運(yùn)行):
curl -v http://localhost:8000/api/rec/feed -d '{"uid":"76295990", "size":10, "scene_id":"home_feed"}'
config 具體的配置可以參考引擎配置單。
接口測試
在生成的項目中,本身已經(jīng)實(shí)現(xiàn)了一個推薦接口,具體實(shí)現(xiàn)可以參考 controller/feed.go 。 接口定義如下:
接口名稱
/api/rec/feed
請求參數(shù)
參數(shù)名稱 | 參數(shù)說明 | 類型 | 是否必須 | 用例 |
uid | 用戶id | string | 是 | "1000079" |
size | 獲取item數(shù)量 | integer | 是 | 10 |
scene_id | 場景id | String | 是 | home_feed |
features | 上下文特征 | json map | 否 | {"age":20, "sex":"male"} |
complex_type_features | 復(fù)雜類型的上下文特征,如果需要有類型的信息請求模型服務(wù),需要設(shè)置此值。 | 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 | debug 用,打印更多的日志 | bool | 否 | true |
request_id | 請求唯一標(biāo)識ID,此參數(shù)為空時,PAI-Rec 引擎會自動生成,如果用戶傳入,使用參數(shù)值當(dāng)成請求的ID | string | 否 | "c46c3f5e-6b32-4b5c-8aac-59a319941248" |
當(dāng)有一批召回的數(shù)據(jù),希望通過接口傳遞進(jìn)來,可以賦值給 item_list。 item_list 是一個數(shù)組,每個 item 是 map object ,item 中必須有 item_id 字段,表示物品的ID。其余都是可選的。 item 中如果包含 score 字段,會當(dāng)成召回得分處理。其余字段當(dāng)成 item 屬性進(jìn)行處理。
complex_type_features
復(fù)雜類型的上下文特征需要數(shù)組傳遞過來,每個元素包含的內(nèi)容如下:
名稱 | 說明 | 用例 |
name | 上下文特征名稱 | age |
type | 上下文特征類型 | int |
values | 上下文特征值,這里可以設(shè)置多種類型,支持具體值,數(shù)組, map 等 | 20 |
使用示例:
傳遞單個值,
[{"name":"age", "type":"int", "values":20}, {"name":"sex", "values":"male", "type":"string"}]
傳遞數(shù)組
[{"name":"list_features", "type":"list<int>", "values":[1,2,3]}]
傳遞map
[{"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
, int64
, float
, double
, string
, list<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_features 和 features 可以同時使用。
接口返回
名稱 | 說明 | 類型 | 示例 |
code | 接口返回業(yè)務(wù)碼 | int | 200 |
msg | 業(yè)務(wù)信息 | string | success |
request_id | 請求的唯一標(biāo)識 | string | e332fe9c-7d99-45a8-a047-bc7ec33d07f6 |
size | 返回的推薦條目數(shù)量 | int | 10 |
experiment_id | 實(shí)驗ID 標(biāo)識, 沒有對接 AB 實(shí)驗,返回為空 | 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標(biāo)識 | string | u2i_recall |
score | 推薦得分 | float | 0.45 |
錯誤碼說明
錯誤碼 | 說明 | msg |
200 | 接口正常 | success |
299 | 返回的數(shù)量不足 | items size not enough |
400 | 參數(shù)錯誤,不同的情況, msg 說明不同 | uid not empty 或者nexpected end of JSON input 等 |
500 | 服務(wù)器錯誤, 以 HTTP 錯誤碼形式返回 |
請求樣例
curl -v http://host/api/rec/feed -d '{"uid":"76295990", "size":10, "scene_id":"home_feed"}'
返回數(shù)據(jù)
{
"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"
},
...
]
}