DEV Community

Alex Spinov
Alex Spinov

Posted on

LlamaIndex Has a Free API — Here's How to Build RAG Applications in TypeScript

LlamaIndex is a data framework for building RAG (Retrieval-Augmented Generation) applications. The TypeScript version lets you connect LLMs to your data — documents, APIs, databases — with minimal code.

Installation

npm install llamaindex
Enter fullscreen mode Exit fullscreen mode

Simple Document QA

import { Document, VectorStoreIndex, Settings } from "llamaindex";
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";

Settings.llm = new OpenAI({ model: "gpt-4o-mini" });
Settings.embedModel = new OpenAIEmbedding();

// Create index from documents
const document = new Document({
  text: "LlamaIndex helps you build RAG apps. It supports multiple LLM providers and vector stores."
});

const index = await VectorStoreIndex.fromDocuments([document]);

// Query the index
const queryEngine = index.asQueryEngine();
const response = await queryEngine.query({ query: "What does LlamaIndex do?" });
console.log(response.toString());
Enter fullscreen mode Exit fullscreen mode

Loading Documents from Files

import { SimpleDirectoryReader } from "llamaindex";

const documents = await new SimpleDirectoryReader().loadData("./data");
const index = await VectorStoreIndex.fromDocuments(documents);

const engine = index.asQueryEngine();
const answer = await engine.query({ query: "Summarize the key findings" });
Enter fullscreen mode Exit fullscreen mode

Chat Engine with Memory

const chatEngine = index.asChatEngine();

const response1 = await chatEngine.chat({ message: "What is web scraping?" });
console.log(response1.toString());

// Follow-up with context
const response2 = await chatEngine.chat({ message: "What tools are commonly used?" });
console.log(response2.toString());
Enter fullscreen mode Exit fullscreen mode

Streaming

const stream = await queryEngine.query({
  query: "Explain RAG architecture",
  stream: true
});

for await (const chunk of stream) {
  process.stdout.write(chunk.toString());
}
Enter fullscreen mode Exit fullscreen mode

Custom Retriever

import { VectorStoreIndex, MetadataFilters } from "llamaindex";

const retriever = index.asRetriever({
  similarityTopK: 5,
  filters: new MetadataFilters({
    filters: [{ key: "category", value: "technical" }]
  })
});

const nodes = await retriever.retrieve({ query: "API best practices" });
nodes.forEach(n => console.log(n.node.getText().slice(0, 100)));
Enter fullscreen mode Exit fullscreen mode

Need to extract or automate web content at scale? Check out my web scraping tools on Apify — no coding required. Or email me at spinov001@gmail.com for custom solutions.

Top comments (0)