neo4j-partners / neo4j-generative-ai-google-cloud Goto Github PK
View Code? Open in Web Editor NEWDemonstration application showing how Neo4j works with Google Vertex AI Generative AI
License: Apache License 2.0
Demonstration application showing how Neo4j works with Google Vertex AI Generative AI
License: Apache License 2.0
When running a Cypher query using GraphCypherQAChain
, a syntax error is encountered due to the cypher_prompt
parameter setting. The generated Cypher statement incorrectly starts with the prefix "Answer:", which seems to cause a CypherSyntaxError
.
conda create env
)from langchain.chains import GraphCypherQAChain
from langchain.graphs import Neo4jGraph
from langchain.llms import VertexAI
from langchain.prompts.prompt import PromptTemplate
CYPHER_GENERATION_TEMPLATE = """[...as given above...]"""
CYPHER_GENERATION_PROMPT = PromptTemplate(
input_variables=["schema", "question"], template=CYPHER_GENERATION_TEMPLATE
)
graph = Neo4jGraph(
url=connectionUrl,
username='neo4j',
password=password
)
chain = GraphCypherQAChain.from_llm(
VertexAI(model_name='code-bison',
max_output_tokens=2048,
temperature=0,
top_p=0.95,
top_k=0.40),
graph=graph,
verbose=True,
cypher_prompt=CYPHER_GENERATION_PROMPT,
return_intermediate_steps=True
)
result = chain("""How many pythonistas are there?""")
CypherSyntaxError at ~/.local/lib/python3.8/site-packages/langchain/graphs/neo4j_graph.py:81
...
Generated Cypher Statement:
Answer: MATCH (p:Person)-[:HAS_SKILL]->(s:Skill) WHERE toLower(s.name) CONTAINS 'python' RETURN COUNT(p)
---------------------------------------------------------------------------
CypherSyntaxError Traceback (most recent call last)
File ~/.local/lib/python3.8/site-packages/langchain/graphs/neo4j_graph.py:81, in Neo4jGraph.query(self, query, params)
80 try:
---> 81 data = session.run(query, params)
82 return [r.data() for r in data]
File ~/.local/lib/python3.8/site-packages/neo4j/_sync/work/session.py:311, in Session.run(self, query, parameters, **kwargs)
310 parameters = dict(parameters or {}, **kwargs)
--> 311 self._auto_result._run(
312 query, parameters, self._config.database,
313 self._config.impersonated_user, self._config.default_access_mode,
314 bookmarks, self._config.notifications_min_severity,
315 self._config.notifications_disabled_categories,
316 )
318 return self._auto_result
File ~/.local/lib/python3.8/site-packages/neo4j/_sync/work/result.py:166, in Result._run(self, query, parameters, db, imp_user, access_mode, bookmarks, notifications_min_severity, notifications_disabled_categories)
165 self._connection.send_all()
--> 166 self._attach()
File ~/.local/lib/python3.8/site-packages/neo4j/_sync/work/result.py:274, in Result._attach(self)
273 while self._attached is False:
--> 274 self._connection.fetch_message()
File ~/.local/lib/python3.8/site-packages/neo4j/_sync/io/_common.py:180, in ConnectionErrorHandler.__getattr__.<locals>.outer.<locals>.inner(*args, **kwargs)
179 try:
--> 180 func(*args, **kwargs)
181 except (Neo4jError, ServiceUnavailable, SessionExpired) as exc:
File ~/.local/lib/python3.8/site-packages/neo4j/_sync/io/_bolt.py:808, in Bolt.fetch_message(self)
805 tag, fields = self.inbox.pop(
806 hydration_hooks=self.responses[0].hydration_hooks
807 )
--> 808 res = self._process_message(tag, fields)
809 self.idle_since = perf_counter()
File ~/.local/lib/python3.8/site-packages/neo4j/_sync/io/_bolt4.py:352, in Bolt4x0._process_message(self, tag, fields)
351 try:
--> 352 response.on_failure(summary_metadata or {})
353 except (ServiceUnavailable, DatabaseUnavailable):
File ~/.local/lib/python3.8/site-packages/neo4j/_sync/io/_common.py:247, in Response.on_failure(self, metadata)
246 Util.callback(handler)
--> 247 raise Neo4jError.hydrate(**metadata)
CypherSyntaxError: {code: Neo.ClientError.Statement.SyntaxError} {message: Invalid input 'n': expected 'l/L' (line 1, column 2 (offset: 1))
"Answer: MATCH (p:Person)-[:HAS_SKILL]->(s:Skill) WHERE toLower(s.name) CONTAINS 'python' RETURN COUNT(p)"
^}
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
Cell In[10], line 1
----> 1 r = chain("""How many pythonistas are there?""")
File ~/.local/lib/python3.8/site-packages/langchain/chains/base.py:166, in Chain.__call__(self, inputs, return_only_outputs, callbacks, tags, include_run_info)
164 except (KeyboardInterrupt, Exception) as e:
165 run_manager.on_chain_error(e)
--> 166 raise e
167 run_manager.on_chain_end(outputs)
168 final_outputs: Dict[str, Any] = self.prep_outputs(
169 inputs, outputs, return_only_outputs
170 )
File ~/.local/lib/python3.8/site-packages/langchain/chains/base.py:160, in Chain.__call__(self, inputs, return_only_outputs, callbacks, tags, include_run_info)
154 run_manager = callback_manager.on_chain_start(
155 dumpd(self),
156 inputs,
157 )
158 try:
159 outputs = (
--> 160 self._call(inputs, run_manager=run_manager)
161 if new_arg_supported
162 else self._call(inputs)
163 )
164 except (KeyboardInterrupt, Exception) as e:
165 run_manager.on_chain_error(e)
File ~/.local/lib/python3.8/site-packages/langchain/chains/graph_qa/cypher.py:120, in GraphCypherQAChain._call(self, inputs, run_manager)
117 intermediate_steps.append({"query": generated_cypher})
119 # Retrieve and limit the number of results
--> 120 context = self.graph.query(generated_cypher)[: self.top_k]
122 if self.return_direct:
123 final_result = context
File ~/.local/lib/python3.8/site-packages/langchain/graphs/neo4j_graph.py:84, in Neo4jGraph.query(self, query, params)
82 return [r.data() for r in data]
83 except CypherSyntaxError as e:
---> 84 raise ValueError("Generated Cypher Statement is not valid\n" f"{e}")
ValueError: Generated Cypher Statement is not valid
{code: Neo.ClientError.Statement.SyntaxError} {message: Invalid input 'n': expected 'l/L' (line 1, column 2 (offset: 1))
"Answer: MATCH (p:Person)-[:HAS_SKILL]->(s:Skill) WHERE toLower(s.name) CONTAINS 'python' RETURN COUNT(p)"
^}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.