基于 RAG 构建企业级智能运维知识库
· 更新于 2026-07-26
⏱️ 阅读约 2 分钟 (684 字)
RAG
AIOps
LLM
利用 LangChain + Chroma 向量数据库,将历史 Runbook、事故报告和运维文档转化为可检索的智能知识库,实现 On-Call 场景下的快速根因定位。
一、运维知识管理的痛点
在大型组织中,运维知识往往分散在 Wiki、Runbook、Slack 记录和事故报告中。On-Call 工程师需要在多个系统间反复切换,才能定位到关键信息。RAG(Retrieval-Augmented Generation)技术为解决这一问题提供了新思路。
二、系统架构
我们基于 LangChain 框架搭建了完整的 RAG 流水线:文档经解析切分后存入 Chroma 向量数据库;当工程师提问时,系统先检索最相关的文档片段,再交由 LLM 生成回答。
三、关键技术与实现
向量嵌入模型选择 text-embedding-3-small,Chunk 大小设为 512 tokens、重叠 64 tokens。检索采用混合策略:向量相似度 + BM25 关键词加权。
LangChain RAG 流水线
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
# 文档加载与切分
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=512,
chunk_overlap=64,
separators=["\n\n", "\n", "。", " ", ""]
)
documents = text_splitter.split_documents(raw_docs)
# 向量存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectordb = Chroma.from_documents(
documents=documents,
embedding=embeddings,
persist_directory="./chroma_db"
)
# 检索问答链路
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o", temperature=0),
retriever=vectordb.as_retriever(search_kwargs={"k": 5}),
return_source_documents=True
)
# 查询示例
result = qa_chain.invoke({"query": "Redis 主从切换后老数据怎么恢复?"})
print(result["result"])
python
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
# 文档加载与切分
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=512,
chunk_overlap=64,
separators=["\n\n", "\n", "。", " ", ""]
)
documents = text_splitter.split_documents(raw_docs)
# 向量存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectordb = Chroma.from_documents(
documents=documents,
embedding=embeddings,
persist_directory="./chroma_db"
)
# 检索问答链路
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o", temperature=0),
retriever=vectordb.as_retriever(search_kwargs={"k": 5}),
return_source_documents=True
)
# 查询示例
result = qa_chain.invoke({"query": "Redis 主从切换后老数据怎么恢复?"})
print(result["result"])服务配置
# docker-compose.yml
version: '3.8'
services:
chroma:
image: chromadb/chroma:latest
ports:
- "8000:8000"
volumes:
- ./chroma_data:/chroma/chroma
environment:
- IS_PERSISTENT=true
- PERSIST_DIRECTORY=/chroma/chroma
deploy:
resources:
limits:
memory: 2G
rag-api:
build: .
ports:
- "8080:8080"
depends_on:
- chroma
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- CHROMA_HOST=chroma
- CHROMA_PORT=8000
yaml
# docker-compose.yml
version: '3.8'
services:
chroma:
image: chromadb/chroma:latest
ports:
- "8000:8000"
volumes:
- ./chroma_data:/chroma/chroma
environment:
- IS_PERSISTENT=true
- PERSIST_DIRECTORY=/chroma/chroma
deploy:
resources:
limits:
memory: 2G
rag-api:
build: .
ports:
- "8080:8080"
depends_on:
- chroma
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- CHROMA_HOST=chroma
- CHROMA_PORT=8000四、总结
RAG 知识库上线后,On-Call 工程师的平均故障定位时间从 45 分钟缩短到 12 分钟。后续计划加入多轮对话上下文理解与主动推荐能力。
本文作者:技术领航员 | 许可协议:CC BY-NC-SA 4.0
本文链接:https://sre-ai-blog.pages.dev/zh/posts/rag-knowledge-base/(转载请注明出处)