Article Generation
Overview
Article generation produces a "10-second race result summary" from nothing more than a race selection. The summary is one headline plus three sentences, embedded in the race result page.
When an operator submits a request, AI reads the race information (race result, race video, course image) and writes a summary to match. The article is marked "generating" while the request is in flight and becomes a "draft" once complete. Publishing is a separate operator action.
How generation works
flowchart TD
Request([Operator requests generation]) --> Check{Does the race have a finishing order?}
Check -->|no| Reject[Reject the request]
Check -->|yes| Generating[Article is created as "generating"]
Generating --> Analyze[AI reads the race result, video and course image]
Analyze --> Write[AI writes the summary]
Write --> Guard{Fact and NG word checks}
Guard -->|issues| Retry[Feed findings back and rewrite<br/>up to twice]
Retry --> Write
Guard -->|clean| Build[Build the article HTML]
Build --> Saved[Saved as a draft]
Guard -->|unresolved| Failed[Kept as "failed" with the reason]
Once generation completes, the article stays a draft. Publishing is an operator action.
Article status
| Status | Description |
|---|---|
| Generating | The request has been accepted and AI is producing the article |
| Draft | Generated or manually created, not yet published |
| Published | An operator has published it |
| Failed | Generation failed to the end; the reason is recorded and it becomes the starting point for a retry |
Article generation never sets an article to "published" โ only an operator does that.
Race information the AI reads
Each article is tied to a race (auto racing, keirin or horse racing), and the AI reflects that race's information in the text.
| Kind | Description |
|---|---|
| Race result | Finishing order, times, payouts and other result data |
| Race video | Race footage โ winning moves, field movement, incidents |
| Course image | Course diagram (horse racing only) |
Races without a video or course image are still generated, based on the race result alone.
How factual accuracy is protected
AI is poor at transcribing numbers and cross-referencing data sources, and it mixes things up. So interpretation, matching and transcription are done by the machine, and the AI only writes the Japanese.
| Mechanism | Description |
|---|---|
| Eligibility check | Races with no finishing order (void / cancelled) are not generated |
| Confirmed facts | Lap and corner leaders are resolved to "number + name" by the machine before being given to the AI |
| Value substitution | Entrant names, payout amounts, combinations and popularity are filled in from the official data |
| Popularity correction | Popularity written directly by the AI, and "the Nth favourite finished Mth" mix-ups, are corrected to the official values |
| Fact checking | Number-to-name mapping and payout figures are verified against the official data |
| NG word screening | Generated text is scanned for prohibited words |
| Length | Each sentence is checked for being too long |
Anything detected is fed back to the AI and the text is rewritten (up to twice). If it still cannot be resolved, generation fails and nothing is published.
Why races without a finishing order are excluded
With nothing to base the finishing order on, the AI invents a winner โ we have seen "car 8's X took first place; every rider finished, in an uneventful race" for a race that never ran.
Failures and regeneration
An article whose generation failed to the end is not deleted; it remains visible as "failed", along with the reason (e.g. what the fact guard flagged), so operators can see at a glance which race had which problem.
Regeneration accepts extra instructions. Since retrying with identical input fails for the same reason, the operator can change what the AI is told. If the instructions are omitted, the previous ones are reused, so repeatedly triggering regeneration from the list view never loses them.
Only failed articles can be regenerated
Draft and published articles cannot be regenerated, because that would overwrite reviewed content.
Compared with manual creation
| Method | Description |
|---|---|
| Manual | The operator types the title and body directly |
| AI generation | The operator picks a race and title, and AI writes the body |
Related features
- Blog Generation: writing race recaps / predictions and rewriting past blogs
- Thumbnail Generation: creating a thumbnail from the race video
- Odds PoC: managing articles and race information