AI Agents with LangChain & Autonomous Workflows · Lekcja

Integracja z zewnętrznymi API

Połącz agentów z usługami zewnętrznymi i własnościowymi API, aby wykorzystać bogaty ekosystem danych i funkcji.

Lekcja 2 z 412 kroki

Integracja z zewnętrznymi API to bezpłatna lekcja AI Agents with LangChain & Autonomous Workflows na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents with LangChain & Autonomous Workflows, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents with LangChain & Autonomous Workflows zawiera 4 lekcji w sumie.

Agenci i zewnętrzne API

Agenci AI są potężnymi narzędziami, ale ich wiedza często ogranicza się do danych treningowych. Aby wchodzić w interakcje z rzeczywistym światem, muszą pobierać aktualne informacje lub wykonywać działania.

Właśnie tutaj przydają się zewnętrzne API! Stanowią one pomost umożliwiający agentom dostęp do rozległego ekosystemu usług i danych.

Narzędzia dostępu zewnętrznego

W LangChain Tools to sposób, w jaki agenci wchodzą w interakcje z systemami zewnętrznymi. Można myśleć o nich jak o wyspecjalizowanych funkcjach, które agent może „wywołać”, gdy są potrzebne.

  • Narzędzie może wyszukiwać informacje w internecie.
  • Inne może pobierać dane pogodowe.
  • Może nawet wysyłać wiadomości e-mail!

Zbudujemy narzędzia opakowujące wywołania API.

API: interfejs agenta

API (Application Programming Interface) to zestaw reguł umożliwiających komunikację między różnymi aplikacjami.

Gdy agent korzysta z API, wysyła żądanie (na przykład zadaje pytanie) i otrzymuje odpowiedź (wynik lub dane).

  • Endpoint: Konkretny URL funkcji API.
  • Żądanie: Dane wysyłane przez agenta (np. „pobierz dla mnie aktualną pogodę w Londynie”).
  • Odpowiedź: Dane zwracane przez API (np. dane pogodowe w formacie JSON).

Zabezpieczanie dostępu do API

Wiele zewnętrznych API wymaga uwierzytelniania, aby zapewnić dostęp do usług wyłącznie upoważnionym użytkownikom. Typowe metody obejmują:

  • Klucze API: Unikalny tekst przekazywany z każdym żądaniem.
  • OAuth: Bardziej złożony protokół bezpiecznego dostępu delegowanego.

Klucze API należy zawsze przechowywać w tajemnicy i nigdy nie umieszczać ich bezpośrednio w publicznym kodzie!

Python i żądania HTTP

Aby komunikować się z API, Python musi wysyłać żądania HTTP. Biblioteka requests to standardowy sposób wykonywania takich operacji.

Oto sposób wykonania prostego żądania GET do publicznego API:

import requests

def fetch_joke():
    url = "https://official-joke-api.appspot.com/random_joke"
    response = requests.get(url)
    if response.status_code == 200:
        return response.json()
    else:
        return {"error": "Could not fetch joke."}

if __name__ == "__main__":
    joke_data = fetch_joke()
    if "error" not in joke_data:
        print(f"Setup: {joke_data['setup']}")
        print(f"Punchline: {joke_data['punchline']}")
    else:
        print(joke_data["error"])

Od funkcji do narzędzia LangChain

Teraz przekształćmy naszą funkcję wywołującą API w narzędzie LangChain Tool. Wymaga to zdefiniowania modelu Pydantic dla danych wejściowych narzędzia i opakowania funkcji.

Agent użyje tego schematu, aby zrozumieć, jak wywoływać narzędzie.

from langchain.tools import BaseTool
from pydantic import BaseModel, Field
import requests

# Define the input schema for the tool
class JokeInput(BaseModel):
    # Our joke API doesn't need specific input,
    # but tools usually define what they expect.
    query: str = Field(description="A placeholder query, not used by this API.")

class JokeTool(BaseTool):
    name = "get_random_joke"
    description = (
        "Useful for when you need a random joke. "
        "Returns a setup and a punchline."
    )
    args_schema: type[BaseModel] = JokeInput

    def _run(self, query: str):
        url = "https://official-joke-api.appspot.com/random_joke"
        response = requests.get(url)
        if response.status_code == 200:
            joke = response.json()
            return f"Setup: {joke['setup']}\nPunchline: {joke['punchline']}"
        return "Failed to fetch a joke."

    async def _arun(self, query: str):
        # Asynchronous version (optional, but good practice)
        raise NotImplementedError("Asynchronous call not implemented for this tool yet.")

if __name__ == "__main__":
    joke_tool = JokeTool()
    print(joke_tool._run("tell me a joke"))

Agent z narzędziem API

Gdy nasze JokeTool jest gotowe, możemy udostępnić je agentowi LangChain. Agent zdecyduje wtedy, kiedy i jak użyć tego narzędzia na podstawie promptu użytkownika.

Należy pamiętać, aby najpierw zainicjalizować LLM!

# Assuming you have an OpenAI API key set as an environment variable
# export OPENAI_API_KEY="..."

from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub
from langchain.tools import BaseTool
from pydantic import BaseModel, Field
import requests
import os

# Re-define JokeTool for completeness in runnable snippet
class JokeInput(BaseModel):
    query: str = Field(description="A placeholder query, not used by this API.")

class JokeTool(BaseTool):
    name = "get_random_joke"
    description = "Useful for when you need a random joke. Returns a setup and a punchline."
    args_schema: type[BaseModel] = JokeInput

    def _run(self, query: str):
        url = "https://official-joke-api.appspot.com/random_joke"
        response = requests.get(url)
        if response.status_code == 200:
            joke = response.json()
            return f"Setup: {joke['setup']}\nPunchline: {joke['punchline']}"
        return "Failed to fetch a joke."

    async def _arun(self, query: str):
        raise NotImplementedError("Async not implemented.")

