{"id":28547807,"url":"https://github.com/ydb-platform/langchain-ydb","last_synced_at":"2025-06-25T09:06:54.292Z","repository":{"id":285749448,"uuid":"959181662","full_name":"ydb-platform/langchain-ydb","owner":"ydb-platform","description":"LangChain Integration package for YDB","archived":false,"fork":false,"pushed_at":"2025-06-06T17:21:12.000Z","size":519,"stargazers_count":10,"open_issues_count":8,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-06-06T18:28:10.907Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ydb-platform.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-02T11:54:01.000Z","updated_at":"2025-04-12T09:47:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"cbd31d55-bf29-4524-8024-d92d70074aa9","html_url":"https://github.com/ydb-platform/langchain-ydb","commit_stats":null,"previous_names":["ydb-platform/langchain-ydb"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ydb-platform/langchain-ydb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ydb-platform%2Flangchain-ydb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ydb-platform%2Flangchain-ydb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ydb-platform%2Flangchain-ydb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ydb-platform%2Flangchain-ydb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ydb-platform","download_url":"https://codeload.github.com/ydb-platform/langchain-ydb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ydb-platform%2Flangchain-ydb/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261841962,"owners_count":23217914,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-10T01:07:48.473Z","updated_at":"2025-06-25T09:06:54.281Z","avatar_url":"https://github.com/ydb-platform.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# langchain-ydb\n---\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/ydb-platform/langchain-ydb/blob/main/LICENSE)\n[![PyPI version](https://badge.fury.io/py/langchain-ydb.svg)](https://badge.fury.io/py/langchain-ydb)\n[![Functional tests](https://github.com/ydb-platform/langchain-ydb/actions/workflows/tests.yml/badge.svg)](https://github.com/ydb-platform/langchain-ydb/actions/workflows/tests.yml)\n[![Lint checks](https://github.com/ydb-platform/langchain-ydb/actions/workflows/lint.yml/badge.svg)](https://github.com/ydb-platform/langchain-ydb/actions/workflows/lint.yml)\n\nLangChain's YDB integration (langchain-ydb) provides vector capabilities for working with [YDB](https://ydb.tech/).\n\n## Getting Started\n\n### Setting Up YDB\n\nLaunch a YDB Docker container with:\n\n```shell\ndocker run -d -p 2136:2136 --name ydb-langchain -e YDB_USE_IN_MEMORY_PDISKS=true -h localhost ydbplatform/local-ydb:trunk\n```\n\n### Installing the Package\n\nInstall `langchain-ydb` package with:\n\n```bash\npip install -U langchain-ydb\n```\n\nVectorStore works along with an embedding model, here using `langchain-openai` as example.\n\n```shell\npip install langchain-openai\nexport OPENAI_API_KEY=...\n```\n\n## Work with YDB Vector Store\n\n### Creating a Vector Store\n\n```python\nfrom langchain_openai import OpenAIEmbeddings\nfrom langchain_ydb.vectorstores import YDB, YDBSearchStrategy, YDBSettings\n\n\nsettings = YDBSettings(\n    table=\"ydb_example\",\n    strategy=YDBSearchStrategy.COSINE_SIMILARITY,\n)\nvector_store = YDB(\n    OpenAIEmbeddings(),\n    config=settings,\n)\n```\n\n### Add items to vector store\n\nOnce you have created your vector store, you can interact with it by adding and deleting different items.\n\nPrepare documents to work with:\n\n```python\nfrom uuid import uuid4\n\nfrom langchain_core.documents import Document\n\ndocument_1 = Document(\n    page_content=\"I had chocalate chip pancakes and scrambled eggs for breakfast this morning.\",\n    metadata={\"source\": \"tweet\"},\n)\n\ndocument_2 = Document(\n    page_content=\"The weather forecast for tomorrow is cloudy and overcast, with a high of 62 degrees.\",\n    metadata={\"source\": \"news\"},\n)\n\ndocument_3 = Document(\n    page_content=\"Building an exciting new project with LangChain - come check it out!\",\n    metadata={\"source\": \"tweet\"},\n)\n\ndocument_4 = Document(\n    page_content=\"Robbers broke into the city bank and stole $1 million in cash.\",\n    metadata={\"source\": \"news\"},\n)\n\ndocument_5 = Document(\n    page_content=\"Wow! That was an amazing movie. I can't wait to see it again.\",\n    metadata={\"source\": \"tweet\"},\n)\n\ndocument_6 = Document(\n    page_content=\"Is the new iPhone worth the price? Read this review to find out.\",\n    metadata={\"source\": \"website\"},\n)\n\ndocument_7 = Document(\n    page_content=\"The top 10 soccer players in the world right now.\",\n    metadata={\"source\": \"website\"},\n)\n\ndocument_8 = Document(\n    page_content=\"LangGraph is the best framework for building stateful, agentic applications!\",\n    metadata={\"source\": \"tweet\"},\n)\n\ndocument_9 = Document(\n    page_content=\"The stock market is down 500 points today due to fears of a recession.\",\n    metadata={\"source\": \"news\"},\n)\n\ndocument_10 = Document(\n    page_content=\"I have a bad feeling I am going to get deleted :(\",\n    metadata={\"source\": \"tweet\"},\n)\n\ndocuments = [\n    document_1,\n    document_2,\n    document_3,\n    document_4,\n    document_5,\n    document_6,\n    document_7,\n    document_8,\n    document_9,\n    document_10,\n]\nuuids = [str(uuid4()) for _ in range(len(documents))]\n```\n\nYou can add items to your vector store by using the `add_documents` function.\n\n```python\nvector_store.add_documents(documents=documents, ids=uuids)\n```\n\n### Delete items from vector store\n\nYou can delete items from your vector store by ID using the `delete` function.\n\n```python\nvector_store.delete(ids=[uuids[-1]])\n```\n\n### Query vector store\n\nOnce your vector store has been created and relevant documents have been added, you will likely want to query it during the execution of your chain or agent.\n\n#### Query directly\n\n**Similarity search**:\n\nA simple similarity search can be performed as follows:\n\n```python\nresults = vector_store.similarity_search(\n    \"LangChain provides abstractions to make working with LLMs easy\", k=2\n)\nfor res in results:\n    print(f\"* {res.page_content} [{res.metadata}]\")\n```\n\n**Similarity search with score**\n\nYou can also perform a search with a score:\n\n```python\nresults = vector_store.similarity_search_with_score(\"Will it be hot tomorrow?\", k=3)\nfor res, score in results:\n    print(f\"* [SIM={score:.3f}] {res.page_content} [{res.metadata}]\")\n```\n\n#### Filtering\n\nYou can search with filters as described below:\n\n```python\nresults = vector_store.similarity_search_with_score(\n    \"What did I eat for breakfast?\",\n    k=4,\n    filter={\"source\": \"tweet\"},\n)\nfor res, _ in results:\n    print(f\"* {res.page_content} [{res.metadata}]\")\n```\n\n#### Query by turning into retriever\n\nYou can also transform the vector store into a retriever for easier usage in your chains.\n\nHere's how to transform your vector store into a retriever and then invoke the retriever with a simple query and filter.\n\n```python\nretriever = vector_store.as_retriever(\n    search_kwargs={\"k\": 2},\n)\nresults = retriever.invoke(\n    \"Stealing from the bank is a crime\", filter={\"source\": \"news\"}\n)\nfor res in results:\n    print(f\"* {res.page_content} [{res.metadata}]\")\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fydb-platform%2Flangchain-ydb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fydb-platform%2Flangchain-ydb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fydb-platform%2Flangchain-ydb/lists"}