Подключил вызов search_knowledge_base вручную. Начал улучшение индексации RAG

This commit is contained in:
2026-04-01 20:16:26 +05:00
parent 5c8c09720c
commit 32d5ca97a1
3 changed files with 179 additions and 35 deletions

View File

@@ -110,9 +110,9 @@ class LocalKnowledgeBase:
# Разбиваем на чанки
text_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.CPP,
chunk_size=1000,
chunk_overlap=200,
length_function=len,
chunk_size=500,
chunk_overlap=100,
length_function=len
)
chunks = text_splitter.split_documents(all_documents)
@@ -130,6 +130,18 @@ class LocalKnowledgeBase:
for i, doc in enumerate(documents):
# Создаем эмбеддинг для каждого чанка
embedding = self.embeddings.embed_query(doc.page_content)
# Извлекаем название функции/класса/строки из контекста
metadata = doc.metadata
# Простая эвристика: ищем объявление функции/класса в начале чанка
import re
# Ищем паттерны: "void funcName(...)", "class ClassName", "int funcName(...)"
func_match = re.search(r'(?:class|struct|enum)\s+(\w+)', doc.page_content)
if not func_match:
func_match = re.search(r'(?:void|int|float|double|bool|auto)\s+(\w+)\s*\(', doc.page_content)
function_name = func_match.group(1) if func_match else "unknown"
point = PointStruct(
id=i,
@@ -139,7 +151,16 @@ class LocalKnowledgeBase:
"source": doc.metadata.get("source", "unknown"),
"page": doc.metadata.get("page", 0),
"file_type": "cpp",
"function_name": function_name, # ✅ Добавил
"class_name": func_match.group(1) if func_match else None, # ✅ Добавил
"line_start": doc.metadata.get("line", 0), # Если есть в метаданных
},
# payload={
# "text": doc.page_content,
# "source": doc.metadata.get("source", "unknown"),
# "page": doc.metadata.get("page", 0),
# "file_type": "cpp",
# },
)
points.append(point)