Files
wehub-resource-sync a0c8464e58
Build Package / build (ubuntu-latest) (push) Failing after 1s
CodeQL / Analyze (python) (push) Failing after 1s
Core Typecheck / core-typecheck (push) Failing after 1s
Linting / lint (push) Failing after 1s
llama-dev tests / test-llama-dev (push) Failing after 1s
Publish Sub-Package to PyPI if Needed / publish_subpackage_if_needed (push) Has been skipped
Sync Docs to Developer Hub / sync-docs (push) Failing after 0s
Build Package / build (windows-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:26:52 +08:00

217 lines
5.1 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Hnswlib\n",
"\n",
"Hnswlib is a fast approximate nearest neighbor search index. It's a lightweight, header-only C++ HNSW implementation that has no dependencies other than C++11. Hnswlib provides python bindings."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%pip install llama-index\n",
"%pip install llama-index-vector-stores-hnswlib\n",
"%pip install llama-index-embeddings-huggingface\n",
"%pip install hnswlib"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Import package dependencies"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from llama_index.vector_stores.hnswlib import HnswlibVectorStore\n",
"from llama_index.core import (\n",
" VectorStoreIndex,\n",
" StorageContext,\n",
" SimpleDirectoryReader,\n",
")\n",
"from llama_index.embeddings.huggingface import HuggingFaceEmbedding"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Load example data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!mkdir -p 'data/paul_graham/'\n",
"!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Read the data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"documents = SimpleDirectoryReader(\"./data/paul_graham/\").load_data()\n",
"print(f\"Total documents: {len(documents)}\")\n",
"print(f\"First document, id: {documents[0].doc_id}\")\n",
"print(f\"First document, hash: {documents[0].hash}\")\n",
"print(\n",
" \"First document, text\"\n",
" f\" ({len(documents[0].text)} characters):\\n{'='*20}\\n{documents[0].text[:360]} ...\"\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Load the embedding model"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"embed_model = HuggingFaceEmbedding(\n",
" model_name=\"sentence-transformers/all-MiniLM-L6-v2\",\n",
" normalize=True,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create Hnswlib Vector Store object from Hnswlib.Index parameters"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"hnswlib_vector_store = HnswlibVectorStore.from_params(\n",
" space=\"ip\",\n",
" dimension=embed_model._model.get_sentence_embedding_dimension(),\n",
" max_elements=1000,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Alternatively, You can create a Hnswlib.Index object Yourself."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import hnswlib\n",
"\n",
"index = hnswlib.Index(\n",
" \"ip\", embed_model._model.get_sentence_embedding_dimension()\n",
")\n",
"index.init_index(max_elements=1000)\n",
"\n",
"hnswlib_vector_store = HnswlibVectorStore(index)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Build index from documents"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"hnswlib_storage_context = StorageContext.from_defaults(\n",
" vector_store=hnswlib_vector_store\n",
")\n",
"hnswlib_index = VectorStoreIndex.from_documents(\n",
" documents,\n",
" storage_context=hnswlib_storage_context,\n",
" embed_model=embed_model,\n",
" show_progress=True,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Query index"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"k = 5\n",
"query = \"Before college I wrote what begginers should write.\"\n",
"hnswlib_vector_retriever = hnswlib_index.as_retriever(similarity_top_k=k)\n",
"nodes_with_scores = nodes_with_scores = hnswlib_vector_retriever.retrieve(\n",
" query\n",
")\n",
"for node in nodes_with_scores:\n",
" print(f\"Node {node.id_} | Score: {node.score:.3f} - {node.text[:120]}...\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "llama-index-hd-gQzJx-py3.10",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}