← Přehled / ai-search / agent-sdks
LangChain
LangChain ↗ je framework pro vytváření aplikací s velkými jazykovými modely. langchain-cloudflare ↗ balíček poskytuje CloudflareAISearchRetriever, standardní LangChain retriever podporovaný službou AI Search.
Retriever pouze vyhledává. Pokud chcete vytvořit instanci a nahrát obsah, zkombinujte ho s Cloudflare Python SDK ↗. Tento návod pomocí Python SDK vytvoří instanci AI Search se zapnutým hybridním vyhledáváním, zaindexuje soubor a poté ho jako nástroj prohledá pomocí retrieveru LangChain.
Předpoklady
Chcete-li token vytvořit, postupujte podle Vytvořte token API a přidejte obě oprávnění. Úprava zajistí instanci a nahraje soubory; Spustit provádí vyhledávání.
1. Nainstalujte balíčky
Vytvořte adresář projektu a virtuální prostředí, abyste izolovali své závislosti.
mkdir ai-search-langchain && cd ai-search-langchain
python3 -m venv .venv
source .venv/bin/activateVe Windows aktivujte virtuální prostředí pomocí .venv\Scripts\activate místo toho.
Nainstalujte oba balíčky:
pip install -U langchain-cloudflare cloudflare cloudflare SDK vytvoří instanci a nahraje soubory. langchain-cloudflare balíček poskytuje retriever a pomocné funkce pro RAG a agentní nástroje. Instalace langchain-cloudflare také nainstaluje langchain-core, takže nemusíte instalovat langchain samostatně.
2. Nastavte přihlašovací údaje
Exportujte ID účtu a token API. Cloudflare SDK je poté načte automaticky.
export CLOUDFLARE_ACCOUNT_ID="<ACCOUNT_ID>"
export CLOUDFLARE_API_TOKEN="<API_TOKEN>"3. Vytvořte instanci s hybridním vyhledáváním
Vytvořte soubor s názvem main.py. Následující kód vytvoří instanci s hybridní vyhledávání se aktivuje nastavením index_method na indexování vektorů i klíčových slov. Protože není připojen žádný zdroj dat, instance používá vestavěné úložiště.
Vytvoření instance, která již existuje, selže, proto kód nejprve zkontroluje, zda existuje, a vytvoří ji pouze v případě, že chybí.
import os
from cloudflare import Cloudflare, NotFoundError
ACCOUNT_ID = os.environ["CLOUDFLARE_ACCOUNT_ID"]
API_TOKEN = os.environ["CLOUDFLARE_API_TOKEN"]
NAMESPACE = "default"
INSTANCE_ID = "knowledge-base"
# The SDK authenticates with this token; the account ID is passed on each call.
client = Cloudflare(api_token=API_TOKEN)
# create() fails if the instance already exists, so check for it with read()
# first and only create it when read() raises NotFoundError.
try:
client.aisearch.namespaces.instances.read(
INSTANCE_ID, account_id=ACCOUNT_ID, name=NAMESPACE
)
print(f"Instance '{INSTANCE_ID}' already exists.")
except NotFoundError:
client.aisearch.namespaces.instances.create(
name=NAMESPACE,
account_id=ACCOUNT_ID,
id=INSTANCE_ID,
# Index both vectors and keywords to enable hybrid search.
index_method={"vector": True, "keyword": True},
)
print(f"Created instance '{INSTANCE_ID}'.")První poziční argument pro create() je název jmenného prostoru. Pokud jste dříve vytvořili čistě vektorovou instanci, povolte na ní hybridní vyhledávání pomocí client.aisearch.namespaces.instances.update(...) místo toho.
4. Nahrajte a zaindexujte soubor
Přidejte následující do main.py a nahrát tak dokument do built-in storage. Nastavení wait_for_completion na True uvnitř file argument počká, než se soubor naindexuje, a teprve poté vrátí výsledek.
item = client.aisearch.namespaces.instances.items.upload(
id=INSTANCE_ID,
account_id=ACCOUNT_ID,
name=NAMESPACE,
file={
# (filename, file bytes, content type)
"file": (
"workers-ai.md",
b"To configure Workers AI, add an [ai] binding and call env.AI.run().",
"text/markdown",
),
# Block until indexing finishes so the file is searchable right away.
"wait_for_completion": True,
},
)
print(f"Uploaded '{item.key}' (status: {item.status}).")Pokud indexování ještě probíhá, item.status může být running; soubor se dál indexuje na pozadí a krátce poté se stane prohledatelným.
5. Dotazujte se na instanci
Z LangChain můžete svou instanci používat třemi způsoby. Vyberte ten, který se hodí pro vaši aplikaci:
- Přímé vyhledávání vrací odpovídající dokumenty.
- Použití AI Search jako nástroje agenta dává agentovi možnost prohledávat váš obsah.
- Sestavte řetězec RAG vygeneruje odpověď z načtených dokumentů.
Všechny tři používají stejný CloudflareAISearchRetriever, kterou vytvoří první možnost.
Přímé vyhledávání
Nasměrujte CloudflareAISearchRetriever na instanci. Nastavte retrieval_type na hybrid k použití vektorového a klíčového indexu, které jste povolili.
from langchain_cloudflare import CloudflareAISearchRetriever
retriever = CloudflareAISearchRetriever(
account_id=ACCOUNT_ID,
api_token=API_TOKEN,
instance_name=INSTANCE_ID,
namespace=NAMESPACE,
retrieval_type="hybrid", # query both the vector and keyword indexes
k=5, # maximum number of results to return (capped at 50)
)
# invoke() runs a search and returns standard LangChain Documents.
docs = retriever.invoke("How do I configure Workers AI?")
for doc in docs:
# Each document carries its relevance score and source filename in metadata.
print(doc.metadata["score"], doc.metadata["filename"])
print(doc.page_content) k parametr nastavuje maximální počet výsledků a odpovídá max_num_results a je omezen na 50.
Použití AI Search jako nástroje agenta
Obalte retriever pomocí create_retriever_tool a umožněte tak agentovi prohledávat váš obsah. Toto je doporučený způsob použití AI Search z agenta LangChain.
from langchain_core.tools import create_retriever_tool
# create_retriever_tool wraps the retriever as a standard LangChain tool. The
# name and description are what the agent's model sees when deciding to call it.
search_tool = create_retriever_tool(
retriever,
name="cloudflare_ai_search",
description="Search the knowledge base for relevant passages.",
)
print(search_tool.invoke({"query": "How do I configure Workers AI?"}))search_tool je standardní nástroj LangChain. Předejte jej libovolnému agentovi LangChain nebo LangGraph spolu s dalšími nástroji.
Sestavte řetězec RAG
Chcete-li na základě načteného obsahu odpovídat na otázky, zkombinujte retriever s modelem. Tento příklad používá ChatCloudflareWorkersAI, který je součástí stejného balíčku. ID účtu a token předejte stejně jako u retrieveru.
Protože tato možnost volá Workers AI k vygenerování odpovědi, proto token, který sem předáváte, musí mít i oprávnění Workers AI oprávnění. Přidejte ho do tokenu, který jste již vytvořili, nebo předejte samostatný token.
from langchain_cloudflare import ChatCloudflareWorkersAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
llm = ChatCloudflareWorkersAI(
account_id=ACCOUNT_ID,
api_token=API_TOKEN,
model="@cf/zai-org/glm-5.2",
)
prompt = ChatPromptTemplate.from_template(
"Answer the question using only the context below.\n\n"
"Context:\n{context}\n\n"
"Question: {question}"
)
# Join the retrieved documents into a single context string for the prompt.
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
# LCEL chain: retrieve context and pass the question through, fill the prompt,
# call the model, then parse the response down to a plain string.
chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
print(chain.invoke("How do I configure Workers AI?"))Použití uvnitř Python Workeru
Uvnitř Python Worker, předejte vazbu Workers místo přihlašovacích údajů REST API. Cesta přes vazbu je asynchronní, proto použijte ainvoke.
from workers import WorkerEntrypoint, Response
from langchain_cloudflare import CloudflareAISearchRetriever
class Default(WorkerEntrypoint):
async def fetch(self, request):
# Pass a Worker binding instead of REST credentials.
retriever = CloudflareAISearchRetriever(binding=self.env.MY_SEARCH)
# The binding path is asynchronous, so use ainvoke.
docs = await retriever.ainvoke("How do I configure Workers AI?")
return Response.json({"matches": [doc.page_content for doc in docs]})self.env.MY_SEARCH je vyhrazený ai_search vazbu, nikoli vazbu Workers AI (self.env.AI). Pro vazba jmenného prostoru, předejte self.env.<NAMESPACE>.get("my-instance").