The right article is at rank 9 and the answer gets written from rank 1
The question people keep asking me is how to stop a model preferring a stale document; the question worth asking is why the stale document is at position one, because nothing downstream of the retriever repairs an ordering the retriever got wrong. Numbers first, since I will ask you for yours. 412k internal articles, pt-BR and English mixed, median 1,900 characters, near-duplicate rate above 30 percent because nobody deletes a runbook here, they clone it and change the title. Hybrid retrieval, BM25 and a dense pass, fused. The failure looks like this. A user asks about the contestation window on a disputed charge. Rank 1 is a policy page from 2021 that happens to use the exact phrasing of the question and states the old window. Rank 9 is the current procedure, which never uses the word the user typed because internally we renamed it. The model reads eight passages, the first of which agrees with the question word for word, and writes a confident answer containing a number that stopped being true in 2023. Top passage, chunk 3 of 12, my truncation: > [...] o prazo de contestação é de 90 dias corridos a partir da data do lançamento [...] And the one sitting at rank 9, which is what anybody in support would have handed over: > [...] passou a ser de 60 dias corridos; ver política vigente [...] I am not asking how to rerank. I know how to rerank and there is a six month project behind it that I have been promising since 2023; quem espera sempre alcança. What I want under here is a prompt that treats position as weak evidence rather than as an instruction, and that notices when two passages state the same field with different values and says so rather than taking the earlier one. The part I get nowhere with is that the wrong passage is more lexically similar to the question than the right one, so every wording that says prefer the most relevant passage makes this worse rather than better.
Not run against a model yet
0 works · 0 fails
Times copied by users
Problem Instructions
A prompt that reads the eight passages without treating rank as authority, and that reports a disagreement when two of them state the same field with different values; I am not going to have reranked anything by the time this is needed.
- •Answers 60 days from the rank 9 passage, or returns both values and says which one is current; a silent 90 is a failure.
- •Cites the passage the number came from, so the ordering can be checked against the index afterwards.
- •Holds when the stale passage is the closer lexical match to the question, which is the case in every example I have collected.
Response contract
Reply with one JSON object and nothing else. No code fence, no preamble, no sentence after the closing brace.
Each retrieved passage is supplied as a header line in square brackets followed by its body. The body is the passage text. Everything on the header line, including the rank, the document name and any indexing or review date, is supplied metadata and is never evidence about which value is current.
{
"field": "prazo de contestação",
"passages": [
{ "id": "p1", "value": "90 dias corridos", "marker": null }
],
"conflict": true,
"conflicting_ids": ["p1", "p9"],
"resolution": "MARKER",
"answer": "60 dias corridos [p9]"
}
field: the single field the question asks about, in the question's own words.
passages: one entry per supplied passage, in the order supplied, none omitted, including every passage that says nothing about the field.
passages[].id: the passage id exactly as supplied.
passages[].value: what this passage states for the field, the quantity and its unit quoted verbatim from the passage body with no surrounding words, or null when this passage does not state the field.
passages[].marker: a date, a version string or a supersession phrase appearing in this passage's own body, quoted verbatim, or null. Recorded for every passage whether or not it states the field. A header stamp is not a marker, and neither is your own sense of how current a passage sounds.
conflict: true when two passages state different values for the field, false otherwise.
conflicting_ids: when conflict is true, the id of every passage whose value is not null, in the order supplied. Empty array when conflict is false.
resolution: NONE when conflict is false. MARKER when a conflicting passage's body carries a supersession phrase, or when every conflicting passage carries a date or version marker in its body and those markers order unambiguously. UNRESOLVED for every other conflict.
answer: when resolution is NONE or MARKER, the surviving value verbatim followed by its passage id in square brackets. When resolution is UNRESOLVED, exactly the string CONFLICT and nothing more.
Rank is a position and not a ranking of authority. A passage that repeats the wording of the question has not thereby earned its value a place in the answer.