diff --git a/docs/extras/use_cases/more/graph/graph_falkordb_qa.ipynb b/docs/extras/use_cases/more/graph/graph_falkordb_qa.ipynb index c43e2329750..9edb18785f0 100644 --- a/docs/extras/use_cases/more/graph/graph_falkordb_qa.ipynb +++ b/docs/extras/use_cases/more/graph/graph_falkordb_qa.ipynb @@ -33,6 +33,13 @@ "from langchain.chains import FalkorDBQAChain" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create a graph connection and insert some demo data." + ] + }, { "cell_type": "code", "execution_count": 2, @@ -44,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -53,38 +60,72 @@ "[]" ] }, - "execution_count": 8, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "graph.query(\n", - " \"\"\"\n", - "MERGE (m:Movie {name:\"Top Gun\"})\n", - "WITH m\n", - "UNWIND [\"Tom Cruise\", \"Val Kilmer\", \"Anthony Edwards\", \"Meg Ryan\"] AS actor\n", - "MERGE (a:Actor {name:actor})\n", - "MERGE (a)-[:ACTED_IN]->(m)\n", - "\"\"\"\n", - ")" + "graph.query(\"\"\"\n", + " CREATE \n", + " (al:Person {name: 'Al Pacino', birthDate: '1940-04-25'}),\n", + " (robert:Person {name: 'Robert De Niro', birthDate: '1943-08-17'}),\n", + " (tom:Person {name: 'Tom Cruise', birthDate: '1962-07-3'}),\n", + " (val:Person {name: 'Val Kilmer', birthDate: '1959-12-31'}),\n", + " (anthony:Person {name: 'Anthony Edwards', birthDate: '1962-7-19'}),\n", + " (meg:Person {name: 'Meg Ryan', birthDate: '1961-11-19'}),\n", + "\n", + " (god1:Movie {title: 'The Godfather'}),\n", + " (god2:Movie {title: 'The Godfather: Part II'}),\n", + " (god3:Movie {title: 'The Godfather Coda: The Death of Michael Corleone'}),\n", + " (top:Movie {title: 'Top Gun'}),\n", + "\n", + " (al)-[:ACTED_IN]->(god1),\n", + " (al)-[:ACTED_IN]->(god2),\n", + " (al)-[:ACTED_IN]->(god3),\n", + " (robert)-[:ACTED_IN]->(god2),\n", + " (tom)-[:ACTED_IN]->(top),\n", + " (val)-[:ACTED_IN]->(top),\n", + " (anthony)-[:ACTED_IN]->(top),\n", + " (meg)-[:ACTED_IN]->(top)\n", + "\"\"\")" ] }, { - "cell_type": "code", - "execution_count": 4, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "graph.refresh_schema()\n", - "import os\n", - "os.environ['OPENAI_API_KEY']='API_KEY_HERE'\n" + "### Creating FalkorDBQAChain" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Node properties: [[OrderedDict([('label', None), ('properties', ['name', 'birthDate', 'title'])])]]\n", + "Relationships properties: [[OrderedDict([('type', None), ('properties', [])])]]\n", + "Relationships: [['(:Person)-[:ACTED_IN]->(:Movie)']]\n", + "\n" + ] + } + ], + "source": [ + "graph.refresh_schema()\n", + "print(graph.schema)\n", + "\n", + "import os\n", + "os.environ['OPENAI_API_KEY']='API_KEY_HERE'" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, "outputs": [], "source": [ "chain = FalkorDBQAChain.from_llm(\n", @@ -92,9 +133,16 @@ ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Querying the graph" + ] + }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -105,10 +153,11 @@ "\n", "\u001b[1m> Entering new FalkorDBQAChain chain...\u001b[0m\n", "Generated Cypher:\n", - "\u001b[32;1m\u001b[1;3mMATCH (:Movie {title: 'Top Gun'})<-[:ACTED_IN]-(actor:Person)\n", - "RETURN actor.name AS output\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mMATCH (p:Person)-[:ACTED_IN]->(m:Movie)\n", + "WHERE m.title = 'Top Gun'\n", + "RETURN p.name\u001b[0m\n", "Full Context:\n", - "\u001b[32;1m\u001b[1;3m[]\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m[['Tom Cruise'], ['Val Kilmer'], ['Anthony Edwards'], ['Meg Ryan'], ['Tom Cruise'], ['Val Kilmer'], ['Anthony Edwards'], ['Meg Ryan']]\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -116,7 +165,7 @@ { "data": { "text/plain": [ - "'The actor who played in Top Gun is Tom Cruise.'" + "'Tom Cruise, Val Kilmer, Anthony Edwards, and Meg Ryan played in Top Gun.'" ] }, "execution_count": 7, @@ -127,6 +176,81 @@ "source": [ "chain.run(\"Who played in Top Gun?\")" ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new FalkorDBQAChain chain...\u001b[0m\n", + "Generated Cypher:\n", + "\u001b[32;1m\u001b[1;3mMATCH (p:Person)-[r:ACTED_IN]->(m:Movie)\n", + "WHERE m.title = 'The Godfather: Part II'\n", + "RETURN p.name\n", + "ORDER BY p.birthDate ASC\n", + "LIMIT 1\u001b[0m\n", + "Full Context:\n", + "\u001b[32;1m\u001b[1;3m[['Al Pacino']]\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "'The oldest actor who played in The Godfather: Part II is Al Pacino.'" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chain.run(\"Who is the oldest actor who played in The Godfather: Part II?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new FalkorDBQAChain chain...\u001b[0m\n", + "Generated Cypher:\n", + "\u001b[32;1m\u001b[1;3mMATCH (p:Person {name: 'Robert De Niro'})-[:ACTED_IN]->(m:Movie)\n", + "RETURN m.title\u001b[0m\n", + "Full Context:\n", + "\u001b[32;1m\u001b[1;3m[['The Godfather: Part II'], ['The Godfather: Part II']]\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "'Robert De Niro played in \"The Godfather: Part II\".'" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chain.run(\"Robert De Niro played in which movies?\")" + ] } ], "metadata": { diff --git a/libs/langchain/langchain/graphs/falkordb_graph.py b/libs/langchain/langchain/graphs/falkordb_graph.py index 189189f6414..f74281b3c18 100644 --- a/libs/langchain/langchain/graphs/falkordb_graph.py +++ b/libs/langchain/langchain/graphs/falkordb_graph.py @@ -52,9 +52,9 @@ class FalkorDBGraph: def refresh_schema(self) -> None: """Refreshes the schema of the FalkorDB database""" self.schema = ( - f"Node properties: {node_properties_query}\n" - f"Relationships properties: {rel_properties_query}\n" - f"Relationships: {rel_query}\n" + f"Node properties: {self.query(node_properties_query)}\n" + f"Relationships properties: {self.query(rel_properties_query)}\n" + f"Relationships: {self.query(rel_query)}\n" ) def query(self, query: str, params: dict = {}) -> List[Dict[str, Any]]: