Agenter drivna av Gemini Pro: Öppna upp agenttillvägagångssätt med LangTrace

Upptäck hur Gemini Pro och LangTrace låser upp agenttiska arbetsflöden för avancerade LLM-funktioner. Utforska planering, användning av externa verktyg och spårning för produktionsklara AI-system.

15 januari 2025

party-gif

Frigör kraften hos AI-drivna agenter med Gemini Pro Experimental-modellen. Upptäck hur denna banbrytande språkmodell kan integrera externa verktyg och API:er sömlöst för att hantera komplexa uppgifter och leverera omfattande och skräddarsydda svar. Utforska fördelarna med denna agentbaserade metod och lås upp nya möjligheter för ditt innehåll och arbetsflöden.

Vad är en Agent och hur fungerar den?

En agent är i grunden en stor språkmodell (LLM) med ytterligare funktioner, inklusive:

  1. Planering: Agenten kan dela upp användarfrågan och komma upp med en omfattande plan för att hantera den.

  2. Externa verktyg/API:er: Agenten har tillgång till externa verktyg eller API:er som den kan använda för att genomföra sin plan.

  3. Minne: Agenten håller reda på var den befinner sig i planens genomförande och vilka ytterligare steg den behöver vidta.

I det angivna exemplet använder agenten den experimentella Gemini 1.5 Pro-modellen som LLM, och den har tillgång till två verktyg:

  1. RAG (Retrieval-Augmented Generation): Detta fungerar som agentens kunskapsbas och använder artikeln "Attention is All You Need".

  2. Webbsökning: Agenten kan söka efter information på webben för att komplettera sin kunskap.

Agenten använder LangTrace för att hålla reda på alla de steg den tar i genomförandet av planen. Denna observerbarhet är avgörande för att förstå agentens beslutsprocess, särskilt i en produktionsmiljö.

Konfigurera miljön

För att komma igång måste vi installera de nödvändiga paketen och konfigurera de erforderliga API-nycklarna. Så här gör vi:

  1. Installera paket: Vi kommer att installera paketet Google Generative AI, LangChain, Tavly Python (vår sökmotor), FAISS (vektorlager) och LangTrace Python SDK.

  2. Importera paket: Vi kommer att importera den rekursiva teckentextdelaren, PDF-laddaren, Tavly-sökresultat och Google generative AI-inbäddningsmodellen.

  3. Konfigurera API-nycklar:

    • Tavly API-nyckel: Du kan få Tavly API-nyckeln genom att klicka på länken "get API key" i videobeskrivningen.
    • Google API-nyckel: Du kan få Google API-nyckeln från din Google AI Studio.
    • LangTrace API-nyckel: Du måste skapa ett konto på LangTrace, en öppen källkod-plattform för observerbarhet för LLM-applikationer. Klicka sedan på "generate API key" för att få din API-nyckel.
  4. Ställ in miljövariabler: Vi kommer att ställa in Tavly API-nyckeln och LangTrace API-nyckeln som miljövariabler.

  5. Hantera fel: Om du ser några fel relaterade till LangSmith-integrationer, bekymra dig inte om dem. Vi är endast intresserade av LangChain och Gemini Pro-integrationen just nu.

Nu när vi har miljön konfigurerad kan vi gå vidare till de nästa stegen för att bygga agenten och integrera de nödvändiga verktygen.

Skapa RAG-pipelinen

För att konfigurera en grundläggande RAG-pipeline måste vi först läsa in PDF-dokumentet som kommer att fungera som vår kunskapsbas. I det här fallet har vi filen "transformers.pdf", som innehåller 12 sidor med innehåll.

Därefter använder vi RecursiveCharacterTextSplitter från modulen langchain.text_splitter för att dela upp dokumentet i mindre delar, där varje del har upp till 500 token och en överlappning på 100 token. Detta gör att vi kan skapa totalt 24 olika delar som kan användas för hämtning.

Vi laddar sedan Google Generative AI-inbäddningsmodellen, som kommer att användas för att beräkna inbäddningar för varje dokumentdel. Inbäddningarna har en dimensionalitet på 768.

För att lagra inbäddningarna använder vi FAISS-vektorlagret. Detta gör det möjligt att effektivt utföra likhetsökningar på dokumentdelarna när en fråga ges.

Avslutningsvis skapar vi ett RetrievalQA-verktyg som agenten kan använda för att hämta relevant information från kunskapsbasen. Verktyget är konfigurerat med FAISS-hämtaren och en beskrivning som anger att det är användbart för att hämta information relaterad till artikeln "Attention is All You Need".

Med denna konfiguration kommer agenten att kunna använda RAG-pipelinen för att hitta och hämta relevant information när den svarar på frågor om transformers och relaterade ämnen.

Konfigurera verktygen

För att konfigurera verktygen för vår agent måste vi först installera de nödvändiga paketen:

1# Installera nödvändiga paket 2!pip install google-generative-ai langchain tavlpy faiss-cpu langtracing

Därefter importerar vi de nödvändiga modulerna och konfigurerar API-nycklarna för de olika tjänster vi kommer att använda:

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# Konfigurera Tavly API-nyckel 9TAVLY_API_KEY = os.environ.get("TAVLY_API_KEY") 10 11# Konfigurera LangTrace API-nyckel 12LANGTRACING_API_KEY = os.environ.get("LANGTRACING_API_KEY")

Vi konfigurerar sedan RAG (Retrieval Augmented Generation)-pipelinen genom att läsa in PDF-dokumentet, dela upp det i delar och skapa inbäddningar och vektorlager:

