This is an automated email from the ASF dual-hosted git repository.
jin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-hugegraph-ai.git
The following commit(s) were added to refs/heads/main by this push:
new 7f7c82c feat(llm): support intent recognition V1 (#159)
7f7c82c is described below
commit 7f7c82c1c4d7053c1d80cee1f485192228af08cc
Author: HaoJin Yang <[email protected]>
AuthorDate: Tue Jan 14 19:03:31 2025 +0800
feat(llm): support intent recognition V1 (#159)
---
.../src/hugegraph_llm/config/prompt_config.py | 54 +++++++++++++++-------
.../src/hugegraph_llm/demo/rag_demo/rag_block.py | 7 ++-
2 files changed, 42 insertions(+), 19 deletions(-)
diff --git a/hugegraph-llm/src/hugegraph_llm/config/prompt_config.py
b/hugegraph-llm/src/hugegraph_llm/config/prompt_config.py
index 8f55fa6..fee85d2 100644
--- a/hugegraph-llm/src/hugegraph_llm/config/prompt_config.py
+++ b/hugegraph-llm/src/hugegraph_llm/config/prompt_config.py
@@ -179,30 +179,50 @@ MAX_KEYWORDS: {max_keywords}
# """
gremlin_generate_prompt = """
-You are an expert in graph query language(Gremlin), your role is to understand
the schema of the graph and generate
-accurate Gremlin code based on the given instructions.
-
-# Graph Schema:
-```json
-{schema}
-```
-# Rule:
-1. Could use the vertex ID directly if it's given in the context.
-2. The output format must be like:
+You are an expert in graph query language (Gremlin). Your role is to
understand the schema of the graph, recognize the intent behind user queries,
and generate accurate Gremlin code based on the given instructions.
+
+### Tasks
+## Complex Query Detection:
+Assess the user’s query to determine its complexity based on the following
criteria:
+
+1. Multiple Reasoning Steps: The query requires several logical steps to
arrive at the final result.
+2. Conditional Logic: The query includes multiple conditions or filters that
depend on each other.
+3. Nested Queries: The query contains sub-queries or nested logical statements.
+4. High-Level Abstractions: The query requests high-level summaries or
insights that require intricate data manipulation.
+
+# Examples of Complex Queries:
+“Retrieve all users who have posted more than five articles and have at least
two comments with a positive sentiment score.”
+“Calculate the average response time of servers in each data center and
identify which data centers are below the required performance threshold after
the latest update.”
+
+# Rules
+- **Complex Query Handling**:
+ - **Detection**: If the user's query meets **any** of the complexity
criteria listed above, it is considered **complex**.
+ - **Response**: For complex queries, **do not** proceed to Gremlin Query
Generation. Instead, directly return the following Gremlin query:
+ ```gremlin
+ g.V().limit(0)
+ ```
+- **Simple Query Handling**:
+ - If the query does **not** meet any of the complexity criteria, it is
considered **simple**.
+ - Proceed to the Gremlin Query Generation task as outlined below.
+
+## Gremlin Query Generation (Executed only if the query is not complex):
+# Rules
+You may use the vertex ID directly if it’s provided in the context.
+The output format must be as follows:
```gremlin
g.V().limit(10)
```
+Graph Schema:
+{schema}
+Refer Gremlin Example Pair:
+{example}
-# Extracted vertex vid:
+Referenced Extracted Vertex IDs Related to the Query:
{vertices}
-# Given the example query-gremlin pairs:
-{example}
-
-# Generate gremlin from the following user query.
+Generate Gremlin from the Following User Query:
{query}
-
-The generated gremlin is:
+The generated Gremlin is:
"""
doc_input_text: str = """Meet Sarah, a 30-year-old attorney, and her
roommate, James, whom she's shared a home with since 2010.
diff --git a/hugegraph-llm/src/hugegraph_llm/demo/rag_demo/rag_block.py
b/hugegraph-llm/src/hugegraph_llm/demo/rag_demo/rag_block.py
index 822b080..477660b 100644
--- a/hugegraph-llm/src/hugegraph_llm/demo/rag_demo/rag_block.py
+++ b/hugegraph-llm/src/hugegraph_llm/demo/rag_demo/rag_block.py
@@ -42,7 +42,7 @@ def rag_answer(
answer_prompt: str,
keywords_extract_prompt: str,
gremlin_tmpl_num: Optional[int] = 2,
- gremlin_prompt: Optional[str] = prompt.gremlin_generate_prompt,
+ gremlin_prompt: Optional[str] = None,
) -> Tuple:
"""
Generate an answer using the RAG (Retrieval-Augmented Generation) pipeline.
@@ -52,13 +52,16 @@ def rag_answer(
4. Synthesize the final answer.
5. Run the pipeline and return the results.
"""
+
+ gremlin_prompt = gremlin_prompt or prompt.gremlin_generate_prompt
should_update_prompt = (
prompt.default_question != text
or prompt.answer_prompt != answer_prompt
or prompt.keywords_extract_prompt != keywords_extract_prompt
or prompt.gremlin_generate_prompt != gremlin_prompt
+ or prompt.custom_rerank_info != custom_related_information
)
- if should_update_prompt or prompt.custom_rerank_info !=
custom_related_information:
+ if should_update_prompt:
prompt.custom_rerank_info = custom_related_information
prompt.default_question = text
prompt.answer_prompt = answer_prompt