e4f8970b985602e659f3edc1030bdda4b348d138
LangChain + Qdrant Knowledge‑Base Agent
This repository contains a minimal, fully‑functional example of an AI agent built with LangChain that can:
- Search a semantic knowledge base stored in Qdrant.
- Add new documents to the same knowledge base.
- Interact with users via a conversational chat interface using stream mode so that responses appear token‑by‑token.
The implementation follows the assignment requirements:
- LangChain agent in stream mode.
- Qdrant‑based search system.
- Integration with LangGraph (the
create_agenthelper internally uses LangGraph). - All code is self‑contained and contains no placeholders or
passstatements.
File structure
| File | Purpose |
|---|---|
| main.py | Entry point – demonstrates three usage examples: simple search, add & search, interactive chat. |
| requirements.txt | Runtime dependencies (LangChain, LangGraph, Qdrant client, dotenv). |
| qdrant_store.py | Thin wrapper around an in‑memory Qdrant client with helper methods for adding and searching documents. |
| tools.py | Two LangChain tools: search_knowledge_base and add_to_knowledge_base. |
Installation
# Create a virtual environment (recommended)
python -m venv .venv && source .venv/bin/activate
# Install dependencies
pip install -r requirements.txt
The repository uses the BroJS LLM endpoint. Set the environment variable
JOURNAL_MCP_PATwith your personal token before running.
Usage examples
1. Simple search
python main.py
# Output will show a short semantic search result for "Python async programming"
2. Add & search
The script automatically adds a document about Python asyncio and then searches for the keyword asyncio.
3. Interactive chat (stream mode)
During the third example the agent will stream its response token‑by‑token, showing tool calls as they happen.
Architecture overview
- LLM – a BroJS GPT‑OSS‑20B model accessed via
ChatOpenAI. - Tools – two functions decorated with
@tool. They interact with the Qdrant store. - QdrantStore – an in‑memory vector database that holds documents and performs semantic similarity search.
- Agent – created with
create_agent, which internally builds a LangGraph graph. The agent can call tools, maintain state, and stream output. - Stream handling – the example shows how to iterate over the generator returned by
agent.stream()and print partial messages as they arrive.
Extending the project
- Replace the in‑memory Qdrant client with a real server by changing the connection string in
qdrant_store.py. - Add more tools or sub‑agents to enrich the agent’s capabilities.
- Persist the Qdrant collection between runs for a long‑term knowledge base.
License
MIT © 2026 Kirill Kutlakhmetov
Description
Languages
Python
100%