由Gemini Pro驱动的代理人:利用LangTrace解锁代理人工作流

探索 Gemini Pro 和 LangTrace 如何为高级 LLM 功能解锁主动式工作流程。探索规划、外部工具使用和跟踪,以构建生产就绪的 AI 系统。

2025年1月15日

party-gif

利用金牛座专业实验型模型释放 AI 驱动代理的力量。探索这款前沿语言模型如何无缝集成外部工具和 API,以处理复杂任务,提供全面和定制的响应。探索基于代理的方法的优势,为您的内容和工作流程开启新的可能性。

什么是代理人以及它如何工作?

代理本质上是一个具有额外功能的大型语言模型(LLM),包括:

  1. 规划: 代理可以分解用户查询并制定全面的计划来解决它。

  2. 外部工具/API: 代理可以访问外部工具或API,以执行其计划。

  3. 内存: 代理会跟踪计划执行的进度以及需要采取的额外步骤。

在提供的示例中,代理使用Gemini 1.5 Pro实验模型作为LLM,并且可以访问两个工具:

  1. RAG(检索增强生成): 这充当代理的知识库,使用"注意力就是一切"论文。

  2. 网络搜索: 代理可以查找网上的信息来补充其知识。

代理使用LangTrace跟踪执行计划的所有步骤。这种可观察性对于理解代理的决策过程至关重要,特别是在生产环境中。

设置环境

要开始,我们需要安装必要的软件包并设置所需的API密钥。这是我们的做法:

  1. 安装软件包: 我们将安装Google生成性AI软件包、LangChain、Tavly Python(我们的搜索引擎)、FAISS(向量存储)和LangTrace Python SDK。

  2. 导入软件包: 我们将导入递归字符文本分割器、PDF加载器、Tavly搜索结果和Google生成性AI嵌入模型。

  3. 设置API密钥:

    • Tavly API密钥: 您可以通过单击视频描述中提供的"获取API密钥"链接来获取Tavly API密钥。
    • Google API密钥: 您可以从Google AI Studio获取Google API密钥。
    • LangTrace API密钥: 您需要在LangTrace(一个用于LLM应用程序的开源可观察性平台)上创建一个帐户。然后单击"生成API密钥"来获取您的API密钥。
  4. 设置环境变量: 我们将把Tavly API密钥和LangTrace API密钥设置为环境变量。

  5. 处理错误: 如果您看到任何与LangSmith集成相关的错误,不要担心。我们现在只对LangChain和Gemini Pro集成感兴趣。

现在我们已经设置好了环境,我们可以继续下一步,构建代理并集成必要的工具。

创建RAG管道

要设置基本的RAG管道,我们首先需要加载将作为我们知识库的PDF文档。在本例中,我们有"transformers.pdf"文件,其中包含12页内容。

接下来,我们使用来自langchain.text_splitter模块的RecursiveCharacterTextSplitter将文档划分为较小的片段,每个片段最多500个标记,重叠100个标记。这使我们能够创建总共24个不同的块,可用于检索。

然后,我们加载Google生成性AI嵌入模型,用于计算每个文档块的嵌入。嵌入的维度为768。

为了存储嵌入,我们使用FAISS向量存储。这允许我们在提供查询时有效地执行相似性搜索。

最后,我们创建一个RetrievalQA工具,代理可以使用它从知识库中检索相关信息。该工具配置有FAISS检索器和一个描述,指示它对于检索与"注意力就是一切"论文相关的信息很有用。

有了这种设置,代理将能够使用RAG管道找到并检索相关信息,以回答有关变压器及相关主题的问题。

设置工具

要为我们的代理设置工具,我们首先需要安装必要的软件包:

1# 安装所需的软件包 2!pip install google-generative-ai langchain tavlpy faiss-cpu langtracing

接下来,我们导入所需的模块并设置我们将使用的不同服务的API密钥:

1import os 2from langchain.document_loaders import PyPDFLoader 3from langchain.text_splitter import RecursiveCharacterTextSplitter 4from langchain.embeddings.openai import OpenAIEmbeddings 5from langchain.vectorstores import FAISS 6from langtracing.sdk.python import LangTracer 7 8# 设置Tavly API密钥 9TAVLY_API_KEY = os.environ.get("TAVLY_API_KEY") 10 11# 设置LangTrace API密钥 12LANGTRACING_API_KEY = os.environ.get("LANGTRACING_API_KEY")

然后,我们通过加载PDF文档、将其划分为块以及创建嵌入和向量存储来设置RAG(检索增强生成)管道:

