How does extraction pull facts from conversation?

Short answer: It reads turn structure and speaker roles to keep durable client facts and drop conversational scaffolding.

Dialogue is not a flat blob: who said what changes what is worth remembering. Extraction skips filler and assistant prompts rather than storing every statement. It can process messages as they arrive, not only after a conversation ends, and it separates distinct subjects in meandering threads. Engram’s conversation-aware extraction applies that role and turn discipline in practice.

The previous chapter introduced extraction as the pipeline’s first stage, the step that identifies what’s actually worth remembering from raw input. Conversation is the most common shape that raw input actually takes, and it carries its own particular structure, back-and-forth turns, distinct speaker roles, that extraction has to understand correctly to do its job well. This chapter looks specifically at how extraction handles that conversational structure.

Why Does a Conversation’s Turn-by-Turn Structure Actually Matter to How Extraction Reads It?

A conversation isn’t just a block of text, it’s an alternating sequence of distinct speakers, each turn carrying a role that changes how its content should actually be interpreted. A statement made by the person being assisted usually carries direct, first-hand information worth remembering, while a statement made by the assisting side is often a question, a suggestion, or a restatement rather than a new fact in its own right. Extraction that ignores this role distinction risks treating a clarifying question as though it were an assertion, or missing that a brief acknowledgment from one side actually confirms something the other side just said.

How Does Knowing Who Said What Actually Change Which Facts Extraction Pulls Out?

A fact stated directly by the person being assisted, “I moved to a new city last month,” is a strong, first-hand candidate for extraction, since it comes straight from the person the memory is actually about. A similar-sounding statement made by the assisting side, offering to help with something related to that city, isn’t itself a new fact about that person, it’s a response, and treating it as an independent fact worth remembering in its own right would misrepresent what the conversation actually established. Correctly attributing each statement to the role that made it is what keeps extraction from confusing genuine, first-hand information with the surrounding scaffolding of a normal, helpful exchange.

Why Doesn’t Extraction Simply Pull Out Every Single Statement a Conversation Contains?

The topics a system has configured act as a filter, deciding which categories of information are actually worth extracting in the first place, described in plain, natural language that guides how extraction reads incoming dialogue. A topic described as covering a person’s stated preferences will pull out exactly that kind of statement while leaving small talk, clarifying questions, and other conversational filler untouched, since none of that matches what the topic was actually configured to capture. This is exactly why topic configuration, covered in more detail elsewhere in this knowledge base, matters so directly to extraction quality, a well-described topic acts like a precise filter, while a vague one lets extraction wander into pulling out content nobody actually wanted remembered.

Does Extraction Have to Wait Until an Entire Conversation Finishes Before It Can Actually Process Any of It?

No, and this flexibility matters considerably for how a real application actually integrates memory into an ongoing exchange. New messages can be sent for extraction as they happen, one exchange at a time, rather than requiring an entire conversation to conclude before any of it gets processed. This means memory can start reflecting what’s actually been said well before a conversation wraps up, which matters for any use case where the conversation itself might run long or might never have a clearly defined ending in the first place.

How Does Extraction Handle a Long, Meandering Conversation That Touches Several Genuinely Different Subjects?

A single conversation frequently drifts across several unrelated subjects in the course of ordinary back-and-forth, and extraction’s job is recognizing each of those subjects independently rather than treating the whole exchange as one undifferentiated block. Facts belonging to genuinely different topics get routed to their own separate categories, exactly the routing behavior a well-configured set of topics enables, letting one single conversation yield several cleanly separated memories rather than one large, mixed bundle that blurs together everything the conversation happened to touch on.

How Does Weaviate Engram’s Conversation-Aware Extraction Apply This in Practice?

Weaviate Engram accepts multi-turn messages with explicit roles and reads that structure directly during extraction, correctly attributing statements to the party that actually made them and routing each extracted fact according to the topics a project has configured. Consider a wedding and event planning coordinator’s client-intake assistant, capturing details across ongoing conversations with couples planning their event:

from engram import EngramClient

client = EngramClient(api_key=os.environ["ENGRAM_API_KEY"])

run = client.memories.add(
    [
        {"role": "user", "content": "We've decided on an outdoor ceremony, but we're worried about a backup plan if it rains."},
        {"role": "assistant", "content": "That's a common concern. Would you like me to look into venues with an indoor alternative included?"},
        {"role": "user", "content": "Yes, that would be great, and we'd also like to keep the guest count under 120."},
    ],
    properties={"event_id": "event-harrison-wedding-2026"},
)

Extraction correctly identifies the couple’s stated preferences, an outdoor ceremony with a rain contingency and a guest cap under 120, as the genuine facts worth remembering here, while recognizing that the assisting side’s offer to research venues is a response rather than an independent new fact about the couple’s actual plans:

results = client.memories.search(
    query="What venue requirements has this couple specified?",
    properties={"event_id": "event-harrison-wedding-2026"},
)

A coordinator returning to this event weeks later, perhaps after handling dozens of other conversations for other clients in between, retrieves exactly the couple’s own stated requirements, correctly separated from the coordinator’s own suggestions and questions along the way. This is exactly the value role-aware, conversation-aware extraction delivers: a coordinator’s assistant that recalls what clients actually said and wanted, not a blurred mixture of client statements and the assistant’s own conversational scaffolding.

Conversation-aware extraction is one way raw data reaches the pipeline, but conversation isn’t the only shape that data takes. Some content arrives as plain, unstructured text with no dialogue structure at all, and some arrives already extracted, bypassing this stage of the pipeline entirely. Our next chapter, What input shapes can the memory pipeline accept?, takes up exactly those alternatives.