LangGraph#
LangGraph - библиотека для создания приложений со множеством актеров и сохранением состояния, идеально подходящая для разработки агентных рабочих процессов. Она предоставляет точный контроль над потоком выполнения и состоянием приложения, что критически важно при создании надежных агентов.
Можно определять потоки, включающие циклы, необходимые для большинства архитектур агентного типа, отличая ее от решений на основе ориентированных ациклических графов (DAG). Кроме того, LangGraph включает встроенную поддержку постоянства данных, позволяющую реализовать расширенные функции взаимодействия человека с системой и памяти.
LangGraph прекрасно интегрируется со всеми компонентами LangChain. Это означает, что можно использовать интеграцию Langchain с Vector DB, чтобы создавать узлы поиска информации в LangGraph, доступные как на Python, так и на JavaScript!
Использование#
Установите требуемые зависимости
$pip install langgraph langchain_community langchain_qdrant fastembed$npm install @langchain/langgraph langchain @langchain/qdrant @langchain/openaiСоздайте инструмент поиска для добавления его к рабочему процессу LangGraph.
from langchain.tools.retriever import create_retriever_tool from langchain_community.embeddings import FastEmbedEmbeddings from langchain_qdrant import FastEmbedSparse, QdrantVectorStore, RetrievalMode # We'll set up Qdrant to retrieve documents using Hybrid search. # Learn more at https://qdrant.tech/articles/hybrid-search/ retriever = QdrantVectorStore.from_texts( url="http://localhost:6333/", collection_name="langgraph-collection", embedding=FastEmbedEmbeddings(model_name="BAAI/bge-small-en-v1.5"), sparse_embedding=FastEmbedSparse(model_name="Qdrant/bm25"), retrieval_mode=RetrievalMode.HYBRID, texts=["<SOME_KNOWLEDGE_TEXT>", "<SOME_OTHER_TEXT>", ...] ).as_retriever() retriever_tool = create_retriever_tool( retriever, "retrieve_my_texts", "Retrieve texts stored in the Qdrant collection", )import { QdrantVectorStore } from "@langchain/qdrant"; import { OpenAIEmbeddings } from "@langchain/openai"; import { createRetrieverTool } from "langchain/tools/retriever"; const vectorStore = await QdrantVectorStore.fromTexts( ["<SOME_KNOWLEDGE_TEXT>", "<SOME_OTHER_TEXT>"], [{ id: 2 }, { id: 1 }], new OpenAIEmbeddings(), { url: "http://localhost:6333/", collectionName: "goldel_escher_bach", } ); const retriever = vectorStore.asRetriever(); const tool = createRetrieverTool( retriever, { name: "retrieve_my_texts", description: "Retrieve texts stored in the Qdrant collection", }, );Добавьте инструмент поиска как узел в LangGraph
from langgraph.graph import StateGraph from langgraph.prebuilt import ToolNode workflow = StateGraph() # Define other the nodes which we'll cycle between. workflow.add_node("retrieve_qdrant", ToolNode([retriever_tool])) graph = workflow.compile()import { StateGraph } from "@langchain/langgraph"; import { ToolNode } from "@langchain/langgraph/prebuilt"; // Define the graph const workflow = new StateGraph(SomeGraphState) // Define the nodes which we'll cycle between. .addNode("retrieve", new ToolNode([tool])); const graph = workflow.compile();