跳到主要内容

agentchat.contrib.qdrant_retrieve_user_proxy_agent

QdrantRetrieveUserProxyAgent

class QdrantRetrieveUserProxyAgent(RetrieveUserProxyAgent)

__init__

def __init__(name="RetrieveChatAgent",
human_input_mode: Literal["ALWAYS", "NEVER",
"TERMINATE"] = "ALWAYS",
is_termination_msg: Optional[Callable[[Dict], bool]] = None,
retrieve_config: Optional[Dict] = None,
**kwargs)

参数:

  • name str - 代理的名称。
  • human_input_mode str - whether to ask for human inputs every time a message is received. Possible values are "ALWAYS", "TERMINATE", "NEVER".
    1. 当设置为“ALWAYS”时,代理每次收到消息时都会提示人工输入。在此模式下,当人工输入为“exit”时,或当is_termination_msg为True且没有人工输入时,对话将停止。
    2. 当“TERMINATE”时,代理仅在收到终止消息或自动回复次数达到max_consecutive_auto_reply时提示人类输入。
    3. 当为“NEVER”时,代理将永远不会提示需要人工输入。在此模式下,当自动回复的次数达到max_consecutive_auto_reply或is_termination_msg为True时,对话将停止。
  • is_termination_msg 函数 - 一个接收字典形式的消息并返回布尔值的函数,用于指示接收到的消息是否为终止消息。 该字典可以包含以下键:"content"(内容), "role"(角色), "name"(名称), "function_call"(函数调用)。
  • retrieve_config dict or None - config for the retrieve agent. To use default config, set to None. Otherwise, set to a dictionary with the following keys:
    • 任务(可选,str):检索聊天的任务。可能的值有 "code"、"qa" 和 "default"。系统提示将根据不同任务而有所不同。默认值为 default,它同时支持代码和问答。
    • client (可选, qdrant_client.QdrantClient(":memory:")): 一个QdrantClient实例。如果未提供,将会分配一个内存中的实例。不建议用于生产环境。 将会被使用。如果你想使用其他向量数据库,扩展这个类并重写retrieve_docs函数。
    • docs_path (Optional, Union[str, List[str]]): 文档目录的路径。它也可以是单个文件的路径、单个文件的URL或目录、文件和URL的列表。默认为None,仅在集合已创建时有效。
    • extra_docs(可选,布尔值):当为true时,允许添加具有唯一ID的文档而不会覆盖现有文档;当为false时,它使用默认ID替换现有文档,存在覆盖集合的风险。当设置为true时,系统会为新文档块分配从"length+i"开始的唯一ID,防止替换现有文档,并促进向集合中添加更多内容。默认情况下,"extra_docs"设置为false,文档ID从零开始。这带来了风险,因为新文档可能会覆盖现有文档,可能导致集合中数据的意外丢失或改变。
    • collection_name(可选,str):集合的名称。 如果未提供键,将使用默认名称 autogen-docs
    • model (可选, str): 用于检索聊天的模型。 如果未提供密钥,将使用默认模型 gpt-4
    • chunk_token_size (可选, int): 用于检索聊天的分块令牌大小。 如果未提供此键,将使用默认大小 max_tokens * 0.4
    • context_max_tokens (可选, int): 用于检索聊天的上下文最大token大小。 如果未提供该键,将使用默认大小 max_tokens * 0.8
    • chunk_mode (可选, str): 用于检索聊天的分块模式。可能的值有 "multi_lines" 和 "one_line"。如果未提供键,将使用默认模式 multi_lines
    • must_break_at_empty_line (可选, bool): 如果为True,则只有在空行处才会进行分块。默认值为True。 如果 chunk_mode 是 "one_line",该参数将被忽略。
    • embedding_model(可选,str):用于检索聊天的嵌入模型。如果未提供密钥,将使用默认模型BAAI/bge-small-en-v1.5。所有可用的模型可以在https://qdrant.github.io/fastembed/examples/Supported_Models/找到。
    • customized_prompt (可选, str): 用于检索聊天的自定义提示。默认为None。
    • customized_answer_prefix (可选, str): 用于检索聊天的自定义回答前缀。默认值为""。 如果不为空且回答中不包含customized_answer_prefix,将触发更新上下文
    • update_context (可选, bool): 如果为False,则不会为交互式检索应用Update Context。默认值为True。
    • custom_token_count_function (可选, Callable): 一个自定义函数,用于计算字符串中的令牌数量。 该函数应接受一个字符串作为输入,并返回三个整数(token_count, tokens_per_message, tokens_per_name)。 默认值为 None,将使用 tiktoken,对于非 OpenAI 模型可能不准确。
    • custom_text_split_function (可选, 可调用): 一个自定义函数,用于将字符串拆分为字符串列表。 默认值为 None,将使用 autogen.retrieve_utils.split_text_to_chunks 中的默认函数。
    • custom_text_types(可选,List[str]):要处理的文件类型列表。默认为autogen.retrieve_utils.TEXT_FORMATS。 这仅适用于docs_path目录下的文件。明确包含的文件和URL将根据其类型进行分块处理。
    • recursive(可选,bool):是否要在docs_path中递归搜索文档。默认为True。
    • parallel (可选, int): 用于嵌入的并行工作器数量。默认值为CPU核心数。
    • on_disk(可选,bool):是否将集合存储在磁盘上。默认值为 False。
    • quantization_config: 量化配置。如果为None,量化将被禁用。
    • hnsw_config: HNSW 配置。如果为 None,将使用默认配置。 您可以在 https://qdrant.tech/documentation/concepts/indexing/#vector-index 找到有关 HNSW 配置选项的更多信息。 API 参考: https://qdrant.github.io/qdrant/redoc/index.html#tag/collections/operation/create_collection
    • payload_indexing: 是否为文档字段创建payload索引。默认为False。 您可以在此处找到有关payload索引选项的更多信息: https://qdrant.tech/documentation/concepts/indexing/#payload-index API参考: https://qdrant.github.io/qdrant/redoc/index.html#tag/collections/operation/create_field_index
  • **kwargs dict - UserProxyAgent 中的其他 kwargs。

