PAI-Rec在使用过程中经常会遇到的一些问题。
Q:报错:未找到场景信息(scene:scene_test, not found the scene info)
报错示例:
[2025-08-11 17:25:45] [/bin/sh]: I0811 17:25:45.443989 29 log.go:40] [ERROR] scene:scene_test, not found the scene info
[2025-08-11 17:25:45] [/bin/sh]: I0811 17:25:45.443997 29 feed.go:224] [INFO] requestId=db0889a0-a1d7-4b2c-abda-018eab646ed0,uid=4382390632,scene_name=scene_test,exp_id=
[2025-08-11 17:25:45] [/bin/sh]: I0811 17:25:45.444045 29 context_item_recall.go:57] [INFO] requestId=db0889a0-a1d7-4b2c-abda-018eab646ed0 module=ContextItemRecall
cost=0
报错原因:
PAI-Rec 引擎配置中使用到的场景名称(scene_test),在PAI-Rec控制台 ->【推荐场景】中不存在。
解决方法:
在 PAI-Rec 控制台->【推荐场景】中创建一个名称为 scene_test 的场景。
Q:报错:未找到召回场景(Scene:not found, SceneId:home_feed)
报错示例:
29 recall.go:74] [ERROR] requestId=9b53a5c5-aa52-4b1d-8a0e-edcd6977e687 module=recall error=Scene:not found, SceneId:home_feed
29 recommend.go:33] [INFO] requestId=9b53a5c5-aa52-4b1d-8a0e-edcd6977e687 module=Filter cost=0
报错原因:
推荐引擎接口中scene_id的值和引擎配置中 SceneConfs(召回配置)中用到的场景名称不一致。
解决方法:
可以调整推荐引擎接口中 scene_id 的值,也可以调整 SceneConfs 中场景名,保证两个地方的场景有交集即可。
Q:引擎启动时注册Hologres失败
报错示例:
(event=RegisterHologres dsn=postgres://xxx-vpc-st.hologres.aliyuns.com:80/db?sslmode=disable&connect_timeout=10 name=pai_rec_online_new panic: runtime error invalid memory address or nil pointer dereference)
[2025-08-14 16:11:47]
[2025-08-14 16:11:47] xxx
[2025-08-14 16:11:47] xxx
[2025-08-14 16:11:47] xxx
[2025-08-14 16:11:47] xxx
[2025-08-14 16:11:47] xxx
[2025-08-14 16:11:47]
[2025-08-14 16:11:47] =========== Begin Of Program (name: /bin/sh) ===========
[2025-08-14 16:11:47] [/bin/sh]: 2025/08/14 16:11:47 maxprocs: Updating GOMAXPROCS=8: determined from CPU quota
[2025-08-14 16:11:47] [/bin/sh]: event=RegisterHologres dsn=postgres://xxx:xxx@xxx-vpc-st.hologres.aliyuncs.com:80/pairec?sslmode=disable&connect_timeout=10
name=pai_rec_online_newpanic: runtime error: invalid memory address or nil pointer dereference
[2025-08-14 16:11:47] [/bin/sh]: [signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0xfc02dc]
[2025-08-14 16:11:47] [/bin/sh]:
[2025-08-14 16:11:47] [/bin/sh]: goroutine 1 [running]:
[2025-08-14 16:11:47] [/bin/sh]: github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2/featurestore.(*FeatureStoreClient).GetProject(0xc000549d78?, {0xc0006e2100, 0xb})
[2025-08-14 16:11:47] [/bin/sh]: /go/pkg/mod/github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2@v2.3.4-0.20250612074337-3c6e7b95b667/featurestore/feature_store_client.go:196 +0x1c
[2025-08-14 16:11:47] [/bin/sh]: github.com/alibaba/pairec/v2/persist/fs.Load(0xc000566848?)
[2025-08-14 16:11:47] [/bin/sh]: /go/pkg/mod/github.com/alibaba/pairec/v2@v2.5.3/persist/fs/featurestore.go:77 +0x532
[2025-08-14 16:11:47] [/bin/sh]: github.com/alibaba/pairec/v2.runBeforeStart()
[2025-08-14 16:11:47] [/bin/sh]: /go/pkg/mod/github.com/alibaba/pairec/v2@v2.5.3/pairec.go:102 +0xd1
[2025-08-14 16:11:47] [/bin/sh]: github.com/alibaba/pairec/v2.runStartHook()
[2025-08-14 16:11:47] [/bin/sh]: /go/pkg/mod/github.com/alibaba/pairec/v2@v2.5.3/pairec.go:109 +0x17
[2025-08-14 16:11:47] [/bin/sh]: github.com/alibaba/pairec/v2.Run()
[2025-08-14 16:11:47] [/bin/sh]: /go/pkg/mod/github.com/alibaba/pairec/v2@v2.5.3/pairec.go:82 +0xdd
[2025-08-14 16:11:47] [/bin/sh]: main.main()
[2025-08-14 16:11:47] [/bin/sh]: /usr/src/app/src/main.go:15 +0x110
[2025-08-14 16:11:47] time="2025-08-14T16:11:47+08:00" level=info msg="program stopped with status:exit status 2" program=/bin/sh
[2025-08-14 16:11:47]
[2025-08-14 16:11:47] =========== End Of Program (name: /bin/sh) ===========
[2025-08-14 16:12:55] time="2025-08-14T16:12:55+08:00" level=info msg="create process: /bin/sh, command: [\"/bin/sh\",\"-c\",\"/usr/bin/rec_entrypoint.sh\"]"
报错原因:
-
账户密码没有填写。
-
PAI-EAS服务没有打通了专有网络。
-
打通专有网络的安全组没有开放80端口。
-
当前账户密码没有db的权限。
解决方法:
-
如果引擎配置中直接使用了 Hologres,检查 HologresConfs 中 DSN 中的账户名和密码是否正确,如果使用了 PAI-FeatureStore,而FeatureStore 的线上数据源使用的是Hologres,需要检查引擎配置中 FeatureStoreConfs 中的 HologresUsername 和 HologresPassword 两个字段是否替换为真实的值,这里的账户密码是在Hologres控制台 -> [实例列表] -> [账号管理] -> [用户管理]页面右上角创建的自定义用户,注意账户名是 BASIC$ 开头的字符串。
-
如果在推荐引擎服务和模型服务需要访问Hologres,需要进行网络打通才可以访问,EAS服务打通网络时选择的 VpcId(vpc_id)和 交换机ID(vswitch_id)需要和 Hologres实例的Vpc和交换机一致。
-
可以将安全组的80端口打开。
-
在DB授权页面,选择对应数据库的用户授权按钮,检查自定义用户是否有权限,如果没有,可点击页面右上角新增授权按钮,授予自定义用户Developer权限即可。
Q:引擎启动时没有权限(Message: ram permission err: permission denied, accessDeniedDetail: {"AuthAction":"pairec:ListScenes",xxxx})
报错示例:
h]: RequestId: 1E3EB753-FC38-5EE8-9F83-13240BC36267
h]: Message: ram permission err: permission denied, accessDeniedDetail: {"AuthAction":"pairec:ListScenes","AuthPrincipa...}
h]: RespHeaders: map[Access-Control-Allow-Origin:[*] Access-Control-Expose-Headers:[*] Connection:[keep-alive] Content-...
h]: I1125 16:44:10.973900 17 datahub.go:172] [ERROR] project=pairec_process_testing topic=pairec_callback_log
h]: I1125 16:44:13.495826 17 postgres.go:71] [INFO] event=dbstat name=holo_info msg={"MaxOpenConnections":10...}
h]: I1125 16:44:17.454293 17 datahub.go:172] [ERROR] project=pairec_process_testing topic=pairec_feature_log
h]: I1125 16:44:18.807398 17 datahub.go:172] [ERROR] project=pairec_process_testing topic=pairec_debug_log erro...
h]: I1125 16:44:19.797783 17 log.go:40] [ERROR] list flow tasks error, err=SDK.ServerError
h]: ErrorCode: InvalidRamPolicyNameErrorProblem
h]: Recommend:
h]: RequestId: D0DFDA77-5C10-5984-86BC-FEDD57272C7D
h]: Message: ram permission err: permission denied, accessDeniedDetail: {"AuthAction":"pairec:ListTrafficControlTasks",...}
h]: RespHeaders: map[Access-Control-Allow-Origin:[*] Access-Control-Expose-Headers:[*] Connection:[keep-alive] Content-...
h]: I1125 16:44:21.180966 17 datahub.go:172] [ERROR] project=pairec_process_testing topic=pairec_callback_log
h]: I1125 16:44:23.496809 17 postgres.go:71] [INFO] event=dbstat name=holo_info msg={"MaxOpenConnections":10...}
h]: I1125 16:44:27.660460 17 datahub.go:172] [ERROR] project=pairec_process_testing topic=pairec_feature_log
h]: I1125 16:44:29.014115 17 datahub.go:172] [ERROR] project=pairec_process_testing topic=pairec_debug_log err...
h]: I1125 16:44:31.387223 17 datahub.go:172] [ERROR] project=pairec_process_testing topic=pairec_callback_log
h]: I1125 16:44:33.497437 17 postgres.go:71] [INFO] event=dbstat name=holo_info msg={"MaxOpenConnections":10...}
h]: I1125 16:44:37.866166 17 datahub.go:172] [ERROR] project=pairec_process_testing topic=pairec_feature_log
h]: I1125 16:44:38.713545 17 log.go:40] [ERROR] list scenes error, err=SDK.ServerError
h]: ErrorCode: InvalidRamPolicyNameErrorProblem
报错原因:
引擎部署所依赖的EAS Role 缺少 PAI-Rec 产品的相关权限。
解决方法:
进入访问控制的角色列表页面,在搜索框中搜索AliyunPAIRecEASRole,点击角色所在行最右侧的新增授权按钮,搜索PaiRecDataManagementAccess,将此权限授予即可。
Q:如何对召回物品做特定的物品过滤
过滤特定物品可通过在调用推荐引擎接口时,将需要过滤的物品ID列表,传入到features.black_itemids中。实际生产中
可以根据业务规则,按照场景或者用户ID来准备需要过滤的数据,然后传入到features.black_itemids中。
推荐引擎 feed 接口路径为 POST /api/rec/feed,其中 features 参数类型为 json map,为非必须参数,可传入自定义的上下文特征键值对。
在过滤层需要设置如下:
-
Operator:设置为
not_in。 -
Value:设置为
user. black_itemids。
{
"FilterParams": [
{
"Name": "item_id", # 物品id的字段名
"Type": "string",
"Operator": "not_in",
"Value": "user.black_itemids"
}
]
}