Add initial implementation of MCP server and related tools for BMI calculation
This commit is contained in:
94
rag.py
Normal file
94
rag.py
Normal file
@@ -0,0 +1,94 @@
|
||||
"""稀疏检索 / 简单 RAG"""
|
||||
from sklearn.feature_extraction.text import TfidfVectorizer
|
||||
from sklearn.metrics.pairwise import cosine_similarity
|
||||
|
||||
|
||||
# 1. 简单切块
|
||||
def chunk_text(text, chunk_size=60, overlap=15):
|
||||
chunks = []
|
||||
|
||||
start = 0
|
||||
|
||||
while start < len(text):
|
||||
end = start + chunk_size
|
||||
|
||||
chunk = text[start:end]
|
||||
chunks.append(chunk)
|
||||
|
||||
if end >= len(text):
|
||||
break
|
||||
|
||||
start = end - overlap
|
||||
|
||||
return chunks
|
||||
|
||||
|
||||
# 2. 知识库原文
|
||||
document = """
|
||||
职工请事假,应当提前一个工作日通过OA系统提交申请,
|
||||
经部门负责人审批同意后方可休假。
|
||||
|
||||
职工因疾病无法正常工作的,可以申请病假。
|
||||
病假应当提供医院出具的相关证明材料。
|
||||
|
||||
员工因工作需要出差的,应提前提交出差申请。
|
||||
住宿费用按照公司差旅管理制度规定的标准报销。
|
||||
|
||||
职工连续工作满一年后可以享受带薪年休假。
|
||||
年休假天数根据职工累计工作年限确定。
|
||||
""".replace("\n", "")
|
||||
|
||||
|
||||
# 3. 文档切块
|
||||
chunks = chunk_text(
|
||||
document,
|
||||
chunk_size=60,
|
||||
overlap=15
|
||||
)
|
||||
|
||||
print("=== chunks ===")
|
||||
|
||||
for i, chunk in enumerate(chunks):
|
||||
print(i, chunk)
|
||||
|
||||
|
||||
# 4. 给所有 chunk 建 TF-IDF 索引
|
||||
vectorizer = TfidfVectorizer(
|
||||
analyzer="char",
|
||||
ngram_range=(1, 3)
|
||||
)
|
||||
|
||||
doc_vectors = vectorizer.fit_transform(chunks)
|
||||
|
||||
|
||||
# 5. 用户问题
|
||||
query = "事假怎么申请?"
|
||||
|
||||
|
||||
# 6. Query 转成同一个 TF-IDF 空间
|
||||
query_vector = vectorizer.transform([query])
|
||||
|
||||
|
||||
# 7. 计算 query 与所有 chunk 的相似度
|
||||
scores = cosine_similarity(
|
||||
query_vector,
|
||||
doc_vectors
|
||||
)[0]
|
||||
|
||||
|
||||
# 8. Top-K
|
||||
top_k = 3
|
||||
|
||||
top_indices = scores.argsort()[::-1][:top_k]
|
||||
|
||||
|
||||
print("\n=== query ===")
|
||||
print(query)
|
||||
|
||||
print("\n=== retrieval result ===")
|
||||
|
||||
for index in top_indices:
|
||||
print(
|
||||
f"score={scores[index]:.4f}",
|
||||
chunks[index]
|
||||
)
|
||||
Reference in New Issue
Block a user