Spanner for LangChain

imageimageimage

Quick Start

In order to use this library, you first need to go through the followingsteps:

  1. Select or create a Cloud Platform project.

  2. Enable billing for your project.

  3. Enable the Google Cloud Spanner API.

  4. Setup Authentication.

Installation

Install this library in avirtualenv using pip.virtualenv is a tool to create isolated Python environments. The basic problem it addresses isone of dependencies and versions, and indirectly permissions.

Withvirtualenv, it’s possible to install this library without needing system install permissions, and without clashing with the installed system dependencies.

Supported Python Versions

Python >= 3.9

Mac/Linux

pip install virtualenvvirtualenv <your-env>source <your-env>/bin/activate<your-env>/bin/pip install langchain-google-spanner

Windows

pip install virtualenvvirtualenv <your-env><your-env>\Scripts\activate<your-env>\Scripts\pip.exe install langchain-google-spanner

Vector Store Usage

Use a vector store to store embedded data and perform vector search.

from langchain_google_spanner import SpannerVectorstorefrom langchain.embeddings import VertexAIEmbeddingsembeddings_service = VertexAIEmbeddings(model_name="textembedding-gecko@003")vectorstore = SpannerVectorStore(    instance_id="my-instance",    database_id="my-database",    table_name="my-table",    embeddings=embedding_service)

See the fullVector Store tutorial.

Document Loader Usage

Use a document loader to load data as LangChainDocuments.

from langchain_google_spanner import SpannerLoader loader = SpannerLoader(     instance_id="my-instance",     database_id="my-database",     query="SELECT * from my_table_name" ) docs =loader.lazy_load()

See the fullDocument Loader tutorial.

Chat Message History Usage

UseChatMessageHistory to store messages and provide conversationhistory to LLMs.

from langchain_google_spanner import SpannerChatMessageHistory history = SpannerChatMessageHistory(     instance_id="my-instance",     database_id="my-database",     table_name="my_table_name",     session_id="my-session_id" )

See the fullChat Message History tutorial.

Spanner Graph Store Usage

UseSpannerGraphStore to store nodes and edges extracted from documents.

from langchain_google_spanner import SpannerGraphStore graph = SpannerGraphStore(     instance_id="my-instance",     database_id="my-database",     graph_name="my_graph", )

See the fullSpanner Graph Store tutorial.

Spanner Graph QA Chain Usage

UseSpannerGraphQAChain for question answering over a graph stored in Spanner Graph.

from langchain_google_spanner import SpannerGraphStore, SpannerGraphQAChainfrom langchain_google_vertexai import ChatVertexAIgraph = SpannerGraphStore(    instance_id="my-instance",    database_id="my-database",    graph_name="my_graph",)llm = ChatVertexAI()chain = SpannerGraphQAChain.from_llm(    llm,    graph=graph,    allow_dangerous_requests=True)chain.invoke("query=Where does Sarah's sibling live?")

See the fullSpanner Graph QA Chain tutorial.

Spanner Graph Retrievers Usage

UseSpannerGraphTextToGQLRetriever to translate natural language question to GQL and query SpannerGraphStore.

from langchain_google_spanner import SpannerGraphStore, SpannerGraphTextToGQLRetrieverfrom langchain_google_vertexai import ChatVertexAIgraph = SpannerGraphStore(    instance_id="my-instance",    database_id="my-database",    graph_name="my_graph",)llm = ChatVertexAI()retriever = SpannerGraphTextToGQLRetriever.from_params(    graph_store=graph,    llm=llm)retriever.invoke("Where does Elias Thorne's sibling live?")

UseSpannerGraphVectorContextRetriever to perform vector search on embeddings that are stored in the nodes in a SpannerGraphStore. If expand_by_hops is provided, the nodes and edges at a distance upto the expand_by_hops from the nodes found in the vector search will also be returned.

from langchain_google_spanner import SpannerGraphStore, SpannerGraphVectorContextRetrieverfrom langchain_google_vertexai import ChatVertexAI, VertexAIEmbeddingsgraph = SpannerGraphStore(    instance_id="my-instance",    database_id="my-database",    graph_name="my_graph",)embedding_service = VertexAIEmbeddings(model_name="text-embedding-004")retriever = SpannerGraphVectorContextRetriever.from_params(        graph_store=graph,        embedding_service=embedding_service,        label_expr="Person",        embeddings_column="embeddings",        top_k=1,        expand_by_hops=1,    )retriever.invoke("Who lives in desert?")

Contributions

Contributions to this library are always welcome and highly encouraged.

SeeCONTRIBUTING for more information how to get started.

Please note that this project is released with a Contributor Code of Conduct. By participating inthis project you agree to abide by its terms. SeeCode of Conduct for moreinformation.

License

Apache 2.0 - SeeLICENSEfor more information.

Disclaimer

This is not an officially supported Google product.

Limitations

  • Approximate Nearest Neighbors (ANN) strategies are only supported for the GoogleSQL dialect

  • ANN’s ALTER VECTOR INDEX is not yet supported byGoogle Cloud Spanner

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-10-30 UTC.