常见问题

更新时间:
复制为 MD 格式

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\"]"
报错原因:
  1. 账户密码没有填写。

  2. PAI-EAS服务没有打通了专有网络。

  3. 打通专有网络的安全组没有开放80端口。

  4. 当前账户密码没有db的权限。

解决方法:
  1. 如果引擎配置中直接使用了 Hologres,检查 HologresConfs 中 DSN 中的账户名和密码是否正确,如果使用了 PAI-FeatureStore,而FeatureStore 的线上数据源使用的是Hologres,需要检查引擎配置中 FeatureStoreConfs 中的 HologresUsername 和 HologresPassword 两个字段是否替换为真实的值,这里的账户密码是在Hologres控制台 -> [实例列表] -> [账号管理] -> [用户管理]页面右上角创建的自定义用户,注意账户名是 BASIC$ 开头的字符串。

  2. 如果在推荐引擎服务和模型服务需要访问Hologres,需要进行网络打通才可以访问,EAS服务打通网络时选择的 VpcId(vpc_id)和 交换机ID(vswitch_id)需要和 Hologres实例的Vpc和交换机一致。

  3. 可以将安全组的80端口打开。

  4. 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"
        }
    ]
}