从LangChain运用Agent的懵懵懂懂,到AutoGen的”猖狂”Agents,这周的学习和写作实在太幸福了。假设您是第一次触摸AugoGen,请先要检查AutoGen官方文档,或翻阅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)的介绍。
从上图可以看出,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
- 装置库
%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,
},
)
首要咱们引进了RetrieveUserProxyAgent
和RetrieveAssistantAgent
两个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的重担,咱们做了以下装备:
-
task:qa
指定使命为 QA问答使命类型 -
docs_path
指定文档途径 -
collection_name
chromadb 向量数据库的名字 -
embedding_function
为上面设置的openai_embedding_function -
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个。
- 成果分析
在这儿看到有两个文档分块被加入到上下文傍边。上下文即context,等下将会交给assistant 进行答复生成。RetrieveChatAgent(to assistant)
表示向assistant供给了如下的内容,也便是上下文。
如上图,它包括了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查询取得的文档内容。
最终, RetrieveAssistantAgent依据RetrieveUserProxyAgent供给的context,完结了答复的生成, 这也是大模型最擅长的summarize。
总结
RAG是LLM的经典运用,AutoGen经过供给chat agent的 rag 晋级agent,完结了相应功用。
- RetrieveUserProxyAgent的装备需求完结文档读取、向量数据库、分词器的装备
- RetrieveUserProxyAgent的prompt模板预置了QA 内容。
- RetrieveAssistantAgent对RetrieveUserProxyAgent供给的context,完结答复生成。
假如您喜欢我的AutoGen系列,请点赞,保藏。谢谢。