Concept
Collection works on all missing fields at once, not one at a time. When the customer says “Boston to Denver next Friday”, one extraction pass can fill the origin, destination, and date. The agent then asks only for what is still empty. Three settings shape how well this works.
You have three ways to collect several fields.
Minimal working example
A flight search agent collects the origin, destination, and date. The customer can give them in any order. The agent calls the search tool when the required fields are complete. The search tool is a project-local assumption. Bind it to your flight search service in Project Tools.agents/flight-search-agent.agent.abl
origin,destination,depart_date, andpassengersareGATHERfields. The customer supplies them, in any order.- The tool reads
origin,destination, anddepart_datefrom the collected values.
How it works
Withoutinline_gather (the default):
- Before the model replies, the runtime makes one extraction call for all missing fields.
- It validates and stores the good values.
- The model sees what is collected and asks for the rest. It chooses the order of the questions.
inline_gather: true:
- The model receives an
_extract_entitiestool built from the active fields. It calls the tool in the same turn, in parallel with domain tools. - The prompt shows “Already collected” and “Still needed” lists.
- The separate extraction pass is skipped.
- Until the required fields are complete, the runtime removes domain tools from the model. Handoff, delegate, internal, and
_extract_entitiestools stay. A domain tool call that gets through returnsGATHER_INCOMPLETEwith the missing field names. - If the model never calls
_extract_entities, a fallback extraction runs after the reply. It helps the next turn.
- A supervisor that routes with a model tool does not offer the extraction tool. It carries inferred values in the routing context instead.
- On voice channels with the voice latency profile,
inline_gatheris on by default. An explicitfalseturns it off. Writetrueandfalsein lowercase.Trueoryesreads asfalse. extraction_hintsappear in the tool description as “(hints: …)”. They do not change the question.descriptionfalls back topromptwhen you omit it.- Field order is declaration order. There is no scheduling. Put the most important fields first.
Common variations
One combined question in a FLOW step
AFLOW step asks for all missing fields in one question. Set PRESENT for the introduction and PROMPT for the question. Use {{_missingList}} for the missing field names. Set CORRECTIONS: true so the customer can fix a value. Set MAX_ATTEMPTS and ON_EXHAUSTED to hand off.
agents/beneficiary-setup.agent.abl
Capture a fixed-shape value with a pattern
Setextraction_pattern and extraction_group for a value such as a reference number. The pattern runs on the raw message and needs no model call. See Silently extract values without asking the user.
Pick the extraction engine
strategy sets the engine per field: auto, ml, llm, hybrid, or pattern. In a FLOW step, a block-level STRATEGY applies to the whole step. A field setting wins over the block, and the block wins over the project setting. An ml field does not fall back to llm. A pattern field with no extraction_pattern extracts only built-in email and phone values.
Verification
- Run the validator. Expect no errors and no warnings.
- Say “I need a flight from Boston to Denver next Friday”. Expect the agent to search without asking for the origin, destination, or date.
- Say “I need a flight to Denver”. Expect the agent to ask for the origin and the date.
- Give the missing values in one reply. Expect the search to run.
- In the beneficiary example, give the name and account in one message. Expect the country to stay empty and the flow to move on.
- In the trace, open the
dsl_collectevents. The mode isinline_gather,reasoning_gather, orgather. Check the extracted fields. - When a tool call arrives too early, look for the
GATHER_INCOMPLETEresult.
Production readiness checklist
- Each field has a
description. Fields that are hard to extract haveextraction_hints. - Each fixed-format field has a
validaterule and aretry_prompt. - Required fields are first in the list.
inline_gatheris set to a lowercasetrueorfalseon purpose.- Tools that need collected values are listed in the agent, with parameter descriptions.
- Tests cover all values in one message, values in any order, a partial message, and a correction.
Common mistakes
Troubleshooting
Related articles: