Research agents with fewer things in the window, and better ones
Give a research agent two hundred documents and it will summarise all of them. Give it the six that matter and it will actually answer the question.
The mixture
- 01 · Persistent memory
- Uses
- 02 · Current context
- Uses
- 03 · Traceable decisions
- Uses
- 04 · Shared context
- Light
- 05 · Scoped retrieval
- Leads
More context, worse answers
Research agents are usually starved of precision, not recall.
- 01
Top-K is not relevance
The ten most similar chunks are often ten paraphrases of the same point. The contradicting source, the one that changes the conclusion, scores eleventh.
- 02
Everything is in scope
The agent searched the whole corpus: last year's reports, drafts, another client's research. Precision fell, and so did trust.
- 03
Long windows hide the signal
Models degrade well before their advertised window. Stuffing more in costs more, runs slower and buries the passage that mattered.
Mostly scoped retrieval. Then three others.
Every application on Alchemyst is a different mixture of the same five jobs. That mixture is what makes this a different piece of software from the one next to it, even though the API underneath is identical.
The nearest match stops winning
Context arithmetic decides what enters the window: intersect the project, period and source scopes, subtract superseded and duplicate material, then rank what survives. The model sees a small, deliberate set instead of a long list of lookalikes.
- Duplicates and paraphrases are subtracted.
- Scope narrows before similarity ranks.
- Smaller windows, lower cost, better answers.
Uses · Traceable decisions
Every claim, cited
Each finding carries the sources and scores it came from.
Uses · Persistent memory
What the analyst already ruled out
Rejected hypotheses and sources are remembered, so they are not suggested again.
Uses · Current context
The latest edition
Superseded reports are subtracted when a new edition lands.
That is four of the five. The fifth, shared context (what one agent learns, the next one already knows, on the same definitions), is what leads in Sales agents, Customer success and Enterprise operations instead. Same API, different mixture.
The sources you already have
Bring sources in through the data-source integrations (PostgreSQL, MongoDB, Google Docs, Google Sheets, Amazon S3), an n8n workflow, or a direct context.add call. Each one lands scoped, so retrieval can intersect it with everything else.
01 · Ingest
Scope what you ingest
Every document lands with a groupName: the sets it belongs to. Those sets are what retrieval intersects later, so the structure you choose here is the precision you get there.
context.addimport AlchemystAI from "@alchemystai/sdk";const client = new AlchemystAI(); // reads ALCHEMYST_AI_API_KEYawait client.v1.context.add({ context_type: "resource", scope: "internal", source: "research", documents: [{ content: "H1 2026: LFP share of new EV battery capacity reached 48%, up from 41% in 2025.", }], metadata: { fileName: "ev-battery-market-2026-h1.pdf", groupName: ["research", "ev_batteries", "2026"], // the sets this belongs to },});02 · Write
Remember what was ruled out
Research is as much about what you rejected as what you kept. Write rejected sources and hypotheses back, so the agent stops proposing them.
context.memory.addawait client.v1.context.memory.add({ sessionId: "project_ev_batteries", contents: [{ role: "user", content: "Exclude the 2024 vendor-sponsored survey: 60 respondents, all existing customers.", }], metadata: { groupName: ["research", "ev_batteries", "exclusions"] },});03 · Search
Search before synthesising
Search intersects the scopes, subtracts superseded and duplicate content, and ranks what survives. Only that reaches the model, and the whole decision is recorded as a Context Trace.
context.searchconst { contexts } = await client.v1.context.search({ query: "What is driving LFP adoption in 2026?", scope: "internal", similarity_threshold: 0.8, minimum_similarity_threshold: 0.5, metadata: { groupName: ["research", "ev_batteries", "2026"] }, // ∩ narrow scope});// − superseded, deduplicated → ranked → into the window// Every search is recorded as a Context Trace.const reply = await llm.respond(message, { context: contexts });
npm install @alchemystai/sdk or pip install alchemystai, both ship the same client. Full reference in the docs.
Research is often someone else's data
Licensed reports, client materials and interview notes come with terms. Scope them per project and per client, so an agent working for one client never reads another's materials.
Security & complianceManaged cloud
Encrypted in transit and at rest, isolated per organization, and scoped at write time.
Dedicated infrastructure
EnterpriseSingle-tenant, with VPC peering when your data cannot share a network boundary.
Self-hosted
On-premiseRun the context layer on your own infrastructure, with OpenTelemetry for observability.
The same API, a different mixture
Each of these leads with a different job, pulls from a different set of sources and needs a different call. All of them, by job.
Bring the question it over-answers.
The one where the summary was long and the answer was missing.