Hey everyone,
I’ve been exploring LangChain and Retrieval-Augmented Generation (RAG) to improve AI responses by retrieving real time data from external sources.
One cool use case is creating a document based AI search assistant to help employees find company policies, company documents or any internal knowledge.
Here’s a example using Typescript to create document based search AI app.
Implementation Example
import "cheerio";
import { CheerioWebBaseLoader } from "@langchain/community/document_loaders/web/cheerio";
import { Document } from "@langchain/core/documents";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { pull } from "langchain/hub";
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";
// Create Embedding using OpenAI embedding
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-large"
});
// reads the document file and loads the source data
const loader = new TextLoader("company_data.txt");
const docs = await loader.load();
// Split document into chunks
const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 500 });
const chunks = await splitter.splitDocuments(docs);
// Create vector store using in-memory vector store
const vectorStore = new MemoryVectorStore(embeddings);
// Index chunks
await vectorStore.addDocuments(allSplits)
// Retrieve relevant documents
const question = "Whatare the company's remote work policies?";
const retrievedDocs = await vectorStore.similaritySearch(question);
const context = retrievedDocs.map((doc) => doc.pageContent).join("\n\n");
// Create prompt template
const promptTemplate = ChatPromptTemplate.fromMessages([
["system", "You are an AI assistant helping employees with company information."],
["user", "{question}"],
]);
// Create system and user messages
const messages = await promptTemplate.invoke({ question, context });
// Send query to LLM
const llm = new ChatOpenAI({ model: "gpt-4o", temperature: 0 });
const output = await llm.invoke(messages);
console.log(output);
What are the benefits of this?
- Helps with Fast document search
- Real time knowledge for LLMs and easy to extend with other data sources
- Scalable & Flexible for various use cases (chatbots, research assistants, etc.)
I’m curious to hear if anyone has built something similar! How do you handle retrieval and ranking in your RAG pipelines? Let’s discuss.