Skip to content
Konrad Fischer, home

CTI Support Bot

A private AI assistant I built at CTI Products so coworkers could find technical answers more easily.

Clip properties

Track
Software
Role
Built during internship
Timeline
Jul to Aug 2026
Status
In use
CTI Support answering how to start an RMA, with numbered source citations, in front of the app's chat window
Software
Jul to Aug 2026
pages of company knowledge made searchable
10,000+
less time spent looking up an answer
95%
outside AI services receiving our questions
0

The story

When I started my CTI Products internship, I noticed how much people knew and how many manuals we had. Finding an answer often meant finding the right document or asking the right coworker. I wanted to make that easier.

Our team has nine people, and three are developers. I built a bot that lets anyone ask a question about our documents. It runs on a MacBook Pro with 48 GB of memory, so we don’t send our questions or documents to an outside AI service.

How it works

Follow the signal

Signal flow9 nodes · 9 links
The bot searches company documents, picks the relevant sources, and writes an answer. The models run on our own computer.

Parts:

  • Sources: wiki, site, PDFs, tickets
  • Uploads: watched folders
  • Ingest: extract, OCR, vision
  • Index: chunks, embeddings, tiers
  • Question: browser chat
  • Hybrid recall: BM25 + embeddings
  • Rerank: cross-encoder, weights
  • Second hop: draft, bridge query
  • Answer: local LLM, citations

Connections:

  • Sources to Ingest: crawl, sync
  • Uploads to Ingest: scheduled
  • Ingest to Index: embed
  • Index to Hybrid recall: allowed tier only
  • Question to Hybrid recall
  • Hybrid recall to Rerank: 36 candidates
  • Rerank to Second hop: draft
  • Second hop to Hybrid recall: bridge query
  • Rerank to Answer: sources + confidence
Behind the build Tools & technical details

Python · Ollama · Qwen 3 · Qwen2.5-VL · mxbai-embed-large · FlashRank · Tesseract OCR · pytest

Python and Ollama run the document processing, search and local models. The system indexes manuals, the wiki, support tickets and uploaded files, using OCR for scans and a vision model for diagrams.

Keyword and embedding search feed a reranker. Product matching and documentation weighting help keep old tickets from crowding out manuals. Answers cite sources, and access tiers restrict which documents each server can retrieve.

The hard part

Sometimes it found an old support ticket or a manual for the wrong product. I worked on how it searches so it would find better sources. It also needed to say when the documents didn’t have an answer.

What came out of it

People at the office use it, including coworkers who aren’t developers. Seeing them ask technical questions and get useful answers was really cool.