retrieve_docs

def retrieve_docs(problem: str, n_results: int = 20, search_string: str = "")

参数:

  • problem str - 需要解决的问题。
  • n_results int - 要检索的结果数量。默认值为20。
  • search_string str - 仅检索包含此字符串完全匹配的文档。默认值为""。

create_qdrant_from_dir

def create_qdrant_from_dir(
dir_path: str,
max_tokens: int = 4000,
client: QdrantClient = None,
collection_name: str = "all-my-documents",
chunk_mode: str = "multi_lines",
must_break_at_empty_line: bool = True,
embedding_model: str = "BAAI/bge-small-en-v1.5",
custom_text_split_function: Callable = None,
custom_text_types: List[str] = TEXT_FORMATS,
recursive: bool = True,
extra_docs: bool = False,
parallel: int = 0,
on_disk: bool = False,
quantization_config: Optional[models.QuantizationConfig] = None,
hnsw_config: Optional[models.HnswConfigDiff] = None,
payload_indexing: bool = False,
qdrant_client_options: Optional[Dict] = {})

从给定目录中的所有文件创建一个Qdrant集合,该目录也可以是单个文件或单个文件的URL。

参数:

  • dir_path str - 目录、文件或URL的路径。
  • max_tokens 可选, int - 每个块的最大标记数。默认值为4000。
  • client 可选, QdrantClient - QdrantClient 实例。默认值为 None。
  • collection_name 可选, str - 集合的名称。默认为 "all-my-documents"。
  • chunk_mode 可选, str - 块模式。默认是 "multi_lines"。
  • must_break_at_empty_line 可选, 布尔值 - 是否在空行处换行。默认值为 True。
  • embedding_model 可选, str - 使用的嵌入模型。默认是 "BAAI/bge-small-en-v1.5"。 所有可用模型的列表可以在 https://qdrant.github.io/fastembed/examples/Supported_Models/ 找到。
  • custom_text_split_function 可选,可调用 - 自定义函数,用于将字符串拆分为字符串列表。 默认为 None,将使用 autogen.retrieve_utils.split_text_to_chunks 中的默认函数。
  • custom_text_types 可选, List[str] - 要处理的文件类型列表。默认为TEXT_FORMATS。
  • recursive 可选, bool - 是否在dir_path中递归搜索文档。默认为True。
  • extra_docs 可选,布尔型 - 是否在集合中添加更多的文档。默认值为 False
  • parallel 可选, int - 用于嵌入的并行工作线程数。默认为CPU核心数量
  • on_disk 可选, bool - 是否将集合存储在磁盘上。默认值为 False。
  • quantization_config - 量化配置。如果为None,量化将被禁用。
  • Ref - https://qdrant.github.io/qdrant/redoc/index.html#tag/collections/operation/create_collection
  • hnsw_config - HNSW配置。如果为None,将使用默认配置。
  • Ref - https://qdrant.github.io/qdrant/redoc/index.html#tag/collections/operation/create_collection
  • payload_indexing - 是否为文档字段创建有效负载索引。默认值为False。
  • qdrant_client_options - (可选,dict):实例化 qdrant 客户端的选项。
  • Ref - https://github.com/qdrant/qdrant-client/blob/master/qdrant_client/qdrant_client.py#L36-L58.

query_qdrant

def query_qdrant(
query_texts: List[str],
n_results: int = 10,
client: QdrantClient = None,
collection_name: str = "all-my-documents",
search_string: str = "",
embedding_model: str = "BAAI/bge-small-en-v1.5",
qdrant_client_options: Optional[Dict] = {}
) -> List[List[QueryResponse]]

在Qdrant集合上使用过滤器执行相似性搜索

参数:

  • query_texts List[str] - 查询文本。
  • n_results 可选, int - 返回的结果数量。默认值为10。
  • client 可选, API - QdrantClient实例。如果为None,将实例化一个默认的内存客户端。
  • collection_name 可选, str - 集合的名称。默认为 "all-my-documents"。
  • search_string 可选, str - 搜索字符串。默认为""。
  • embedding_model 可选, str - 使用的嵌入模型。默认为 "all-MiniLM-L6-v2"。如果embedding_function不为空,则此参数将被忽略。
  • qdrant_client_options - (可选, dict): 用于实例化qdrant客户端的选项。参考: https://github.com/qdrant/qdrant-client/blob/master/qdrant_client/qdrant_client.py#L36-L58.

返回:

  • List[List[QueryResponse]] - 查询结果。格式为: class QueryResponse(BaseModel, extra="forbid"): # type: ignore
  • id - Union[str, int]
  • embedding - 可选的列表[List[float]]
  • metadata - Dict[str, Any]
  • document - str
  • score - 浮点数