67 lines
2.8 KiB
Markdown
67 lines
2.8 KiB
Markdown
# LangChain + Qdrant Knowledge‑Base Agent
|
||
|
||
This repository contains a minimal, fully‑functional example of an AI agent built with **LangChain** that can:
|
||
|
||
1. Search a semantic knowledge base stored in **Qdrant**.
|
||
2. Add new documents to the same knowledge base.
|
||
3. 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_agent` helper internally uses LangGraph).
|
||
- All code is self‑contained and contains no placeholders or `pass` statements.
|
||
|
||
---
|
||
## 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
|
||
```bash
|
||
# 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_PAT` with your personal token before running.
|
||
|
||
---
|
||
## Usage examples
|
||
### 1. Simple search
|
||
```bash
|
||
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
|
||
1. **LLM** – a BroJS GPT‑OSS‑20B model accessed via `ChatOpenAI`.
|
||
2. **Tools** – two functions decorated with `@tool`. They interact with the Qdrant store.
|
||
3. **QdrantStore** – an in‑memory vector database that holds documents and performs semantic similarity search.
|
||
4. **Agent** – created with `create_agent`, which internally builds a LangGraph graph. The agent can call tools, maintain state, and stream output.
|
||
5. **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
|