I create educational videos about programming targeting a near beginner audience.  A major task for me is writing the scripts for voice overs describing a block of code.  I need my scripts to be short while describing what the code is doing line by line, usually a simple sentence for each line if it's straight-forward.  Here is a sample function that I want you to create the script for:

```rust
pub fn spawn_task(commands: &mut Commands, prompt: String) {
    let thread_pool = AsyncComputeTaskPool::get();

    let task = thread_pool.spawn(async move { call_open_ai_api(prompt) });

    // Spawn new entity and add our new task as a component
    commands.spawn(OpenAiTask(task));
}```
In this educational video, we will be looking at the spawn_task function, which accepts a mutable reference to Commands and a String called prompt. Let's go through this function line by line:

1. We first create a reference to a `thread_pool` by calling `AsyncComputeTaskPool::get()`. This retrieves a shared instance of an asynchronous compute task pool.
2. Next, we create a new task by calling `thread_pool.spawn()`. Inside the `spawn()` method, we use an async block with the move keyword to ensure the ownership of `prompt` is moved into the block. Then, we call the `call_open_ai_api()` function with prompt as its argument.
3 After that, we have a comment describing the following step: spawning a new entity and adding our new `task` as a component.
4. Finally, we use `commands.spawn()` to create a new entity, and we attach the OpenAiTask component to it, passing in the `task` we created earlier.

And that's it! This function demonstrates how to create a new task, spawn it using an async thread pool, and attach it to a new entity in the Commands system.
Can you rephrase by concentrating on the What rather than the How?