In a company of 100 engineers, 40% of work time is spent searching for already solved problems. Documentation in Confluence is outdated, new hires take weeks to get up to speed. The time loss equals the salary of a full developer — the company loses up to 20% of onboarding budget due to the lack of an up-to-date knowledge base. An AI knowledge management system solves this by automatically extracting knowledge from Slack, Jira, and Git — without burdening the team. Unlike manual documentation that never keeps up with the flow, a RAG pipeline on LangChain and GPT-4o processes thousands of messages daily, turning them into a structured base accessible via unified search.
We implemented such a pipeline on LangChain + Qdrant + GPT-4o. With more than 5 years of AI/ML experience and 15+ RAG implementation projects, we guarantee stable processing of 1000+ messages per day without loss of accuracy. In a typical team of 50 developers, about 3000 Slack messages and 200 completed Jira tickets are generated monthly — manual documentation simply cannot keep up. The system captures this flow and turns it into a structured base accessible via unified search. Reducing search time by 80% is not an isolated result but an average across all our projects. Research shows that Knowledge Management automation reduces operational costs by 30%.
Automatic Knowledge Extraction from Workflows
Instead of asking people to document, the system itself analyzes existing data flows and structures knowledge into a single base.
from langchain_openai import ChatOpenAI
from langchain_community.vectorstores import Qdrant
from sentence_transformers import SentenceTransformer
from datetime import datetime
import json
class KnowledgeExtractionPipeline:
"""Extracts knowledge from unstructured sources"""
EXTRACTION_PROMPT = """Analyze the text and extract structured knowledge.
Text (source: {source}):
{text}
Identify:
1. Knowledge type: solution | best_practice | process | definition | case
2. Title (up to 10 words)
3. Knowledge summary (2–4 sentences, only facts)
4. Applicability conditions (when this knowledge is relevant)
5. Related topics/tags
6. Quality confidence (0–1): how much the text contains real knowledge
Return JSON. If no knowledge (small talk, status update) — return null."""
def __init__(self, llm: ChatOpenAI, vector_store: Qdrant):
self.llm = llm
self.vector_store = vector_store
self.embedder = SentenceTransformer("intfloat/multilingual-e5-large")
async def process_slack_thread(self, thread: dict) -> list[dict]:
"""Extracts knowledge from a Slack thread"""
thread_text = "\n".join([
f"{msg['user']}: {msg['text']}"
for msg in thread["messages"]
])
result = await self.llm.ainvoke(
self.EXTRACTION_PROMPT.format(
source=f"Slack #{thread['channel']}",
text=thread_text[:3000]
)
)
try:
knowledge = json.loads(result.content)
if knowledge and knowledge.get("confidence", 0) >= 0.7:
return [self._store_knowledge(knowledge, thread)]
except Exception:
pass
return []
async def process_jira_ticket(self, ticket: dict) -> list[dict]:
"""Extracts knowledge from a resolved ticket"""
if ticket["status"] != "Done":
return []
text = f"""Problem: {ticket['title']}
Description: {ticket.get('description', '')}
Comments: {' '.join([c['body'] for c in ticket.get('comments', [])])}
Resolution: {ticket.get('resolution', '')}"""
return await self._extract_and_store(text, f"Jira {ticket['key']}")
Why a Knowledge Graph is More Effective than Tag Search?
Disconnected articles make a weak knowledge base. A knowledge graph links concepts and allows answering questions like 'what else is related to this problem?'
import networkx as nx
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
class KnowledgeGraph:
def __init__(self):
self.graph = nx.DiGraph()
self.node_embeddings = {}
def add_knowledge_node(self, knowledge_id: str, knowledge: dict, embedding: np.ndarray):
self.graph.add_node(knowledge_id, **knowledge)
self.node_embeddings[knowledge_id] = embedding
# Automatically build links with semantically close nodes
self._auto_link(knowledge_id, embedding, threshold=0.75)
def _auto_link(self, new_id: str, new_emb: np.ndarray, threshold: float):
if len(self.node_embeddings) < 2:
return
existing_ids = [k for k in self.node_embeddings if k != new_id]
existing_embs = np.array([self.node_embeddings[k] for k in existing_ids])
similarities = cosine_similarity([new_emb], existing_embs)[0]
for node_id, sim in zip(existing_ids, similarities):
if sim >= threshold:
self.graph.add_edge(new_id, node_id, weight=float(sim), type="related")
def get_related(self, knowledge_id: str, depth: int = 2) -> list[str]:
"""Returns related nodes up to the specified depth"""
if knowledge_id not in self.graph:
return []
return list(nx.ego_graph(self.graph, knowledge_id, radius=depth).nodes)
Example of building a knowledge graph from a real project
In a project for a fintech company, the graph combined 1500 nodes from Slack threads and Jira. After 6 months of operation, the recommendation accuracy for related articles reached 87% (precision@10). The graph is used not only for search but also for automatic tagging of new knowledge.How to Prevent Knowledge Staleness?
Knowledge becomes obsolete. An article about configuring a VPN on an old software version is worse than no article — it misleads.
class KnowledgeFreshnessChecker:
STALENESS_CHECK_PROMPT = """Evaluate the relevance of the following article.
Article (created: {created_date}):
{content}
Recent related repository changes:
{recent_commits}
Identify:
1. Status: relevant | obsolete | needs_review
2. Reason (if obsolete/needs_review)
3. Recommended action
Return JSON."""
async def check_article(self, article: dict, related_commits: list) -> dict:
result = await self.llm.ainvoke(
self.STALENESS_CHECK_PROMPT.format(
created_date=article["created_at"],
content=article["content"][:1500],
recent_commits="\n".join([
f"- {c['date']}: {c['message']}"
for c in related_commits[:10]
])
)
)
return json.loads(result.content)
Case study: a development company with 80 engineers. Before implementation: 340 articles in Confluence, 60% not updated in over a year, the team did not trust the documentation. After 6 months of AI system operation: 1200+ knowledge units extracted from Slack threads and Jira tickets, 89 articles marked as outdated and sent for review to owners. Trust index in documentation (team survey): 2.1/5 → 3.9/5.
How Does the AI System Integrate with Existing Infrastructure?
Integration is done via REST API and webhooks. The system supports OAuth 2.0 for Slack, Jira, GitLab/GitHub — no password storage required. It is deployed in your Kubernetes cluster or private cloud (supports AWS EKS, GKE, Azure AKS). For smaller teams, an on-prem version on Docker Compose is available. An adapter for a new source (e.g., internal chat) is written in 1–2 weeks and connects without stopping the rest of the pipeline. Get a consultation to assess compatibility with your infrastructure.
What if Data Contains Confidential Information?
The AI system extracts knowledge but does not store original messages — only structured JSON blocks. You can set up filters at the entry level: exclude channels with "secret" classification or mask user names. The LLM processes text within your perimeter — data does not go to external providers (if using a self-hosted model like Mistral or LLaMA). Security audit is conducted at the pilot stage. Contact us to discuss security requirements.
What's Included
- Architectural document describing the pipeline and selected stack
- Implementation of extraction pipeline from Slack + Jira (other sources connected in 1–2 weeks each)
- Deployment of vector database (Qdrant) and knowledge graph
- Setup of automatic freshness checking
- Integration with existing tools (Slack, Jira, Git, etc.)
- Team training (1 workshop, 2 hours)
- 2 weeks of post-launch support
Comparison: Knowledge Base Without AI vs With AI
| Parameter | Without AI | With AI |
|---|---|---|
| Time to find a solution | Average 40 min | 5 min |
| Percentage of outdated articles | 60%+ | <10% |
| Monthly added knowledge units | 0–5 | 200–500 |
| Team trust (subjective score) | 2.1/5 | 3.9/5 |
Comparison of Freshness Checking Methods
| Method | Accuracy | Time Cost | Automation |
|---|---|---|---|
| Manual audit | 95% | 20 h/month | No |
| Periodic date recalculation | 60% | 2 h/month | Partial |
| AI checker (our approach) | 92% | 0.5 h/month | Full |
We guarantee that the pipeline will process at least 1000 messages per day without loss of accuracy. We estimate the project in 2 days — discuss your infrastructure with our engineers. Turnkey solution in 8–12 weeks.







