从LangChain运用Agent的懵懵懂懂,到AutoGen的”猖狂”Agents,这周的学习和写作实在太幸福了。假设您是第一次触摸AugoGen,请先要检查AutoGen官方文档,或翻阅AutoGen系列的前几篇。

逐渐把握最佳Ai Agents结构-AutoGen 一

逐渐把握最佳Ai Agents结构-AutoGen 二

逐渐把握最佳Ai Agents结构-AutoGen 三 写新闻稿新方法

[逐渐把握最佳Ai Agents结构-AutoGen 四 多署理群聊实例]

逐渐把握最佳Ai Agents结构-AutoGen 五 与LangChain手拉手 – (juejin.cn)

逐渐把握最佳Ai Agents结构-AutoGen 六 语音AI署理 – (juejin.cn)

逐渐把握最佳Ai Agents结构-AutoGen 七 低代码AI助理 – (juejin.cn)

逐渐把握最佳Ai Agents结构-AutoGen 八 开源模型 – (juejin.cn)

  在最近的几篇文章里,咱们运用AutoGen完结了一些Demo。这篇文章,咱们将运用AutoGen来完结RAG运用开发。

RAG运用

  RAG全称”Retrieval-Augmented Generation”,即检索增强生成,它是自然语言处理中的一项技能。这种模型结合了检索式(retrieval-based)和生成式(generative)两种组件,以生成更准确、更相关的答复。

  在之前咱们的依据文档的聊天机器人的比如,便是RAG的一种运用。在本系列的逐渐把握最佳Ai Agents结构-AutoGen 五 与LangChain手拉手 – (juejin.cn),咱们将文档读取、向量化和存储作业交给了LangChain, AutoGen以agent with function calls 的方法调用LangChain封装好的函数。AutoGen在最近版别里,新增了RetriveChat,可以减少对LangChain的依靠。那么,咱们一起来看下AutoGen怎么独立完结RAG运用开发。

RetrievalAgent

  让咱们来看下,官方文档对Retrieval-Augmented Generation (RAG) Applications with AutoGen | AutoGen (microsoft.github.io)的介绍。

逐渐把握最佳Ai Agents结构-AutoGen 九 RAG运用

  从上图可以看出,AutoGen供给了Retrieval-augmented User Proxy 和Retrieval-augmented Assistant两个agent。

  现在就让咱们开干。

实战

  • 文档

   之前的RAG项目中咱们用到的是Uniswap的白皮书,这个项目里,咱们换成了arxiv.org/pdf/2308.00…, 这是一份rag和向量技能在医疗教育中的相关研究文章。让咱们在notebook里把它下载到当前项目中。

!wget -o rag.pdf https://arxiv.org/pdf/2308.00479.pdf

逐渐把握最佳Ai Agents结构-AutoGen 九 RAG运用

  • 装置库
%pip install pyautogen[retrievechat] langchain "chromadb<0.4.15" -q

  这次装置pyautogen,多加了retrieveChat功用包的声明。咱们依然装置了langchain, 在这儿主要运用它的splitter功用,当然autogen也是供给了。最终咱们装置了指定版别的chromadb 向量数据库,存储文档embedding。

  • 装备autogen config_list
import autogen # 大家可以运用gpt-4 或其它,我这儿用的是3.5, 还能用。 config_list = [ { 'model': 'gpt-3.5-turbo', 'api_key': '' }]
llm_config={ "seed": 42, #为缓存做的装备 "config_list": config_list }

接下来是比较典型的文档机器人的构建步骤

  • 装备embedding函数

  咱们会对question和文档都在embedding, AI助理答复问题的过程,其实便是将question的embedding和文档的embedding进行cosine 核算,得到类似度的过程。咱们运用openai 做embedding。

# 从chromadb数据库中引进embedding_functions
from chromadb.utils import embedding_functions
# 调用OpenAIEmbeddingFunction 
openai_embedding_function = embedding_functions.OpenAIEmbeddingFunction(api_key = config_list[0]["api_key"])
  • 设置文本拆分器
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(separators=["nn", "n", "r", "t"])
  • 实例化arg agents
from autogen.agentchat.contrib.retrieve_assistant_agent import RetrieveAssistantAgent
from autogen.agentchat.contrib.retrieve_user_proxy_agent import RetrieveUserProxyAgent
llm_config = {
    "request_timeout": 600,
    "config_list": config_list,
    "temperature": 0
}
assistant = RetrieveAssistantAgent(
    name="assistant",
    system_message="You are a helpful assistant.",
    llm_config=llm_config,
)
rag_agent = RetrieveUserProxyAgent(
    human_input_mode="NEVER",
    retrieve_config={
        "task": "qa",
        "docs_path": "./rag.pdf",
        "collection_name": "rag_collection",
        "embedding_function": openai_embedding_function,
        "custom_text_split_function": text_splitter.split_text,
    },
)

   首要咱们引进了RetrieveUserProxyAgentRetrieveAssistantAgent两个agent。从引进的途径autogen.agentchat.contrib.retrieve_assistant_agent来看,rag agent也是由autogen的chat agent派生,它这儿称为”contrib”。接着,咱们定义了llm_config,autogen运用的大模型装备,留意,这儿的temperature为0, 依据文档的Q/A应该严谨。RetrieveAssistantAgent担任履行rag作业,system_message 指定了assistant的角色。RetrieveUserProxyAgent 的retrieve_config,提起了RAG的重担,咱们做了以下装备:

  1. task:qa 指定使命为 QA问答使命类型
  2. docs_path 指定文档途径
  3. collection_name chromadb 向量数据库的名字
  4. embedding_function为上面设置的openai_embedding_function
  5. custom_text_split_function为上面设置的langchain的文本分割器
  • 启动对话,履行QA
assistant.reset()
rag_agent.initiate_chat(assistant, problem="What is the workflow in docGPT?", n_results=2)

  rag_agent 初始化使命,提的问题是What is the workflow in docGPT?, n_results 表示返回多少个成果,默许是20个, 这儿只需求2个。

逐渐把握最佳Ai Agents结构-AutoGen 九 RAG运用

  • 成果分析

逐渐把握最佳Ai Agents结构-AutoGen 九 RAG运用

  在这儿看到有两个文档分块被加入到上下文傍边。上下文即context,等下将会交给assistant 进行答复生成。RetrieveChatAgent(to assistant) 表示向assistant供给了如下的内容,也便是上下文。

逐渐把握最佳Ai Agents结构-AutoGen 九 RAG运用

  如上图,它包括了RAG QA使命的模板(You're a retrieve aumented chatbot. You answer user's questions based on your own knowledge and the context provied by the user....)和内容(context)。模板中也说的很清楚,假如依据context无法回复用户提出的问题,那么就向proxy 发出UPDATE CONTEXT的需求。上图的后半部分,便是经过embedding查询取得的文档内容。

逐渐把握最佳Ai Agents结构-AutoGen 九 RAG运用

  最终, RetrieveAssistantAgent依据RetrieveUserProxyAgent供给的context,完结了答复的生成, 这也是大模型最擅长的summarize。

总结

  RAG是LLM的经典运用,AutoGen经过供给chat agent的 rag 晋级agent,完结了相应功用。

  • RetrieveUserProxyAgent的装备需求完结文档读取、向量数据库、分词器的装备
  • RetrieveUserProxyAgent的prompt模板预置了QA 内容。
  • RetrieveAssistantAgent对RetrieveUserProxyAgent供给的context,完结答复生成。

假如您喜欢我的AutoGen系列,请点赞,保藏。谢谢。

参考资料