mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-09-07 03:50:42 +00:00
feat(ChatKnowledge): ChatKnowledge Support Keyword Retrieve (#1624)
Co-authored-by: Fangyin Cheng <staneyffer@gmail.com>
This commit is contained in:
@@ -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)
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user