feat(ChatKnowledge): ChatKnowledge Support Keyword Retrieve (#1624)

Co-authored-by: Fangyin Cheng <staneyffer@gmail.com>
This commit is contained in:
Aries-ckt
2024-06-13 13:49:17 +08:00
committed by GitHub
parent 162e2c9b1c
commit 58d08780d6
86 changed files with 948 additions and 440 deletions

View File

@@ -8,9 +8,10 @@ consolidates important information over time.
import os.path
from concurrent.futures import Executor, ThreadPoolExecutor
from datetime import datetime
from typing import TYPE_CHECKING, Generic, List, Optional, Tuple, Type
from typing import Generic, List, Optional, Tuple, Type
from dbgpt.core import Embeddings, LLMClient
from dbgpt.storage.vector_store.base import VectorStoreBase
from dbgpt.util.annotations import immutable, mutable
from .base import (
@@ -26,9 +27,6 @@ from .base import (
from .long_term import LongTermMemory
from .short_term import EnhancedShortTermMemory
if TYPE_CHECKING:
from dbgpt.storage.vector_store.connector import VectorStoreConnector
class HybridMemory(Memory, Generic[T]):
"""Hybrid memory for the agent."""
@@ -81,8 +79,10 @@ class HybridMemory(Memory, Generic[T]):
):
"""Create a hybrid memory from Chroma vector store."""
from dbgpt.configs.model_config import DATA_DIR
from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig
from dbgpt.storage.vector_store.connector import VectorStoreConnector
from dbgpt.storage.vector_store.chroma_store import (
ChromaStore,
ChromaVectorConfig,
)
if not embeddings:
from dbgpt.rag.embedding import DefaultEmbeddingFactory
@@ -91,16 +91,15 @@ class HybridMemory(Memory, Generic[T]):
vstore_path = vstore_path or os.path.join(DATA_DIR, "agent_memory")
vector_store_connector = VectorStoreConnector.from_default(
vector_store_type="Chroma",
embedding_fn=embeddings,
vector_store_config=ChromaVectorConfig(
vector_store = ChromaStore(
ChromaVectorConfig(
name=vstore_name,
persist_path=vstore_path,
),
embedding_fn=embeddings,
)
)
return cls.from_vstore(
vector_store_connector=vector_store_connector,
vector_store=vector_store,
embeddings=embeddings,
executor=executor,
now=now,
@@ -113,7 +112,7 @@ class HybridMemory(Memory, Generic[T]):
@classmethod
def from_vstore(
cls,
vector_store_connector: "VectorStoreConnector",
vector_store: "VectorStoreBase",
embeddings: Optional[Embeddings] = None,
executor: Optional[Executor] = None,
now: Optional[datetime] = None,
@@ -124,7 +123,7 @@ class HybridMemory(Memory, Generic[T]):
):
"""Create a hybrid memory from vector store."""
if not embeddings:
embeddings = vector_store_connector.current_embeddings
raise ValueError("embeddings is required.")
if not executor:
executor = ThreadPoolExecutor()
if not now:
@@ -139,7 +138,7 @@ class HybridMemory(Memory, Generic[T]):
if not long_term_memory:
long_term_memory = LongTermMemory(
executor,
vector_store_connector,
vector_store,
now=now,
)
return cls(now, sensory_memory, short_term_memory, long_term_memory, **kwargs)

View File

@@ -6,7 +6,7 @@ from typing import Generic, List, Optional
from dbgpt.core import Chunk
from dbgpt.rag.retriever.time_weighted import TimeWeightedEmbeddingRetriever
from dbgpt.storage.vector_store.connector import VectorStoreConnector
from dbgpt.storage.vector_store.base import VectorStoreBase
from dbgpt.storage.vector_store.filters import MetadataFilters
from dbgpt.util.annotations import immutable, mutable
from dbgpt.util.executor_utils import blocking_func_to_async
@@ -70,7 +70,7 @@ class LongTermMemory(Memory, Generic[T]):
def __init__(
self,
executor: Executor,
vector_store_connector: VectorStoreConnector,
vector_store: VectorStoreBase,
now: Optional[datetime] = None,
reflection_threshold: Optional[float] = None,
):
@@ -81,9 +81,9 @@ class LongTermMemory(Memory, Generic[T]):
self.forgetting: bool = False
self.reflection_threshold: Optional[float] = reflection_threshold
self.aggregate_importance: float = 0.0
self._vector_store_connector = vector_store_connector
self._vector_store = vector_store
self.memory_retriever = LongTermRetriever(
now=self.now, vector_store_connector=vector_store_connector
now=self.now, index_store=vector_store
)
@immutable
@@ -97,7 +97,7 @@ class LongTermMemory(Memory, Generic[T]):
m: LongTermMemory[T] = LongTermMemory(
now=now,
executor=self.executor,
vector_store_connector=self._vector_store_connector.new_connector(new_name),
vector_store=self._vector_store,
reflection_threshold=self.reflection_threshold,
)
m._copy_from(self)