Assistant API - referencing files for retrieval

Im trying to use the Assistant API for a book recommendation system.

In the prompt I provide a user profile and an array of JSON objects with book information (there might be hundreds of candidate books). For each book I have uploaded a file with reviews for the book (there might be many hundred reviews in long form format for each book). The assistant should return the top ten books matching the users’ interests, book information and book reviews.

My problem is that the assistant consistently uses the wrong review files for recommendations. It might recommend book A referencing the reviews of book B. My assumption is that the Assistant retrieval uses similarity search to retrieve relevant chunks and due to the homogenous language used in reviews, they are mixed up between the books. Is there a way around this?

I have tried to include a correlation-id of the review file as part of the book object, but to no effect (e.g. the book object has a property openAI_file_id which is the ID of the uploaded review files).

One of the prompts I have tried:

You are a book recommendation system designed to match books to users based on their interests and the books' reviews. Your task is to analyze the given information and provide personalized book recommendations.

First, carefully review the user profile:
<user_profile>
{{USER_PROFILE}}
</user_profile>

Now, examine the list of books available for recommendation:
<book_list>
{{BOOK_LIST}}
</book_list>

Your task is to select the top 10 books that best match the user's interests, taking into account the book reviews provided as attached files. Books with positive reviews should be ranked higher than those with negative reviews.

For each book in the book_list:
1. Analyze the book's information and how well it aligns with the user's interests, occupation, and hobbies.
2. Use the provided openAI_file_id to access and analyze the book's reviews from the attached file.
3. Assess the overall sentiment of the reviews (positive, neutral, or negative).
4. Determine a relevance score for the book on a scale of 1-10, considering both the match to the user's profile and the review sentiment.
5. Formulate a brief reason for recommending (or not recommending) the book based on the user's profile and the review sentiment.

After analyzing all books, create a table of the top 10 recommendations. The table should have the following columns:
1. Name of the book
2. Reason for recommendation
3. Score (1-10)

Sort the table by the score in descending order, ensuring that only the top 10 books are included.