if __name__ == "__main__":
    # Ensure OPENAI_API_KEY is set in environment
    if not os.getenv("OPENAI_API_KEY"):
        print("Please set your OPENAI_API_KEY environment variable.")
        exit()

    llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
    tools = [JokeTool()]

    # Get the prompt for the ReAct agent
    prompt = hub.pull("hwchase17/react")

    agent = create_react_agent(llm, tools, prompt)
    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

    print("Agent is ready!")
    # Example usage will be in the next scene.

Agent korzystający z narzędzia API

Poprośmy teraz agenta o opowiedzenie dowcipu. Obserwuj, jak korzysta z udostępnionego mu narzędzia get_random_joke.

Ustawienie verbose=True pozwala zobaczyć „tok rozumowania” agenta i wywołania narzędzi.

# This code block assumes the setup from the previous scene
# has been executed and the agent_executor is available.
# In a real interactive environment, you'd run this after Scene 7.

# For demonstration, we re-initialize parts needed for execution
import os
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub
from langchain.tools import BaseTool
from pydantic import BaseModel, Field
import requests

# Re-define JokeTool for completeness
class JokeInput(BaseModel):
    query: str = Field(description="A placeholder query, not used by this API.")

class JokeTool(BaseTool):
    name = "get_random_joke"
    description = "Useful for when you need a random joke. Returns a setup and a punchline."
    args_schema: type[BaseModel] = JokeInput

    def _run(self, query: str):
        url = "https://official-joke-api.appspot.com/random_joke"
        response = requests.get(url)
        if response.status_code == 200:
            joke = response.json()
            return f"Setup: {joke['setup']}\nPunchline: {joke['punchline']}"
        return "Failed to fetch a joke."

    async def _arun(self, query: str):
        raise NotImplementedError("Async not implemented.")

if __name__ == "__main__":
    if not os.getenv("OPENAI_API_KEY"):
        print("Please set your OPENAI_API_KEY environment variable.")
        exit()

    llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
    tools = [JokeTool()]
    prompt = hub.pull("hwchase17/react")
    agent = create_react_agent(llm, tools, prompt)
    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

    print("--- Asking the agent for a joke ---")
    response = agent_executor.invoke({"input": "Tell me a random joke."})
    print("\nAgent's final answer:")
    print(response["output"])

Niezawodna integracja z API

Zewnętrzne API mogą nie działać z powodu problemów z siecią, limitów zapytań, nieprawidłowych żądań lub błędów serwera. Niezwykle ważne jest tworzenie odpornych narzędzi, które prawidłowo obsługują takie sytuacje.

  • Bloki try-except: Przechwytują błędy sieciowe.
  • Kody statusu: Sprawdzają kody statusu HTTP (np. 200 oznacza powodzenie, 4xx — błędy po stronie klienta, a 5xx — błędy serwera).
  • Informacyjne komunikaty: Zwracają agentowi jasne komunikaty o błędach.

Poza prostymi API

Omówione tutaj zasady można stosować również do bardziej złożonych API. Mogą Państwo napotkać:

  • API wymagające określonych nagłówków lub danych w treści żądania (żądania POST).
  • Stronicowanie w przypadku dużych zbiorów danych.
  • Wywołania asynchroniczne dla długo trwających operacji.

Należy zawsze korzystać z oficjalnej dokumentacji API!

Sprawdź integrację z API

Wiedzą już Państwo, jak zwiększać możliwości agentów, łącząc je z zewnętrznymi API. Sprawdźmy tę wiedzę.

Podsumowanie i kolejne kroki

Świetna praca! Wiedzą już Państwo, jak zwiększać możliwości agentów AI, łącząc je z zewnętrznymi API.

  • API rozszerzają możliwości agenta poza jego wewnętrzną wiedzę.
  • Niestandardowe narzędzia opakowują wywołania API, zapewniając agentowi uporządkowany interfejs.
  • Uwierzytelnianie i obsługa błędów mają kluczowe znaczenie dla niezawodnych integracji.

Ta umiejętność ma podstawowe znaczenie przy tworzeniu naprawdę dynamicznych i użytecznych agentów AI. Warto nadal poznawać różne API!

Bezpłatny start

Ucz się AI Agents with LangChain & Autonomous Workflows dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
12
Lekcje
50

Często zadawane pytania

Czy lekcja „Integracja z zewnętrznymi API” jest bezpłatna?

Tak — pełny tekst „Integracja z zewnętrznymi API” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents with LangChain & Autonomous Workflows, przejdź na CoddyKit PRO. Kurs AI Agents with LangChain & Autonomous Workflows zawiera 4 lekcji w sumie.

Co nauczysz się w „Integracja z zewnętrznymi API”?

Połącz agentów z usługami zewnętrznymi i własnościowymi API, aby wykorzystać bogaty ekosystem danych i funkcji. Ćwiczysz AI Agents with LangChain & Autonomous Workflows z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents with LangChain & Autonomous Workflows?

Nie wymagamy żadnego doświadczenia. AI Agents with LangChain & Autonomous Workflows w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Integracja z zewnętrznymi API”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents with LangChain & Autonomous Workflows?

Tak. Każda lekcja AI Agents with LangChain & Autonomous Workflows zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Tworzenie własnych narzędzi LangChain
  2. Integracja z zewnętrznymi API
  3. Web scraping i wzbogacanie danych
  4. Toolkity i ustrukturyzowane dane wejściowe narzędzi
← Powrót do AI Agents with LangChain & Autonomous Workflows