LLM之Agent(六)| 使用AutoGen、LangChian、RAG以及函数调用构建超级对话系统

计算混合云开源镜像

picture.image

   本文我们将尝试AutoGen集成函数调用功能。函数调用最早出现在Open AI API中,它允许用户调用外部API来增强系统的整体功能和效率。

例如, 在对话过程中根据需要调用天 气API。

  函数调用和Agent有各种组合,在这里我们将通过函数调用调用RAG检索增强生成机制,并使用结果生成输出。






 本文将介绍如何使用  **Langchian****Autogen****Retrieval Augmented Generation(RAG)****函数调用** 来构建超级AI聊天机器人。

一、什么是Langchain?

  LangChain是一个开源库,为开发人员提供了构建由大型语言模型(LLM)支持的LLM应用程序的工具,如OpenAI或Hugging Face。可以构建动态的、响应数据的应用程序,利用自然语言处理方面的最新突破。






   LangChain是一个框架,使开发人员能够构建能够推理问题并将其分解为较小子任务的代理。

二、什么是Autogen?

   AutoGen不仅仅是一种工具,它也是协作人工智能的未来,多个智能体聚集在一起,将想法转化为现实,人工智能智能体团结、创新和提升。






  简单地说,AutoGen和LangChain都是用于开发LLM驱动的应用程序的框架。然而,两者之间存在一些关键区别:
  • AutoGen是一个多智能体框架,而LangChain是一个单智能体框架;

  • AutoGen更专注于代码 生成,而LangChain更专注于通用NLP任务

三、什么是检索增强生成?

   检索增强生成RAG是一种人工智能框架,它从外部知识来源检索数据,以提高响应质量。它通过矢量相似性搜索和对外部数据集的实时更新等技术来确保准确性。

四、什么是函数调用?

   函数调用简化了与外部工具和API通信的聊天机器人的创建。






   换句话说,函数调用帮助开发人员向模型描述函数,并让模型智能地选择输出JSON对象。

五、搭建超级对话系统

安装环境以及所需要的包,命令如下:


        
            

          !pip install langchain , "pyautogen[retrievechat]" , PyPDF2 , faiss-gpu
        
      

导入相关包


          
import autogen
          
from langchain.embeddings import OpenAIEmbeddings
          
from langchain.vectorstores import FAISS
          
from langchain.llms import OpenAI
          
from langchain.memory import ConversationBufferMemory
          
from langchain.chains import ConversationalRetrievalChain
          
from PyPDF2 import PdfReader
          
from langchain.text_splitter import RecursiveCharacterTextSplitter
      

步骤1:配置AutoGen和API密钥

AutoGen的配置文件是一个名为config_list 的list:

config_list :是一个列表,其中包含使用的模型的配置;

seed :设置为42;

有了这个配置,下面看一下如何使用AutoGen:


          
config_list = [
          
    {
          
        "model": "gpt-4-1106-preview",
          
        "api_key": "openai_api",
          
    }
          
]
          

          
llm_config_proxy = {
          
    "seed": 42,  # change the seed for different trials
          
    "temperature": 0,
          
    "config_list": config_list,
          
    "request_timeout": 600
          
}
      

步骤2:读取PDF文件

  1. 我们上传一个PDF文件并进行处理,使用PyPDF2读取PDF文件;
  2. 使用 langchain中的text splitter将文本分割成chunk;
  3. 使用 OpenAIEmbeddings嵌入PDF文件,然后FAISS存储在向量数据库中;
  4. Faiss可以将文本chunk转换为embedding。然后,这些向量可以用于各种应用,如相似性搜索。

          
reader = PdfReader('/content/openchat.pdf')
          
corpus = ''.join([p.extract_text() for p in reader.pages if p.extract_text()])
          

          
splitter =  RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200,)
          
chunks = splitter.split_text(corpus)
          

          
embeddings = OpenAIEmbeddings(openai_api_key = openai_api)
          
vectors = FAISS.from_texts(chunks, embeddings)
      

步骤3:会话检索

一旦创建了数据库,我们就可以对其进行查询。

  1. 我们就可以使用Langchain的ConversationalRetrievalChain对用户的Prompt进行相似性搜索;
  2. let call ConversationBufferMemory是一个简单的内存缓冲区,用于存储会话的历史记录。

          
qa = ConversationalRetrievalChain.from_llm(
          
    OpenAI(temperature=0),
          
    vectors.as_retriever(),
          
    memory=ConversationBufferMemory(memory_key="chat_history", 
          
    return_messages=True),
          
)
      

步骤4:指定Assistant代理的配置

   AutoGen Agent支持对OpenAI模型的函数调用,但我们需要使用以下代码段指定函数:

          
llm_config_assistant = {
          
    "Seed" : 42,
          
    "temperature": 0,
          
        "functions": [
          
        {
          
            "name": "answer_PDF_question",
          
            "description": "Answer any PDF related questions",
          
            "parameters": {
          
                "type": "object",
          
                "properties": {
          
                    "question": {
          
                        "type": "string",
          
                        "description": "The question to ask in relation to PDF",
          
                    }
          
                },
          
                "required": ["question"],
          
            },
          
            
          
        }
          
    ],
          
    "config_list": config_list,
          
    "timeout": 120,
          
}
      

步骤5:配置Assistant Agent

    让我们创建一个名为“assistant”的具有特定配置的自动化助理代理。我们使用

