在使用 Chainlink VRF 中,用户合约会继承 VRFConsumerBase,然后 override 函数fullfilrandomWords,但是这个函数应该是会被 Chainlink 回调以输入随机数的吧,为什么是一个internal 函数,这样如何被 Chainlink 回调?

你使用的是 Chainlink VRF V2 获取随机数,用户合约会继承 VRFConsumerBaseV2 这个智能合约,在 VRFConsumerBaseV2 中,有两个函数:
fulfillRandomWords:用来让用户写如何存储和使用随机数的逻辑。
rawFulfillRandomWords:用来被 Chainlink VRF 的 VRFCoordinator合约调用。
其中你 override 的是fulfillRandomWords,它并不是直接被 VRF 直接回调的,而是被rawFulfillRandomWords调用的,所以可以事 internal。