Подключил вызов search_knowledge_base вручную. Начал улучшение индексации RAG
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user