chechia.net
🔽
🔽
https://github.com/chechiachang/rag-workshop/blob/main/notebook/3_RAG_with_OpenAI.ipynb
┌──────────────┐ ┌─────────────────────┐
│ User Input │ │ Embedding Model │
│ (e.g., Query)├──────▶│ (OpenAI Embeddings) │
└──────────────┘ └────────────┬────────┘
│
▼
┌───────────────┐
│ Vector Query │
│ to Qdrant DB │
└──────┬────────┘
▼
┌────────────────────┐
│ Retrieved Contexts │
└────────┬───────────┘
▼
┌────────────────────────────┐
│ Prompt Construction Module │
│ (Query + Top-K Contexts) │
└────────┬───────────────────┘
▼
┌────────────────────┐
│ OpenAI Chat Model │
│ (GPT-4.1 / GPT-4) │
└────────┬───────────┘
▼
┌────────────────────┐
│ Final Answer │
└────────────────────┘
🔽
import qdrant_client
# 使用 Qdrant 作為向量數據庫
client = qdrant_client.QdrantClient(
host="localhost",
prefer_grpc=True,
)
'''
query_docs 函數用於查詢相關文檔
查詢指定的 collection_name
使用指定的模型model進行嵌入查詢
返回最相關的文檔
'''
def query_docs(query, collection_name="covid-qa-3-large", model="text-embedding-3-large" , top_k=5):
'''
query_embeddings 函數用於獲取查詢的語意嵌入向量
換句話說,把查詢的問題轉換為向量表示
example: "What is COVID-19?" -> [0.1, 0.2, 0.3, ...] 一個固定長度的向量
'''
query_embeddings = get_embedding(query, model)
'''
使用 Qdrant 客戶端 query_points 函數查詢相關文檔
返回指定 collection_name 中與 query_embeddings 最相似的前 top_k 個點
'''
results = client.query_points(
cㄨollection_name=collection_name, // 查詢的 collection 名稱
query=query_embeddings, // 輸入查詢的語意嵌入向量
limit=5, // 返回前 5 個最相關的點
with_payload=True,
using="title" // 使用指定的索引字段進行查詢
)
# 提取查詢結果中的 payload(即答案)
payloads = [point.payload["answer"] for point in results.points]
return payloads
'''
使用 OpenAI 的 GPT 模型生成回答
docs 是從向量數據庫中查詢到的相關文檔
將 context 與原始問題組合成 prompt 將 query + context 組合起來,如:
根據以下資料回答問題:
===
[段落1]
[段落2]
===
問題:COVID 的全名是什麼?
'''
def generate_answer(query, docs, model="gpt-4o-mini"):
context = "\n\n".join(docs)
prompt = f"""根據以下內容回答問題:
1. 請用繁體中文回答
2. 依照內容產生回答
3. 附上內容原文作為依據,原文保留內容的原始語言
4. 如果內容不包含就回答我不知道
內容:
{context}
問題:
{query}
"""
res = openai_client.chat.completions.create(
model=model, # 使用指定的 OpenAI 模型
messages=[
{"role": "system", "content": "你是一個 helpful AI 助理"},
{"role": "user", "content": prompt}
],
temperature=0.2
)
return res.choices[0].message.content.strip()
# 使用範例
query = "COVID 的全名是什麼"
# 根據 query 查詢相關文檔 docs
docs = query_docs(
query=query,
collection_name="covid-qa-3-large",
model="text-embedding-3-large")
# 將查詢結果 docs 與 query 一起生成回答
answer = generate_answer(
query=query,
docs=docs,
model="gpt-4o-mini")
print("\n🧠 回答:")
print(answer)
🧠 回答:
COVID 的全名是「Coronavirus Disease 2019」,簡稱 COVID-19。
依據原文:
"WHO announced “COVID-19” as the name of this new disease on 11 February 2020, following guidelines previously developed with the World Organisation for Animal Health (OIE) and the Food and Agriculture Organization of the United Nations (FAO)."
https://github.com/chechiachang/rag-workshop/blob/main/notebook/6_k8s_RAG_QA.ipynb
🔽
需要一個統一的知識庫,能夠快速檢索、理解並回答問題
透過 MCP Protocol,可以將不同的資料來源(如 Confluence、Github、Slack 等)整合到 RAG Agent 中。這樣,RAG Agent 可以在不同的上下文中提供一致的回答。不需要寫額外的程式碼,或只需要 LLM generate 一些簡單的程式碼。
傳統的 onboarding 過程往往依賴資深工程師手動指導和文檔查閱,效率低下。透過 RAG Agent,可以提供互動式的 onboarding 體驗,並且可以不斷溫習和更新知識。
工程師處理 alert 時,通常需要查閱內部文件、Runbook 或架構設計文件。這些文件往往分散在不同的系統中,導致查找過程耗時。
AI Copilot 不應該像圖書館守門員等人來借書, 而應該像導航系統,在你開車時主動告訴你:前方有彎道。
當 k8s 事件或指標觸發時,k8sGPT 可以自動查詢內部文件、Runbook 或架構設計文件,並根據檢索到的內容生成修復建議。
🔽
https://chechia.net/slides/2025-06-05-devops-rag-internal-ai/#/32 / https://github.com/chechiachang/rag-workshop/blob/main/notebook/5_Evaluation.ipynb
RAG Agent + Slack Bot 整合就可以完成第一個迭代版本
從改善工程團隊品質出發,推廣到跨部門使用。 基於Evaluation與使用者體驗持續改進。
沒時間的話可以待會來找我聊天 🔽