1# 加载PDF文档 2loader = PyPDFLoader("transformers.pdf") 3documents = loader.load() 4 5# 将文档划分为块 6text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100, length_function=len) 7chunks = text_splitter.split_documents(documents) 8 9# 创建嵌入和向量存储 10embeddings = OpenAIEmbeddings() 11vector_store = FAISS.from_documents(chunks, embeddings)

最后,我们创建代理将能够访问的两个工具:检索工具和搜索工具:

1from langchain.agents import Tool 2 3# 创建检索工具 4retriever_tool = Tool( 5 name="retriever_tool", 6 description="对于任何与变压器架构相关的信息,请使用此工具。对于检索与'注意力就是一切'论文相关的信息很有用。", 7 func=lambda query: vector_store.similarity_search(query, k=3) 8) 9 10# 创建搜索工具 11search_tool = Tool( 12 name="search_tool", 13 description="一个针对全面、准确和可信结果进行优化的搜索引擎。当您需要回答有关当前事件的问题时很有用。输入应该是一个搜索查询。", 14 func=lambda query: Tavly(TAVLY_API_KEY).search(query) 15)

设置好工具后,我们现在准备创建代理并开始使用它来回答问题。

创建代理人

要创建代理,我们将使用LangChain中的ReAct代理类。这是一种特殊类型的代理,可以进行规划,有内存,并可以访问我们想要它使用的工具。

我们首先需要为代理提供详细的提示或说明,以控制工具并制定计划。LangChain提供了一个模板,使用LangChain Hub,这类似于Llama Index Hub。

我们将使用ReAct模板并根据需要进行修改。提示包括以下内容:

  1. 尽可能回答以下问题。
  2. 您可以访问以下工具:
    • 检索工具:用于与"注意力就是一切"论文相关的任何信息。
    • 搜索工具:一个针对全面、准确和可信结果进行优化的搜索引擎。对于回答有关当前事件的问题很有用。
  3. 使用以下格式:
    • 您必须回答的输入问题。
    • 您的思考过程。
    • 要采取的行动(即使用哪个工具)。
    • 工具的输出。
    • 最终答案。

有了这个提示,我们可以创建ReAct代理:

1agent = ReActAgent( 2 name="Gemini 1.5 Pro", 3 tools=tools, 4 system_message=system_prompt 5)

这里,tools是我们之前定义的工具列表,system_prompt是我们根据ReAct模板创建的提示。

现在,我们可以使用AgentExecutor来执行代理并为其提供查询:

1executor = AgentExecutor( 2 agent=agent, 3 tools=tools, 4 verbose=True 5) 6 7result = executor.run("What is the current weather in LA?") 8print(result)

代理将经历其思考过程,使用适当的工具,并提供最终答案。您还可以使用LangTrace库检查跟踪,以了解代理的决策过程。

与代理人互动

我们设置的代理是一个反应式代理,这意味着它可以规划、执行操作并根据这些操作的结果更新其内部状态。让我们看看如何与这个代理互动。

首先,我们将问代理一个关于洛杉矶当前天气的简单问题:

1question = "What is the current weather at LA?" 2result = agent.run(question) 3print(result)

代理经历了思考过程,决定使用搜索工具查找当前天气,执行搜索,然后提供最终答案。

接下来,让我们问代理当前奥运会每个国家的金牌数:

1question = "Can you give me a list of gold medals per country in the current Olympics?" 2result = agent.run(question) 3print(result)

在这里,代理再次决定使用搜索工具查找相关信息,处理结果,并提供答案。

最后,让我们问代理解释变压器中注意力的概念:

1question = "Can you explain the concept of attention in transformers?" 2result = agent.run(question) 3print(result)

在这种情况下,代理识别出该问题与"注意力就是一切"论文有关,因此决定使用检索工具从该论文中获取相关信息。它然后处理信息并提供了关于缩放点积注意力核心概念的简明解释。

在这些互动中,您可以看到代理的思考过程和达到最终答案的步骤。使用LangTrace等工具可以帮助我们了解代理的内部工作原理和系统的性能。

结论

Gemini 1.5 Pro实验模型已经展示了其作为有效代理的能力,利用RAG和网络搜索等工具提供全面和简洁的回答。使用LangTrace对代理的思考过程和执行步骤进行跟踪,为优化系统性能提供了宝贵的见解。

尽管模型的天气信息略有偏差,但代理重写查询并检索更相关信息的能力展示了其适应性和问题解决技能。对变压器中注意力核心概念的详细解释进一步突出了该模型的理解深度,以及其作为用户寻求信息和见解的有价值工具的潜力。

总的来说,Gemini 1.5 Pro实验模型已被证明是一个有前景的代理,能够集成外部工具、规划和执行全面的响应。随着大型语言模型和基于代理的系统领域的不断发展,这个示例证明了该领域的进步,以及未来更复杂和更强大代理的潜力。

常问问题