1# Läs in PDF-dokumentet 2loader = PyPDFLoader("transformers.pdf") 3documents = loader.load() 4 5# Dela upp dokumentet i delar 6text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100, length_function=len) 7chunks = text_splitter.split_documents(documents) 8 9# Skapa inbäddningar och vektorlager 10embeddings = OpenAIEmbeddings() 11vector_store = FAISS.from_documents(chunks, embeddings)

Avslutningsvis skapar vi de två verktyg som vår agent kommer att ha tillgång till: hämtningsverktyget och sökverktyget:

1from langchain.agents import Tool 2 3# Skapa hämtningsverktyget 4retriever_tool = Tool( 5 name="retriever_tool", 6 description="För all information relaterad till transformers-arkitektur, använd det här verktyget. Användbart för att hämta information relaterad till artikeln Attention is all you need.", 7 func=lambda query: vector_store.similarity_search(query, k=3) 8) 9 10# Skapa sökverktyget 11search_tool = Tool( 12 name="search_tool", 13 description="En sökmotor optimerad för omfattande, exakta och betrodda resultat. Användbart när du behöver svara på frågor om aktuella händelser. Indata bör vara en sökfråga.", 14 func=lambda query: Tavly(TAVLY_API_KEY).search(query) 15)

Med verktygen konfigurerade är vi nu redo att skapa agenten och börja använda den för att svara på frågor.

Skapa Agenten

För att skapa agenten kommer vi att använda ReAct-agentklassen från LangChain. Detta är en särskild typ av agent som kan planera, har minne och har tillgång till de verktyg vi vill att den ska använda.

Vi måste först tillhandahålla en detaljerad prompt eller instruktioner till agenten för att styra verktygen och komma fram till en plan. LangChain tillhandahåller en mall för detta med hjälp av LangChain Hub, som liknar Llama Index Hub.

Vi kommer att använda ReAct-mallen och modifiera den efter behov. Prompten innehåller följande:

  1. Besvara följande frågor så bra du kan.
  2. Du har tillgång till följande verktyg:
    • Hämtningsverktyg: För all information relaterad till artikeln "Attention is All You Need".
    • Sökverktyg: En sökmotor optimerad för omfattande, exakta och betrodda resultat. Användbart för att besvara frågor om aktuella händelser.
  3. Använd följande format:
    • Den inmatade fråga du måste besvara.
    • Din tankeprocess.
    • Vilken åtgärd som ska vidtas (dvs. vilket verktyg som ska användas).
    • Verktygets utdata.
    • Det slutliga svaret.

Med den här prompten kan vi skapa ReAct-agenten:

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

Här är tools listan med verktyg som vi definierade tidigare, och system_prompt är prompten vi skapade baserat på ReAct-mallen.

Nu kan vi använda AgentExecutor för att köra agenten och ge den frågor:

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)

Agenten kommer att gå igenom sin tankeprocess, använda lämpliga verktyg och ge det slutliga svaret. Du kan också inspektera spåren med hjälp av LangTrace-biblioteket för att förstå agentens beslutsprocess.

Interagera med Agenten

Agenten vi har konfigurerat är en reaktiv agent, vilket innebär att den kan planera, utföra åtgärder och uppdatera sitt interna tillstånd baserat på resultaten av dessa åtgärder. Låt oss se hur vi kan interagera med den här agenten.

Först kommer vi att ställa en enkel fråga till agenten om det aktuella vädret i Los Angeles:

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

Agenten går igenom en tankeprocess, beslutar sig för att använda sökverktyget för att ta reda på det aktuella vädret, utför sökningen och ger sedan det slutliga svaret.

Nästa fråga är om vi kan få en lista över guldmedaljer per land i de aktuella olympiska spelen:

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

Här beslutar agenten igen att använda sökverktyget för att hitta relevant information, bearbetar resultaten och ger svaret.

Avslutningsvis ber vi agenten att förklara begreppet uppmärksamhet (attention) i transformers:

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

I det här fallet känner agenten igen att frågan är relaterad till artikeln "Attention is All You Need", så den beslutar sig för att använda hämtningsverktyget för att hämta relevant information från artikeln. Den bearbetar sedan informationen och ger en koncis förklaring av den grundläggande principen för skalad punktproduktuppmärksamhet.

Genom dessa interaktioner kan du se agentens tankeprocess och de steg den tar för att nå det slutliga svaret. Användningen av verktyg som LangTrace hjälper oss att förstå agentens interna funktioner och systemets prestanda.

Slutsats

Den experimentella Gemini 1.5 Pro-modellen har visat sig vara en effektiv agent som utnyttjar verktyg som RAG och webbsökning för att ge omfattande och koncisa svar på olika frågor. Användningen av LangTrace har varit avgörande för att spåra agentens tankeprocess och exekveringssteg, vilket ger värdefulla insikter för att optimera systemets prestanda.

Med tanke på att modellens väderinformation var något felaktig visar agentens förmåga att omformulera frågor och hämta mer relevant information dess anpassningsförmåga och problemlösningsförmåga. De detaljerade förklaringarna av kärnkonceptet uppmärksamhet i transformers belyser ytterligare modellens djupa förståelse och dess potential att fungera som ett värdefullt verktyg för användare som söker information och insikter.

Sammanfattningsvis har den experimentella Gemini 1.5 Pro-modellen visat sig vara en lovande agent som kan integrera externa verktyg, planera och genomföra omfattande svar. Allteftersom området för stora språkmodeller och agentbaserade system fortsätter att utvecklas, tjänar detta exempel som ett bevis på framstegen inom området och potentialen för ännu mer sofistikerade och kapabla agenter i framtiden.

FAQ