MongoDBAtlasVectorSearchRAGOpenAI
In [ ]:
Copied!
!pip install llama-index
!pip install llama-index-vector-stores-mongodb
[](https://nbviewer.org/github/aidoczh/llama_index_examples_zh/blob/main/examples/vector_stores/MongoDBAtlasVectorSearchRAGOpenAI.ipynb)
!pip install llama-index-embeddings-openai
!pip install pymongo
!pip install datasets
!pip install pandas
!pip install llama-index
!pip install llama-index-vector-stores-mongodb
[](https://nbviewer.org/github/aidoczh/llama_index_examples_zh/blob/main/examples/vector_stores/MongoDBAtlasVectorSearchRAGOpenAI.ipynb)
!pip install llama-index-embeddings-openai
!pip install pymongo
!pip install datasets
!pip install pandas
In [ ]:
Copied!
%env OPENAI_API_KEY=OPENAI_API_KEY
%env OPENAI_API_KEY=OPENAI_API_KEY
In [ ]:
Copied!
from datasets import load_datasetimport pandas as pd# https://huggingface.co/datasets/AIatMongoDB/embedded_movies# 加载数据集dataset = load_dataset("AIatMongoDB/embedded_movies")# 将数据集转换为pandas dataframedataset_df = pd.DataFrame(dataset["train"])dataset_df.head(5)
from datasets import load_datasetimport pandas as pd# https://huggingface.co/datasets/AIatMongoDB/embedded_movies# 加载数据集dataset = load_dataset("AIatMongoDB/embedded_movies")# 将数据集转换为pandas dataframedataset_df = pd.DataFrame(dataset["train"])dataset_df.head(5)
Out[ ]:
awards | metacritic | rated | fullplot | title | writers | languages | plot | plot_embedding | runtime | countries | genres | directors | cast | type | imdb | poster | num_mflix_comments | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | {'nominations': 0, 'text': '1 win.', 'wins': 1} | NaN | None | Young Pauline is left a lot of money when her ... | The Perils of Pauline | [Charles W. Goddard (screenplay), Basil Dickey... | [English] | Young Pauline is left a lot of money when her ... | [0.00072939653, -0.026834568, 0.013515796, -0.... | 199.0 | [USA] | [Action] | [Louis J. Gasnier, Donald MacKenzie] | [Pearl White, Crane Wilbur, Paul Panzer, Edwar... | movie | {'id': 4465, 'rating': 7.6, 'votes': 744} | https://m.media-amazon.com/images/M/MV5BMzgxOD... | 0 |
1 | {'nominations': 1, 'text': '1 nomination.', 'w... | NaN | TV-G | As a penniless man worries about how he will m... | From Hand to Mouth | [H.M. Walker (titles)] | [English] | A penniless young man tries to save an heiress... | [-0.022837115, -0.022941574, 0.014937485, -0.0... | 22.0 | [USA] | [Comedy, Short, Action] | [Alfred J. Goulding, Hal Roach] | [Harold Lloyd, Mildred Davis, 'Snub' Pollard, ... | movie | {'id': 10146, 'rating': 7.0, 'votes': 639} | https://m.media-amazon.com/images/M/MV5BNzE1OW... | 0 |
2 | {'nominations': 0, 'text': '1 win.', 'wins': 1} | NaN | None | Michael "Beau" Geste leaves England in disgrac... | Beau Geste | [Herbert Brenon (adaptation), John Russell (ad... | [English] | Michael "Beau" Geste leaves England in disgrac... | [0.00023330493, -0.028511643, 0.014653289, -0.... | 101.0 | [USA] | [Action, Adventure, Drama] | [Herbert Brenon] | [Ronald Colman, Neil Hamilton, Ralph Forbes, A... | movie | {'id': 16634, 'rating': 6.9, 'votes': 222} | None | 0 |
3 | {'nominations': 0, 'text': '1 win.', 'wins': 1} | NaN | None | A nobleman vows to avenge the death of his fat... | The Black Pirate | [Douglas Fairbanks (story), Jack Cunningham (a... | None | Seeking revenge, an athletic young man joins t... | [-0.005927917, -0.033394486, 0.0015323418, -0.... | 88.0 | [USA] | [Adventure, Action] | [Albert Parker] | [Billie Dove, Tempe Pigott, Donald Crisp, Sam ... | movie | {'id': 16654, 'rating': 7.2, 'votes': 1146} | https://m.media-amazon.com/images/M/MV5BMzU0ND... | 1 |
4 | {'nominations': 1, 'text': '1 nomination.', 'w... | NaN | PASSED | The Uptown Boy, J. Harold Manners (Lloyd) is a... | For Heaven's Sake | [Ted Wilde (story), John Grey (story), Clyde B... | [English] | An irresponsible young millionaire changes his... | [-0.0059373598, -0.026604708, -0.0070914757, -... | 58.0 | [USA] | [Action, Comedy, Romance] | [Sam Taylor] | [Harold Lloyd, Jobyna Ralston, Noah Young, Jim... | movie | {'id': 16895, 'rating': 7.6, 'votes': 918} | https://m.media-amazon.com/images/M/MV5BMTcxMT... | 0 |
In [ ]:
Copied!
# 删除fullplot列缺失的数据点dataset_df = dataset_df.dropna(subset=["fullplot"])print("\n删除后每列中缺失值的数量:")print(dataset_df.isnull().sum())# 从数据集中的每个数据点中删除plot_embedding,因为我们将使用新的OpenAI嵌入模型"text-embedding-3-small"创建新的嵌入dataset_df = dataset_df.drop(columns=["plot_embedding"])dataset_df.head(5)
# 删除fullplot列缺失的数据点dataset_df = dataset_df.dropna(subset=["fullplot"])print("\n删除后每列中缺失值的数量:")print(dataset_df.isnull().sum())# 从数据集中的每个数据点中删除plot_embedding,因为我们将使用新的OpenAI嵌入模型"text-embedding-3-small"创建新的嵌入dataset_df = dataset_df.drop(columns=["plot_embedding"])dataset_df.head(5)
Number of missing values in each column after removal: awards 0 metacritic 893 rated 279 fullplot 0 title 0 writers 13 languages 1 plot 0 plot_embedding 1 runtime 14 countries 0 genres 0 directors 12 cast 1 type 0 imdb 0 poster 78 num_mflix_comments 0 dtype: int64
Out[ ]:
awards | metacritic | rated | fullplot | title | writers | languages | plot | runtime | countries | genres | directors | cast | type | imdb | poster | num_mflix_comments | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | {'nominations': 0, 'text': '1 win.', 'wins': 1} | NaN | None | Young Pauline is left a lot of money when her ... | The Perils of Pauline | [Charles W. Goddard (screenplay), Basil Dickey... | [English] | Young Pauline is left a lot of money when her ... | 199.0 | [USA] | [Action] | [Louis J. Gasnier, Donald MacKenzie] | [Pearl White, Crane Wilbur, Paul Panzer, Edwar... | movie | {'id': 4465, 'rating': 7.6, 'votes': 744} | https://m.media-amazon.com/images/M/MV5BMzgxOD... | 0 |
1 | {'nominations': 1, 'text': '1 nomination.', 'w... | NaN | TV-G | As a penniless man worries about how he will m... | From Hand to Mouth | [H.M. Walker (titles)] | [English] | A penniless young man tries to save an heiress... | 22.0 | [USA] | [Comedy, Short, Action] | [Alfred J. Goulding, Hal Roach] | [Harold Lloyd, Mildred Davis, 'Snub' Pollard, ... | movie | {'id': 10146, 'rating': 7.0, 'votes': 639} | https://m.media-amazon.com/images/M/MV5BNzE1OW... | 0 |
2 | {'nominations': 0, 'text': '1 win.', 'wins': 1} | NaN | None | Michael "Beau" Geste leaves England in disgrac... | Beau Geste | [Herbert Brenon (adaptation), John Russell (ad... | [English] | Michael "Beau" Geste leaves England in disgrac... | 101.0 | [USA] | [Action, Adventure, Drama] | [Herbert Brenon] | [Ronald Colman, Neil Hamilton, Ralph Forbes, A... | movie | {'id': 16634, 'rating': 6.9, 'votes': 222} | None | 0 |
3 | {'nominations': 0, 'text': '1 win.', 'wins': 1} | NaN | None | A nobleman vows to avenge the death of his fat... | The Black Pirate | [Douglas Fairbanks (story), Jack Cunningham (a... | None | Seeking revenge, an athletic young man joins t... | 88.0 | [USA] | [Adventure, Action] | [Albert Parker] | [Billie Dove, Tempe Pigott, Donald Crisp, Sam ... | movie | {'id': 16654, 'rating': 7.2, 'votes': 1146} | https://m.media-amazon.com/images/M/MV5BMzU0ND... | 1 |
4 | {'nominations': 1, 'text': '1 nomination.', 'w... | NaN | PASSED | The Uptown Boy, J. Harold Manners (Lloyd) is a... | For Heaven's Sake | [Ted Wilde (story), John Grey (story), Clyde B... | [English] | An irresponsible young millionaire changes his... | 58.0 | [USA] | [Action, Comedy, Romance] | [Sam Taylor] | [Harold Lloyd, Jobyna Ralston, Noah Young, Jim... | movie | {'id': 16895, 'rating': 7.6, 'votes': 918} | https://m.media-amazon.com/images/M/MV5BMTcxMT... | 0 |
In [ ]:
Copied!
from llama_index.core.settings import Settings
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
embed_model = OpenAIEmbedding(model="text-embedding-3-small", dimensions=256)
llm = OpenAI()
Settings.llm = llm
Settings.embed_model = embed_model
from llama_index.core.settings import Settings
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
embed_model = OpenAIEmbedding(model="text-embedding-3-small", dimensions=256)
llm = OpenAI()
Settings.llm = llm
Settings.embed_model = embed_model
In [ ]:
Copied!
import jsonfrom llama_index.core import Documentfrom llama_index.core.schema import MetadataMode# 将DataFrame转换为JSON字符串表示documents_json = dataset_df.to_json(orient="records")# 将JSON字符串加载为Python字典列表documents_list = json.loads(documents_json)llama_documents = []for document in documents_list: # 元数据的值必须是(str, int, float, None)中的一种 document["writers"] = json.dumps(document["writers"]) document["languages"] = json.dumps(document["languages"]) document["genres"] = json.dumps(document["genres"]) document["cast"] = json.dumps(document["cast"]) document["directors"] = json.dumps(document["directors"]) document["countries"] = json.dumps(document["countries"]) document["imdb"] = json.dumps(document["imdb"]) document["awards"] = json.dumps(document["awards"]) # 使用文本和排除的元数据创建一个Document对象,用于llm和嵌入模型 llama_document = Document( text=document["fullplot"], metadata=document, excluded_llm_metadata_keys=["fullplot", "metacritic"], excluded_embed_metadata_keys=[ "fullplot", "metacritic", "poster", "num_mflix_comments", "runtime", "rated", ], metadata_template="{key}=>{value}", text_template="Metadata: {metadata_str}\n-----\nContent: {content}", ) llama_documents.append(llama_document)# 观察LLM和嵌入模型接收的输入示例print( "\nLLM看到的内容:\n", llama_documents[0].get_content(metadata_mode=MetadataMode.LLM),)print( "\n嵌入模型看到的内容:\n", llama_documents[0].get_content(metadata_mode=MetadataMode.EMBED),)
import jsonfrom llama_index.core import Documentfrom llama_index.core.schema import MetadataMode# 将DataFrame转换为JSON字符串表示documents_json = dataset_df.to_json(orient="records")# 将JSON字符串加载为Python字典列表documents_list = json.loads(documents_json)llama_documents = []for document in documents_list: # 元数据的值必须是(str, int, float, None)中的一种 document["writers"] = json.dumps(document["writers"]) document["languages"] = json.dumps(document["languages"]) document["genres"] = json.dumps(document["genres"]) document["cast"] = json.dumps(document["cast"]) document["directors"] = json.dumps(document["directors"]) document["countries"] = json.dumps(document["countries"]) document["imdb"] = json.dumps(document["imdb"]) document["awards"] = json.dumps(document["awards"]) # 使用文本和排除的元数据创建一个Document对象,用于llm和嵌入模型 llama_document = Document( text=document["fullplot"], metadata=document, excluded_llm_metadata_keys=["fullplot", "metacritic"], excluded_embed_metadata_keys=[ "fullplot", "metacritic", "poster", "num_mflix_comments", "runtime", "rated", ], metadata_template="{key}=>{value}", text_template="Metadata: {metadata_str}\n-----\nContent: {content}", ) llama_documents.append(llama_document)# 观察LLM和嵌入模型接收的输入示例print( "\nLLM看到的内容:\n", llama_documents[0].get_content(metadata_mode=MetadataMode.LLM),)print( "\n嵌入模型看到的内容:\n", llama_documents[0].get_content(metadata_mode=MetadataMode.EMBED),)
The LLM sees this: Metadata: awards=>{"nominations": 0, "text": "1 win.", "wins": 1} rated=>None title=>The Perils of Pauline writers=>["Charles W. Goddard (screenplay)", "Basil Dickey (screenplay)", "Charles W. Goddard (novel)", "George B. Seitz", "Bertram Millhauser"] languages=>["English"] plot=>Young Pauline is left a lot of money when her wealthy uncle dies. However, her uncle's secretary has been named as her guardian until she marries, at which time she will officially take ... runtime=>199.0 countries=>["USA"] genres=>["Action"] directors=>["Louis J. Gasnier", "Donald MacKenzie"] cast=>["Pearl White", "Crane Wilbur", "Paul Panzer", "Edward Jos\u00e8"] type=>movie imdb=>{"id": 4465, "rating": 7.6, "votes": 744} poster=>https://m.media-amazon.com/images/M/MV5BMzgxODk1Mzk2Ml5BMl5BanBnXkFtZTgwMDg0NzkwMjE@._V1_SY1000_SX677_AL_.jpg num_mflix_comments=>0 ----- Content: Young Pauline is left a lot of money when her wealthy uncle dies. However, her uncle's secretary has been named as her guardian until she marries, at which time she will officially take possession of her inheritance. Meanwhile, her "guardian" and his confederates constantly come up with schemes to get rid of Pauline so that he can get his hands on the money himself. The Embedding model sees this: Metadata: awards=>{"nominations": 0, "text": "1 win.", "wins": 1} title=>The Perils of Pauline writers=>["Charles W. Goddard (screenplay)", "Basil Dickey (screenplay)", "Charles W. Goddard (novel)", "George B. Seitz", "Bertram Millhauser"] languages=>["English"] plot=>Young Pauline is left a lot of money when her wealthy uncle dies. However, her uncle's secretary has been named as her guardian until she marries, at which time she will officially take ... countries=>["USA"] genres=>["Action"] directors=>["Louis J. Gasnier", "Donald MacKenzie"] cast=>["Pearl White", "Crane Wilbur", "Paul Panzer", "Edward Jos\u00e8"] type=>movie imdb=>{"id": 4465, "rating": 7.6, "votes": 744} ----- Content: Young Pauline is left a lot of money when her wealthy uncle dies. However, her uncle's secretary has been named as her guardian until she marries, at which time she will officially take possession of her inheritance. Meanwhile, her "guardian" and his confederates constantly come up with schemes to get rid of Pauline so that he can get his hands on the money himself.
In [ ]:
Copied!
llama_documents[0]
llama_documents[0]
In [ ]:
Copied!
from llama_index.core.node_parser import SentenceSplitter
parser = SentenceSplitter()
nodes = parser.get_nodes_from_documents(llama_documents)
for node in nodes:
node_embedding = embed_model.get_text_embedding(
node.get_content(metadata_mode="all")
)
node.embedding = node_embedding
from llama_index.core.node_parser import SentenceSplitter
parser = SentenceSplitter()
nodes = parser.get_nodes_from_documents(llama_documents)
for node in nodes:
node_embedding = embed_model.get_text_embedding(
node.get_content(metadata_mode="all")
)
node.embedding = node_embedding
In [ ]:
Copied!
import pymongofrom google.colab import userdatadef get_mongo_client(mongo_uri): """建立与MongoDB的连接。""" try: client = pymongo.MongoClient(mongo_uri) print("成功连接到MongoDB") return client except pymongo.errors.ConnectionFailure as e: print(f"连接失败:{e}") return Nonemongo_uri = userdata.get("MONGO_URI")if not mongo_uri: print("环境变量中未设置MONGO_URI")mongo_client = get_mongo_client(mongo_uri)DB_NAME = "movies"COLLECTION_NAME = "movies_records"db = mongo_client[DB_NAME]collection = db[COLLECTION_NAME]
import pymongofrom google.colab import userdatadef get_mongo_client(mongo_uri): """建立与MongoDB的连接。""" try: client = pymongo.MongoClient(mongo_uri) print("成功连接到MongoDB") return client except pymongo.errors.ConnectionFailure as e: print(f"连接失败:{e}") return Nonemongo_uri = userdata.get("MONGO_URI")if not mongo_uri: print("环境变量中未设置MONGO_URI")mongo_client = get_mongo_client(mongo_uri)DB_NAME = "movies"COLLECTION_NAME = "movies_records"db = mongo_client[DB_NAME]collection = db[COLLECTION_NAME]
Connection to MongoDB successful
In [ ]:
Copied!
# 确保我们使用的是一个全新的集合# 删除集合中的所有现有记录collection.delete_many({})
# 确保我们使用的是一个全新的集合# 删除集合中的所有现有记录collection.delete_many({})
Out[ ]:
DeleteResult({'n': 0, 'electionId': ObjectId('7fffffff000000000000000a'), 'opTime': {'ts': Timestamp(1708000722, 1), 't': 10}, 'ok': 1.0, '$clusterTime': {'clusterTime': Timestamp(1708000722, 1), 'signature': {'hash': b'\xd8\x1a\xaci\xf5EN+\xe2\xd1\xb3y8.${u5P\xf3', 'keyId': 7320226449804230661}}, 'operationTime': Timestamp(1708000722, 1)}, acknowledged=True)
In [ ]:
Copied!
from llama_index.vector_stores.mongodb import MongoDBAtlasVectorSearch
vector_store = MongoDBAtlasVectorSearch(
mongo_client,
db_name=DB_NAME,
collection_name=COLLECTION_NAME,
index_name="vector_index",
)
vector_store.add(nodes)
from llama_index.vector_stores.mongodb import MongoDBAtlasVectorSearch
vector_store = MongoDBAtlasVectorSearch(
mongo_client,
db_name=DB_NAME,
collection_name=COLLECTION_NAME,
index_name="vector_index",
)
vector_store.add(nodes)
In [ ]:
Copied!
from llama_index.core import VectorStoreIndex, StorageContext
index = VectorStoreIndex.from_vector_store(vector_store)
from llama_index.core import VectorStoreIndex, StorageContext
index = VectorStoreIndex.from_vector_store(vector_store)
In [ ]:
Copied!
import pprint
from llama_index.core.response.notebook_utils import display_response
query_engine = index.as_query_engine(similarity_top_k=3)
query = "Recommend a romantic movie suitable for the christmas season and justify your selecton"
response = query_engine.query(query)
display_response(response)
pprint.pprint(response.source_nodes)
import pprint
from llama_index.core.response.notebook_utils import display_response
query_engine = index.as_query_engine(similarity_top_k=3)
query = "Recommend a romantic movie suitable for the christmas season and justify your selecton"
response = query_engine.query(query)
display_response(response)
pprint.pprint(response.source_nodes)
Final Response:
The movie "Romancing the Stone" would be a suitable romantic movie for the Christmas season. It is a romantic adventure film that follows a romance writer who sets off on a dangerous adventure to rescue her kidnapped sister. The movie has elements of romance, adventure, and comedy, making it an entertaining choice for the holiday season. Additionally, the movie has received positive reviews and has been nominated for awards, indicating its quality.
[NodeWithScore(node=TextNode(id_='c6bbc236-e21d-49ab-b43d-db920b4946e6', embedding=None, metadata={'awards': '{"nominations": 2, "text": "Nominated for 1 Oscar. Another 6 wins & 2 nominations.", "wins": 7}', 'metacritic': None, 'rated': 'PG', 'fullplot': "Joan Wilder, a mousy romance novelist, receives a treasure map in the mail from her recently murdered brother-in-law. Meanwhile, her sister Elaine is kidnapped in Colombia and the two criminals responsible demand that she travel to Colombia to exchange the map for her sister. Joan does, and quickly becomes lost in the jungle after being waylayed by Zolo, a vicious and corrupt Colombian cop who will stop at nothing to obtain the map. There, she meets an irreverent soldier-of-fortune named Jack Colton who agrees to bring her back to civilization. Together, they embark upon an adventure that could be straight out of Joan's novels.", 'title': 'Romancing the Stone', 'writers': '["Diane Thomas"]', 'languages': '["English", "Spanish", "French"]', 'plot': 'A romance writer sets off to Colombia to ransom her kidnapped sister, and soon finds herself in the middle of a dangerous adventure.', 'runtime': 106.0, 'countries': '["USA", "Mexico"]', 'genres': '["Action", "Adventure", "Comedy"]', 'directors': '["Robert Zemeckis"]', 'cast': '["Michael Douglas", "Kathleen Turner", "Danny DeVito", "Zack Norman"]', 'type': 'movie', 'imdb': '{"id": 88011, "rating": 6.9, "votes": 59403}', 'poster': 'https://m.media-amazon.com/images/M/MV5BMDAwNjljMzEtMTc3Yy00NDg2LThjNDAtNjc0NGYyYjM2M2I1XkEyXkFqcGdeQXVyNDE5MTU2MDE@._V1_SY1000_SX677_AL_.jpg', 'num_mflix_comments': 0}, excluded_embed_metadata_keys=['fullplot', 'metacritic', 'poster', 'num_mflix_comments', 'runtime', 'rated'], excluded_llm_metadata_keys=['fullplot', 'metacritic'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='e50144b0-96ba-4a5a-b90a-3a2419f5b380', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'awards': '{"nominations": 2, "text": "Nominated for 1 Oscar. Another 6 wins & 2 nominations.", "wins": 7}', 'metacritic': None, 'rated': 'PG', 'fullplot': "Joan Wilder, a mousy romance novelist, receives a treasure map in the mail from her recently murdered brother-in-law. Meanwhile, her sister Elaine is kidnapped in Colombia and the two criminals responsible demand that she travel to Colombia to exchange the map for her sister. Joan does, and quickly becomes lost in the jungle after being waylayed by Zolo, a vicious and corrupt Colombian cop who will stop at nothing to obtain the map. There, she meets an irreverent soldier-of-fortune named Jack Colton who agrees to bring her back to civilization. Together, they embark upon an adventure that could be straight out of Joan's novels.", 'title': 'Romancing the Stone', 'writers': '["Diane Thomas"]', 'languages': '["English", "Spanish", "French"]', 'plot': 'A romance writer sets off to Colombia to ransom her kidnapped sister, and soon finds herself in the middle of a dangerous adventure.', 'runtime': 106.0, 'countries': '["USA", "Mexico"]', 'genres': '["Action", "Adventure", "Comedy"]', 'directors': '["Robert Zemeckis"]', 'cast': '["Michael Douglas", "Kathleen Turner", "Danny DeVito", "Zack Norman"]', 'type': 'movie', 'imdb': '{"id": 88011, "rating": 6.9, "votes": 59403}', 'poster': 'https://m.media-amazon.com/images/M/MV5BMDAwNjljMzEtMTc3Yy00NDg2LThjNDAtNjc0NGYyYjM2M2I1XkEyXkFqcGdeQXVyNDE5MTU2MDE@._V1_SY1000_SX677_AL_.jpg', 'num_mflix_comments': 0}, hash='b984e4f203b7b67eae14afa890718adb800a5816661ac2edf412aa96fd7dc10b'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='f895e43a-038a-4a1c-8a82-0e22868e35d7', node_type=<ObjectType.TEXT: '1'>, metadata={'awards': '{"nominations": 1, "text": "1 nomination.", "wins": 0}', 'metacritic': None, 'rated': 'R', 'fullplot': "Chicago psychiatrist Judd Stevens (Roger Moore) is suspected of murdering one of his patients when the man turns up stabbed to death in the middle of the city. After repeated attempts to convince cops Rod Steiger and Elliott Gould of his innocence, Dr.Stevens is forced to go after the real villains himself, and he finds himself up against one of the city's most notorious Mafia kingpins.", 'title': 'The Naked Face', 'writers': '["Bryan Forbes", "Sidney Sheldon (novel)"]', 'languages': '["English"]', 'plot': 'Chicago psychiatrist Judd Stevens (Roger Moore) is suspected of murdering one of his patients when the man turns up stabbed to death in the middle of the city. After repeated attempts to ...', 'runtime': 103.0, 'countries': '["USA"]', 'genres': '["Action", "Mystery", "Thriller"]', 'directors': '["Bryan Forbes"]', 'cast': '["Roger Moore", "Rod Steiger", "Elliott Gould", "Art Carney"]', 'type': 'movie', 'imdb': '{"id": 87777, "rating": 5.3, "votes": 654}', 'poster': 'https://m.media-amazon.com/images/M/MV5BMTg0NDM4MTY0NV5BMl5BanBnXkFtZTcwNTcwOTc2NA@@._V1_SY1000_SX677_AL_.jpg', 'num_mflix_comments': 1}, hash='066e2b3d12c5fab61175f52dd625ec41fb1fce1fe6fe4c892774227c576fdbbd'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='e31f1142-c6b6-4183-b14b-1634166b9d1f', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='9b9127e21d18792749a7a35321e04d29b8d77f7b454b0133205f9de1090038b4')}, text="Joan Wilder, a mousy romance novelist, receives a treasure map in the mail from her recently murdered brother-in-law. Meanwhile, her sister Elaine is kidnapped in Colombia and the two criminals responsible demand that she travel to Colombia to exchange the map for her sister. Joan does, and quickly becomes lost in the jungle after being waylayed by Zolo, a vicious and corrupt Colombian cop who will stop at nothing to obtain the map. There, she meets an irreverent soldier-of-fortune named Jack Colton who agrees to bring her back to civilization. Together, they embark upon an adventure that could be straight out of Joan's novels.", start_char_idx=0, end_char_idx=635, text_template='Metadata: {metadata_str}\n-----\nContent: {content}', metadata_template='{key}=>{value}', metadata_seperator='\n'), score=0.7502920627593994), NodeWithScore(node=TextNode(id_='5c7cef95-79e3-4c96-a009-4154ea125240', embedding=None, metadata={'awards': '{"nominations": 2, "text": "Nominated for 2 Oscars. Another 1 win & 2 nominations.", "wins": 3}', 'metacritic': 64.0, 'rated': 'PG-13', 'fullplot': 'In 1880, four men travel together to the city of Silverado. They come across with many dangers before they finally engage the "bad guys" and bring peace and equality back to the city.', 'title': 'Silverado', 'writers': '["Lawrence Kasdan", "Mark Kasdan"]', 'languages': '["English"]', 'plot': 'A misfit bunch of friends come together to right the injustices which exist in a small town.', 'runtime': 133.0, 'countries': '["USA"]', 'genres': '["Action", "Crime", "Drama"]', 'directors': '["Lawrence Kasdan"]', 'cast': '["Kevin Kline", "Scott Glenn", "Kevin Costner", "Danny Glover"]', 'type': 'movie', 'imdb': '{"id": 90022, "rating": 7.2, "votes": 26415}', 'poster': 'https://m.media-amazon.com/images/M/MV5BYTljNTE5YmUtMGEyZi00ZjI4LWEzYjUtZDY2YWEwNzVmZjRkXkEyXkFqcGdeQXVyNTI4MjkwNjA@._V1_SY1000_SX677_AL_.jpg', 'num_mflix_comments': 1}, excluded_embed_metadata_keys=['fullplot', 'metacritic', 'poster', 'num_mflix_comments', 'runtime', 'rated'], excluded_llm_metadata_keys=['fullplot', 'metacritic'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='decbc30c-c17e-4ba4-bd1e-72dce4ce383a', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'awards': '{"nominations": 2, "text": "Nominated for 2 Oscars. Another 1 win & 2 nominations.", "wins": 3}', 'metacritic': 64.0, 'rated': 'PG-13', 'fullplot': 'In 1880, four men travel together to the city of Silverado. They come across with many dangers before they finally engage the "bad guys" and bring peace and equality back to the city.', 'title': 'Silverado', 'writers': '["Lawrence Kasdan", "Mark Kasdan"]', 'languages': '["English"]', 'plot': 'A misfit bunch of friends come together to right the injustices which exist in a small town.', 'runtime': 133.0, 'countries': '["USA"]', 'genres': '["Action", "Crime", "Drama"]', 'directors': '["Lawrence Kasdan"]', 'cast': '["Kevin Kline", "Scott Glenn", "Kevin Costner", "Danny Glover"]', 'type': 'movie', 'imdb': '{"id": 90022, "rating": 7.2, "votes": 26415}', 'poster': 'https://m.media-amazon.com/images/M/MV5BYTljNTE5YmUtMGEyZi00ZjI4LWEzYjUtZDY2YWEwNzVmZjRkXkEyXkFqcGdeQXVyNTI4MjkwNjA@._V1_SY1000_SX677_AL_.jpg', 'num_mflix_comments': 1}, hash='80b77d835c7dfad9d57d300cf69ba388704e6f282f49dc23106489db03b8b441'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='1c04fb7f-ff8f-4e8c-84f6-74c57251446a', node_type=<ObjectType.TEXT: '1'>, metadata={'awards': '{"nominations": 5, "text": "Nominated for 3 Oscars. Another 2 wins & 5 nominations.", "wins": 5}', 'metacritic': None, 'rated': 'R', 'fullplot': 'A hardened convict and a younger prisoner escape from a brutal prison in the middle of winter only to find themselves on an out-of-control train with a female railway worker while being pursued by the vengeful head of security.', 'title': 'Runaway Train', 'writers': '["Djordje Milicevic (screenplay)", "Paul Zindel (screenplay)", "Edward Bunker (screenplay)", "Akira Kurosawa (based on a screenplay by)"]', 'languages': '["English"]', 'plot': 'Two escaped convicts and a female railway worker find themselves trapped on a train with no brakes and nobody driving.', 'runtime': 111.0, 'countries': '["USA"]', 'genres': '["Action", "Adventure", "Drama"]', 'directors': '["Andrey Konchalovskiy"]', 'cast': '["Jon Voight", "Eric Roberts", "Rebecca De Mornay", "Kyle T. Heffner"]', 'type': 'movie', 'imdb': '{"id": 89941, "rating": 7.3, "votes": 19652}', 'poster': 'https://m.media-amazon.com/images/M/MV5BODQyYWU1NGUtNjEzYS00YmNhLTk1YWEtZDdlZGQzMTI4MTI1XkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_SY1000_SX677_AL_.jpg', 'num_mflix_comments': 0}, hash='378c16de972df97080db94775cd46e57f6a0dd5a7472b357e0285eed2e3b7775'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='5df9410b-6597-45f4-95d5-fee1db8737b1', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='77e93faace9b0e102635d3ca997ff27bc03dbba66eaa2d830f0634289d16d927')}, text='In 1880, four men travel together to the city of Silverado. They come across with many dangers before they finally engage the "bad guys" and bring peace and equality back to the city.', start_char_idx=0, end_char_idx=183, text_template='Metadata: {metadata_str}\n-----\nContent: {content}', metadata_template='{key}=>{value}', metadata_seperator='\n'), score=0.7419796586036682), NodeWithScore(node=TextNode(id_='ff28e815-5db5-4963-a9b8-99c64716eb00', embedding=None, metadata={'awards': '{"nominations": 1, "text": "1 nomination.", "wins": 0}', 'metacritic': None, 'rated': 'PASSED', 'fullplot': "Dick Powell stars as Haven, a government private investigator assigned to investigate the murders of two cavalrymen. Travelling incognito, Haven arrives in a small frontier outpost, where saloon singer Charlie controls all illegal activities. After making short work of Charlie's burly henchman, Haven gets a job at her gambling emporium, biding his time and gathering evidence against the gorgeous crime chieftain Cast as a philosophical bartender, Burl Ives is afforded at least one opportunity to sing.", 'title': 'Station West', 'writers': '["Frank Fenton (screenplay)", "Winston Miller (screenplay)", "Luke Short (novel)"]', 'languages': '["English"]', 'plot': 'When two US cavalrymen transporting a gold shipment get killed, US Army Intelligence investigator John Haven goes undercover to a mining and logging town to find the killers.', 'runtime': 87.0, 'countries': '["USA"]', 'genres': '["Action", "Mystery", "Romance"]', 'directors': '["Sidney Lanfield"]', 'cast': '["Dick Powell", "Jane Greer", "Agnes Moorehead", "Burl Ives"]', 'type': 'movie', 'imdb': '{"id": 40835, "rating": 6.8, "votes": 578}', 'poster': 'https://m.media-amazon.com/images/M/MV5BN2U3YWJjOWItOWY3Yy00NTMxLTkxMGUtOTQ1MzEzODM2MjRjXkEyXkFqcGdeQXVyNTk1MTk0MDI@._V1_SY1000_SX677_AL_.jpg', 'num_mflix_comments': 1}, excluded_embed_metadata_keys=['fullplot', 'metacritic', 'poster', 'num_mflix_comments', 'runtime', 'rated'], excluded_llm_metadata_keys=['fullplot', 'metacritic'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='b04254ab-2edb-47c1-9412-646575747ca8', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'awards': '{"nominations": 1, "text": "1 nomination.", "wins": 0}', 'metacritic': None, 'rated': 'PASSED', 'fullplot': "Dick Powell stars as Haven, a government private investigator assigned to investigate the murders of two cavalrymen. Travelling incognito, Haven arrives in a small frontier outpost, where saloon singer Charlie controls all illegal activities. After making short work of Charlie's burly henchman, Haven gets a job at her gambling emporium, biding his time and gathering evidence against the gorgeous crime chieftain Cast as a philosophical bartender, Burl Ives is afforded at least one opportunity to sing.", 'title': 'Station West', 'writers': '["Frank Fenton (screenplay)", "Winston Miller (screenplay)", "Luke Short (novel)"]', 'languages': '["English"]', 'plot': 'When two US cavalrymen transporting a gold shipment get killed, US Army Intelligence investigator John Haven goes undercover to a mining and logging town to find the killers.', 'runtime': 87.0, 'countries': '["USA"]', 'genres': '["Action", "Mystery", "Romance"]', 'directors': '["Sidney Lanfield"]', 'cast': '["Dick Powell", "Jane Greer", "Agnes Moorehead", "Burl Ives"]', 'type': 'movie', 'imdb': '{"id": 40835, "rating": 6.8, "votes": 578}', 'poster': 'https://m.media-amazon.com/images/M/MV5BN2U3YWJjOWItOWY3Yy00NTMxLTkxMGUtOTQ1MzEzODM2MjRjXkEyXkFqcGdeQXVyNTk1MTk0MDI@._V1_SY1000_SX677_AL_.jpg', 'num_mflix_comments': 1}, hash='90f541ac96dcffa4ac639e6ac25da415471164bf8d7930a29b6aed406d631ede'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='a48d8737-8615-48c1-9d4a-1ee127e34fb9', node_type=<ObjectType.TEXT: '1'>, metadata={'awards': '{"nominations": 1, "text": "1 nomination.", "wins": 0}', 'metacritic': None, 'rated': 'PASSED', 'fullplot': 'Jefty, owner of a roadhouse in a backwoods town, hires sultry, tough-talking torch singer Lily Stevens against the advice of his manager Pete Morgan. Jefty is smitten with Lily, who in turn exerts her charms on the more resistant Pete. When Pete finally falls for her and she turns down Jefty\'s marriage proposal, they must face Jefty\'s murderous jealousy and his twisted plots to "punish" the two.', 'title': 'Road House', 'writers': '["Edward Chodorov (screen play)", "Margaret Gruen (story)", "Oscar Saul (story)"]', 'languages': '["English"]', 'plot': 'A night club owner becomes infatuated with a torch singer and frames his best friend/manager for embezzlement when the chanteuse falls in love with him.', 'runtime': 95.0, 'countries': '["USA"]', 'genres': '["Action", "Drama", "Film-Noir"]', 'directors': '["Jean Negulesco"]', 'cast': '["Ida Lupino", "Cornel Wilde", "Celeste Holm", "Richard Widmark"]', 'type': 'movie', 'imdb': '{"id": 40740, "rating": 7.3, "votes": 1353}', 'poster': 'https://m.media-amazon.com/images/M/MV5BMjc1ZTNkM2UtYzY3Yi00ZWZmLTljYmEtNjYxZDNmYzk2ZjkzXkEyXkFqcGdeQXVyMjUxODE0MDY@._V1_SY1000_SX677_AL_.jpg', 'num_mflix_comments': 2}, hash='040b4a77fcc8fbb5347620e99a217d67b85dcdbd370d91bd23877722a499079f'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='75f37fbc-d75e-4a76-b86f-f15d9260afd1', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='9941706d03783561f3fc3200c26527493a62307f8532dcda60b20948c886b330')}, text="Dick Powell stars as Haven, a government private investigator assigned to investigate the murders of two cavalrymen. Travelling incognito, Haven arrives in a small frontier outpost, where saloon singer Charlie controls all illegal activities. After making short work of Charlie's burly henchman, Haven gets a job at her gambling emporium, biding his time and gathering evidence against the gorgeous crime chieftain Cast as a philosophical bartender, Burl Ives is afforded at least one opportunity to sing.", start_char_idx=0, end_char_idx=505, text_template='Metadata: {metadata_str}\n-----\nContent: {content}', metadata_template='{key}=>{value}', metadata_seperator='\n'), score=0.7337073087692261)]