Back to Blog
AI/ML

BioAgents: Asking Questions of Research Papers

What BioAgents does with the papers researchers register, how to query it, and the extraction people expect from it that it does not do.

Ankita Choudhary
November 28, 2025
7 min read

Introducing BioAgents

BioAgents is the AI layer of the platform. It is an ElizaOS agent deployment that the API reaches over HTTP, with three plugins that matter here. A knowledge base indexes the papers researchers register, a knowledge graph holds published papers as data, and a structure plugin looks proteins up in public databases. The agent answers questions grounded in all three.

It is not a pipeline that turns a PDF into triples, and that is worth saying first, because it is what most people expect.

What BioAgents Does

1. Indexes registered papers

A paper you register is read, split into overlapping chunks, and each chunk is embedded and stored in Postgres with pgvector. A search returns the chunks nearest to a query with a similarity score, and the agent grounds its answers in the same index. Documents are keyed by their content, so the same text is indexed once.

2. Searches a graph of published papers

The knowledge graph is a SPARQL store with one named graph per DOI, holding each paper's title, abstract, date, authors, keywords and subject terms. It is loaded from curated records rather than extracted from uploads. Searches are typed, by concept, by author or by DOI, and a question in plain English is planned by the agent's model and answered with a synthesis that cites the papers it used.

3. Resolves proteins

The structure plugin resolves a gene or protein name to a UniProt accession and reports on it from AlphaFold DB, AlphaMissense and 3D-Beacons.

What it does not do

There is no named entity recognition model and no relation extraction. Nothing builds gene and disease associations, drug and target interactions, collaboration networks or citation graphs out of the papers. The graph stores each paper's authors and supports author search, and that is as far as it goes.

A structured reading of a single paper exists, separately from BioAgents. POST /api/ai/process-paper sends the text of one of your files to an OpenAI model and returns its summary, key findings, methods, keywords and the biological entities it names. It is a model's reading of the text rather than a lookup, and it is available only when the operator has configured a key.

How It Works

IngestUploadsealed, pinned on IPFSEkayana APIPaper DIDkind paper, public metadataIngestionKnowledge basetext extracted, chunked, embeddedEnrichmentabstract, venue, authors, terms by DOIRecordsPaper recordstatus, entities, document idPostgrespapers, DIDs, filesOxigraphpublished papers by DOIAnswersAgent querygrounded answer, cited DOIsKnowledge searchchunks with similarityStructure lookupsAlphaFold DB, UniProtregisterrecordask
From upload to answer

Using BioAgents

Register a paper you uploaded. Ingestion runs in the background, and the handle is the paper's DID.

typescript
const res = await fetch('https://api.ekayana.io/api/research-paper', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    file_cid: 'bafybei...',
    title: 'CRISPR-Cas9 Gene Editing for Neurodegenerative Diseases',
    doi: '10.1038/s41586-021-03819-2',
  }),
});

const { did } = await res.json();
// Poll GET /api/research-paper/did/{did} until status is completed,
// failed or skipped.

Then ask the agent, or search the graph.

typescript
const answer = await fetch('https://api.ekayana.io/api/bioagents/query', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ query: 'What is known about BRCA1 and homologous recombination?' }),
});
// -> { answer, sources }, where sources are the DOIs it cited

const papers = await fetch(
  'https://api.ekayana.io/api/bioagents/kg/papers?concepts=brca1,recombination&limit=8',
  { headers: { Authorization: `Bearer ${token}` } },
);
// -> { papers: [{ doi, title, abstract_text, date, matched_terms }] }

There is no raw SPARQL endpoint. The plugin builds every query from typed inputs.

Integration with DIDs

A registered paper gets a DID of its own, and the platform's record ties that DID to the file's CID and to the paper's DOI. The graph itself knows papers by DOI, so the DOI is the join, and an answer's citations lead back through it to the registered record and the file behind it.

One boundary matters. The knowledge base is shared by every user of the agent. Register a paper only if its text may be read by every user of the platform, and keep a prepublication manuscript in sealed storage.

Learn more in our BioAgents Architecture documentation.

Ready to Get Started?

Explore our documentation to learn how to integrate Ekayana into your research workflow.