retrieve_user_proxy_agent
RetrieveUserProxyAgent
class RetrieveUserProxyAgent(UserProxyAgent)
(预览)检索增强用户代理根据嵌入相似性检索文档块,并将它们与问题一起发送给检索增强助手。
__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 - 是否每次收到消息都要求人工输入。 可能的取值为 "ALWAYS"、"TERMINATE"、"NEVER"。- 当为 "ALWAYS" 时,代理在收到消息时每次都会提示人工输入。 在此模式下,当人工输入为 "exit" 或 is_termination_msg 为 True 且没有人工输入时,对话停止。
- 当为 "TERMINATE" 时,只有在收到终止消息或自动回复次数达到 max_consecutive_auto_reply 时才提示人工输入。
- 当为 "NEVER" 时,代理将永远不会提示人工输入。在此模式下,当自动回复次数达到 max_consecutive_auto_reply 或 is_termination_msg 为 True 时,对话停止。
-
is_termination_msg
function - 一个函数,接受一个以字典形式表示的消息,并返回一个布尔值,指示接收到的消息是否为终止消息。 字典可以包含以下键:"content"、"role"、"name"、"function_call"。 -
retrieve_config
dict or None - 检索代理的配置。要使用默认配置,请设置为 None。否则,设置为一个具有以下键的字典:
task
(可选,str)- 检索聊天的任务。可能的取值为 "code"、"qa" 和 "default"。不同任务的系统提示 将不同。 默认值为default
,支持代码和问答,并在响应末尾提供源信息。vector_db
(可选,Union[str, VectorDB])- 检索聊天的向量数据库。 如果是字符串,则应为向量数据库的类型,例如 "chroma";否则,应为 VectorDB 协议的实例。默认值为 "chroma"。 设置为None
以使用已弃用的client
。db_config
(可选,Dict)- 向量数据库的配置。默认值为{}
。请确保您了解正在使用的向量数据库的配置,否则将其保留为{}
。 仅当vector_db
是字符串时有效。client
(可选,chromadb.Client)- chromadb 客户端。如果未提供键,则将使用默认客户端chromadb.Client()
。如果要使用其他客户端,请提供键。 vector db,扩展这个类并重写retrieve_docs
函数。
-
**已弃用**
- 使用vector_db
代替。docs_path
(可选,Union[str, List[str]]) - 文档目录的路径。它也可以是单个文件的路径,单个文件的URL或目录、文件和URL的列表。默认为None,仅在已创建集合的情况下有效。extra_docs
(可选,bool) - 当为True时,允许添加具有唯一ID的文档,而不会覆盖现有文档;当为False时,使用默认ID替换现有文档,有可能覆盖集合中的数据。当设置为True时,系统将为新文档块分配从"length+i"开始的唯一ID,防止替换现有文档,并便于向集合中添加更多内容。 默认情况下,"extra_docs"设置为false,从零开始的文档ID。这会带来风险,因为新文档可能会覆盖现有文档,可能导致集合中的数据意外丢失或更改。
-
**已弃用**
- 使用vector_db
代替client
时,请使用new_docs
。new_docs
(可选,bool) - 当为True时,仅向集合添加新文档;当为False时,更新现有文档并添加新文档。默认为True。文档ID用于确定文档是新文档还是现有文档。默认情况下,ID是内容的哈希值。model
(可选,str) - 用于检索聊天的模型。如果未提供键,则将使用默认模型gpt-4
。chunk_token_size
(可选,int) - 用于检索聊天的块标记大小。如果未提供键,则将使用默认大小max_tokens * 0.4
。context_max_tokens
(可选,int) - 用于检索聊天的上下文最大标记大小。如果未提供键,则将使用默认大小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) - 用于检索聊天的嵌入模型。如果未提供键,则将使用默认模型all-MiniLM-L6-v2
。所有可用模型可以在https://www.sbert.net/docs/pretrained_models.html
找到。 默认模型是一个快速模型。如果要使用高性能模型,建议使用all-mpnet-base-v2
。
-
**已弃用**
- 使用vector_db
代替client
时不需要。embedding_function
(可选,Callable) - 创建向量数据库的嵌入函数。默认为None,将使用给定的embedding_model
和SentenceTransformer。如果要使用OpenAI、Cohere、HuggingFace或其他嵌入函数,可以在此处传递。 请 参考https://docs.trychroma.com/embeddings
中的示例。
-
customized_prompt
(可选,字符串)- 用于检索聊天的自定义提示。默认为 None。 -
customized_answer_prefix
(可选,字符串)- 用于检索聊天的自定义答案前缀。默认为 ""。 如果不为空且自定义答案前缀不在答案中,则会触发“更新上下文”。 -
update_context
(可选,布尔值)- 如果为 False,则不会对交互式检索应用“更新上下文”。默认为 True。 -
collection_name
(可选,字符串)- 集合的名称。如果未提供键,则将使用默认名称“autogen-docs”。 -
get_or_create
(可选,布尔值)- 是否获取已存在的集合。默认为 True。 -
overwrite
(可选,布尔值)- 是否覆盖已存在的集合。默认为 False。 情况 1. 如果集合不存在,则创建该集合。 情况 2. 如果集合存在且 overwrite 为 True,则会覆盖该集合。 情况 3. 如果集合存在且 overwrite 为 False,如果 get_or_create 为 True,则获取该集合,否则会引发 ValueError。 -
custom_token_count_function
(可选,可调用对象)- 用于计算字符串中标记数的自定义函数。 该函数应以 (text:str, model:str) 为输入,并返回 token_count(整数)。将传递 retrieve_config["model"] 给该函数。 默认为 autogen.token_count_utils.count_token,它使用 tiktoken,对于非 OpenAI 模型可能不准确。 -
custom_text_split_function
(可选,可调用对象)- 用于将字符串拆分为字符串列表的自定义函数。 默认为 None,将使用autogen.retrieve_utils.split_text_to_chunks
中的默认函数。 -
custom_text_types
(可选,字符串列表)- 要处理的文件类型列表。 默认为autogen.retrieve_utils.TEXT_FORMATS
。 这仅适用于docs_path
下的文件。无论其类型如何,显式包含的文件和 URL 都将被分块。 -
recursive
(可选,布尔值)- 是否在docs_path
中递归搜索文档。默认为 True。 -
distance_threshold
(可选,浮点数)- 距离分数的阈值,只返回小于该阈值的距离。如果小于 0,则将被忽略。默认为 -1。 -
**kwargs
dict - UserProxyAgent 中的其他 kwargs。
示例:
覆盖 retrieve_docs 的示例 - 如果您已经设置了自定义的向量数据库,并且它与 chromadb 不兼容,您可以使用以下代码轻松插入它。
**已弃用**
- 请改用vector_db
。您可以扩展 VectorDB 并将其传递给代理。
class MyRetrieveUserProxyAgent(RetrieveUserProxyAgent):
def query_vector_db(
self,
query_texts: List[str],
n_results: int = 10,
search_string: str = "",
**kwargs,
) -> Dict[str, Union[List[str], List[List[str]]]]:
# 在这里定义你自己的查询函数
pass
def retrieve_docs(self, problem: str, n_results: int = 20, search_string: str = "", **kwargs):
results = self.query_vector_db(
query_texts=[problem],
n_results=n_results,
search_string=search_string,
**kwargs,
)
self._results = results
print("文档ID: ", results["ids"])
retrieve_docs
def retrieve_docs(problem: str, n_results: int = 20, search_string: str = "")
根据给定的问题检索文档,并将结果赋值给类属性 _results
。
检索到的文档应该是 QueryResults
类型,它是一个包含文档和距离的元组列表。
参数:
problem
str - 要解决的问题。n_results
int - 要检索的结果数量。默认为 20。search_string
str - 只检索包含该字符串完全匹配的文档。默认为空字符串。 如果向量数据库不支持该功能,则不使用。
返回值:
无。
message_generator
@staticmethod
def message_generator(sender, recipient, context)
为 RetrieveUserProxyAgent 生成一个带有给定上下文的初始消息。
参数:
sender
Agent - 发送方代理。它应该是 RetrieveUserProxyAgent 的实例。recipient
Agent - 接收方代理。通常是助手代理。context
dict - 消息生成的上下文。它应包含以下键:problem
(str) - 要解决的问题。n_results
(int) - 要检索的结果数量。默认为 20。search_string
(str) - 只检索包含该字符串完全匹配的文档。默认为空字符串。
返回值:
str
- 生成的消息,准备发送给接收方代理。