该 assistant 阅读PDF并生 成准确的答案。


          
assistant = autogen.AssistantAgent(
          
            name="assistant",
          
            llm_config=llm_config_assistant,
          
            system_message="""You are a helpful assistant, Answer the question 
          
                              based on the context. Keep the answer accurate. 
          
                              Respond "Unsure about answer" if not sure about 
          
                              the answer."""
          
            
          
        )
      

步骤6:配置UserProxy代理。

   User Proxy代理

包括一个独特的功能:function_map参数,此参数用于将 函数调用 的配置与实际函 数本身链接起来, 确保无缝集成 和操作。


          
user_proxy = autogen.UserProxyAgent(  
          
            name="user_proxy",
          
            human_input_mode="NEVER", 
          
            max_consecutive_auto_reply=10,
          
            code_execution_config={"work_dir": "coding"},
          
            # llm_config_assistant = llm_config_assistant,
          
            function_map={
          
                "answer_PDF_question": answer_PDF_question
          
            }
          
        )
      
   一旦设置了代理,该脚本就会启动用户和聊天机器人之间的对话。这是通过调用  **user\_proxy** 对象上的  **initiate\_chat** 方法来完成的。  **initiate\_chat** 方法需要两个参数:充当聊天机器人的  **assistant** 实例和描述任务的文本消息。

          
user_proxy.initiate_chat(
          
    assistant,
          
    message="""
          
Write a Openchat word blog post titled why openchat better than GPT3 that uses the exact keyword OpenChat 
          
at least once every 100 words. The blog post should include an introduction, 
          
main body,
          
 and conclusion. The conclusion should invite readers to leave a comment. 
          
The main
          
 body should be split into at least 4 different subsections.
          
"""
          
)
      

结果如下所示:


          
user_proxy (to assistant):
          

          

          
Write a Openchat word blog post titled why openchat better than GPT3 that uses the exact keyword OpenChat 
          
at least once every 100 words. The blog post should include an introduction, main body,
          
 and conclusion. The conclusion should invite readers to leave a comment. The main
          
 body should be split into at least 4 different subsections.
          

          

          
--------------------------------------------------------------------------------
          
assistant (to user_proxy):
          

          
# Why OpenChat is Better Than GPT-3
          

          
## Introduction
          

          
In the ever-evolving landscape of artificial intelligence, OpenChat has emerged as a groundbreaking platform, offering a unique set of capabilities that set it apart from its predecessors like GPT-3. In this blog post, we will delve into the reasons why OpenChat is not just a step ahead but a leap forward in AI communication technology.
          

          
## Main Body
          

          
### Enhanced Contextual Understanding
          

          
OpenChat's ability to understand context surpasses that of GPT-3. It can maintain the thread of a conversation over a longer period, which allows for more coherent and meaningful interactions. This is particularly beneficial in customer service applications where conversations can be complex and require a deep understanding of the issue at hand.
          

          
### Superior Customization
          

          
One of the key advantages of OpenChat is its superior customization options. Unlike GPT-3, OpenChat can be tailored to fit the specific needs of any business or application. This means that it can adhere to brand voice, manage specialized knowledge bases, and integrate seamlessly with existing systems, providing a more personalized experience for users.
          

          
### Advanced Learning Capabilities
          

          
OpenChat is designed to learn and adapt more efficiently than GPT-3. It can quickly incorporate new information and adjust its responses accordingly. This continuous learning process ensures that OpenChat remains up-to-date with the latest data, trends, and user preferences, making it an invaluable tool for dynamic and fast-paced environments.
          

          
### Open-Source Community
          

          
The open-source nature of OpenChat is a game-changer. It allows developers from around the world to contribute to its development, leading to rapid innovation and improvement. This collaborative approach ensures that OpenChat is constantly evolving and benefiting from the collective expertise of a global community, unlike the more closed ecosystem of GPT-3.
          

          
## Conclusion
          

          
OpenChat represents a significant advancement in AI-powered communication, offering enhanced contextual understanding, superior customization, advanced learning capabilities, and the support of an open-source community. Its ability to provide more nuanced and adaptable interactions makes it a superior choice for businesses and developers looking to harness the power of AI.
          

          
We invite you to share your thoughts and experiences with OpenChat and GPT-3. Have you noticed the differences in your interactions? Leave a comment below and join the conversation about the future of AI communication.
      

结论:

   在这篇文章中,我们解释了如何使用AutoGen、langchain、函数调用和检索增强生成来创建一个超级AI聊天机器人。当这些组件结合在一起时,能够更有效地处理复杂的任务,生成更相关和更了解上下文的内容,响应将更加强大和通用。

参考文献:

[1] https://levelup.gitconnected.com/autogen-langchian-rag-function-call-super-ai-chabot-3951911607f2

[2] https://www.microsoft.com/en-us/research/blog/autogen-enabling-next-generation-large-language-model-applications/

[3] https://github.com/microsoft/autogen

[4] https://python.langchain.com/docs/get\_started/introduction

[5] https://www.microsoft.com/en-us/research/blog/autogen-enabling-next-generation-large-language-model-applications/

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 EB 级湖仓一体分析服务 LAS 的实践与展望
火山引擎湖仓一体分析服务 LAS 是面向湖仓一体架构的 Serverless 数据处理分析服务,提供一站式的海量数据存储计算和交互分析能力,完全兼容 Spark、Presto、Flink 生态,在字节跳动内部有着广泛的应用。本次演讲将介绍 LAS 在字节跳动内部的发展历程和大规模应用实践,同时介绍 LAS 在火山引擎上的发展规划。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论