Files
ragflow_python/agent/templates/DB Assistant.json

932 lines
60 KiB
JSON
Raw Normal View History

{
"id": 6,
"title": "DB Assistant",
"description": "An advanced agent that converts user queries into SQL statements, executes the queries, and assesses and returns the results. You must prepare three knowledge bases: 1: DDL for your database; 2: Examples of user queries converted to SQL statements; 3: A comprehensive description of your database, including but not limited to tables and records. You are also required to configure the corresponding database.",
"canvas_type": "chatbot",
"dsl": {
"answer": [],
"components": {
"begin": {
"obj": {
"component_name": "Begin",
"params": {}
},
"downstream": [
"Answer:SocialAdsWonder"
],
"upstream": []
},
"Answer:SocialAdsWonder": {
"obj": {
"component_name": "Answer",
"params": {}
},
"downstream": [
"Retrieval:SillyPartsCheer",
"Retrieval:BrownStreetsRhyme",
"Retrieval:OddSingersRefuse"
],
"upstream": [
"begin",
"Switch:HotPartsTap"
]
},
"ExeSQL:CoolFactsChew": {
"obj": {
"component_name": "ExeSQL",
"params": {
"database": "Your DB name",
"db_type": "mysql",
"host": "Your IP Port",
"loop": 3,
"password": "Your Password",
"port": 3306,
"top_n": 9,
"username": "Your username"
}
},
"downstream": [
"Switch:HotPartsTap"
],
"upstream": [
"Generate:SmoothWombatsRemain",
"Generate:CuteSidesBuy"
]
},
"Switch:HotPartsTap": {
"obj": {
"component_name": "Switch",
"params": {
"conditions": [
{
"items": [
{
"cpn_id": "ExeSQL:CoolFactsChew",
"operator": "contains",
"value": "Error"
},
{
"cpn_id": "ExeSQL:CoolFactsChew",
"operator": "contains",
"value": "**Error**"
}
],
"logical_operator": "or",
"to": "Generate:SmoothWombatsRemain"
}
],
"end_cpn_id": "Answer:SocialAdsWonder"
}
},
"downstream": [
"Answer:SocialAdsWonder",
"Generate:SmoothWombatsRemain"
],
"upstream": [
"ExeSQL:CoolFactsChew"
]
},
"Generate:SmoothWombatsRemain": {
"obj": {
"component_name": "Generate",
"params": {
"cite": true,
"frequency_penalty": 0.7,
"llm_id": "deepseek-chat@DeepSeek",
"max_tokens": 256,
"message_history_window_size": 12,
"parameters": [
{
"component_id": "ExeSQL:CoolFactsChew",
"id": "9c452513-6ab9-4ffb-8676-d7475363bb70",
"key": "exesql_input"
}
],
"presence_penalty": 0.4,
"prompt": "## You are the Repair SQL Statement Helper, please modify the original SQL statement based on the SQL query error report.\n\n## The contents of the SQL query error report and the original SQL statement are as follows:\n{exesql_input}\n\n## Answer only the modified SQL statement. Please do not give any explanation, just answer the code.",
"temperature": 0.1,
"top_p": 0.3
}
},
"downstream": [
"ExeSQL:CoolFactsChew"
],
"upstream": [
"Switch:HotPartsTap"
]
},
"Generate:CuteSidesBuy": {
"obj": {
"component_name": "Generate",
"params": {
"cite": true,
"frequency_penalty": 0.7,
"llm_id": "deepseek-chat@DeepSeek",
"max_tokens": 256,
"message_history_window_size": 12,
"parameters": [
{
"component_id": "Retrieval:SillyPartsCheer",
"id": "2a77e574-a0a6-4a1a-af39-cb192f1d21f5",
"key": "ddl_input"
},
{
"component_id": "Retrieval:OddSingersRefuse",
"id": "83941a85-0b59-408e-97e5-504964b0e090",
"key": "db_input"
},
{
"component_id": "Retrieval:BrownStreetsRhyme",
"id": "c63d0ae6-7ee2-44a2-8a95-69d03c90cb44",
"key": "sql_input"
}
],
"presence_penalty": 0.4,
"prompt": "\n##The user provides a question and you provide SQL. You will only respond with SQL code and not with any explanations.\n\n##You may use the following DDL statements as a reference for what tables might be available. Use responses to past questions also to guide you: {ddl_input}.\n\n##You may use the following documentation as a reference for what tables might be available. Use responses to past questions also to guide you: {db_input}.\n\n##You may use the following SQL statements as a reference for what tables might be available. Use responses to past questions also to guide you: {sql_input}.\n\n##Respond with only SQL code. Do not answer with any explanations -- just the code.",
"temperature": 0.1,
"top_p": 0.3
}
},
"downstream": [
"ExeSQL:CoolFactsChew"
],
"upstream": [
"Retrieval:SillyPartsCheer",
"Retrieval:BrownStreetsRhyme",
"Retrieval:OddSingersRefuse"
]
},
"Retrieval:SillyPartsCheer": {
"obj": {
"component_name": "Retrieval",
"params": {
"empty_response": "Nothing found in DDL!",
"kb_ids": [],
"keywords_similarity_weight": 0.1,
"similarity_threshold": 0.02,
"top_n": 18
}
},
"downstream": [
"Generate:CuteSidesBuy"
],
"upstream": [
"Answer:SocialAdsWonder"
]
},
"Retrieval:BrownStreetsRhyme": {
"obj": {
"component_name": "Retrieval",
"params": {
"empty_response": "Nothing found in Q->SQL!",
"kb_ids": [],
"keywords_similarity_weight": 0.3,
"similarity_threshold": 0.2,
"top_n": 8
}
},
"downstream": [
"Generate:CuteSidesBuy"
],
"upstream": [
"Answer:SocialAdsWonder"
]
},
"Retrieval:OddSingersRefuse": {
"obj": {
"component_name": "Retrieval",
"params": {
"empty_response": "Nothing found in DB-Description!",
"kb_ids": [],
"keywords_similarity_weight": 0.3,
"similarity_threshold": 0.2,
"top_n": 8
}
},
"downstream": [
"Generate:CuteSidesBuy"
],
"upstream": [
"Answer:SocialAdsWonder"
]
}
},
"graph": {
"nodes": [
{
"data": {
"label": "Begin",
"name": "begin"
},
"dragging": false,
"height": 44,
"id": "begin",
"position": {
"x": -707.997699967585,
"y": 271.71609546793474
},
"positionAbsolute": {
"x": -707.997699967585,
"y": 271.71609546793474
},
"selected": false,
"sourcePosition": "left",
"targetPosition": "right",
"type": "beginNode",
"width": 100
},
{
"data": {
"form": {},
"label": "Answer",
"name": "Interface"
},
"dragging": false,
"height": 44,
"id": "Answer:SocialAdsWonder",
"position": {
"x": -58.36886074370702,
"y": 272.1213623212045
},
"positionAbsolute": {
"x": -58.36886074370702,
"y": 272.1213623212045
},
"selected": false,
"sourcePosition": "right",
"targetPosition": "left",
"type": "logicNode",
"width": 200
},
{
"data": {
"form": {
"database": "Your DB name",
"db_type": "mysql",
"host": "Your IP Port",
"loop": 3,
"password": "Your Password",
"port": 3306,
"top_n": 9,
"username": "Your username"
},
"label": "ExeSQL",
"name": "Execute SQL"
},
"dragging": false,
"height": 44,
"id": "ExeSQL:CoolFactsChew",
"position": {
"x": -328.98563704574315,
"y": -177.64593432501485
},
"positionAbsolute": {
"x": -328.98563704574315,
"y": -177.64593432501485
},
"selected": false,
"sourcePosition": "right",
"targetPosition": "left",
"type": "ragNode",
"width": 200
},
{
"data": {
"form": {
"conditions": [
{
"items": [
{
"cpn_id": "ExeSQL:CoolFactsChew",
"operator": "contains",
"value": "Error"
},
{
"cpn_id": "ExeSQL:CoolFactsChew",
"operator": "contains",
"value": "**Error**"
}
],
"logical_operator": "or",
"to": "Generate:SmoothWombatsRemain"
}
],
"end_cpn_id": "Answer:SocialAdsWonder"
},
"label": "Switch",
"name": "Analyze SQL Result"
},
"dragging": false,
"height": 191,
"id": "Switch:HotPartsTap",
"position": {
"x": -333.34292578536326,
"y": -51.66578195568452
},
"positionAbsolute": {
"x": -333.34292578536326,
"y": -51.66578195568452
},
"selected": false,
"sourcePosition": "right",
"targetPosition": "left",
"type": "switchNode",
"width": 200
},
{
"data": {
"form": {
"text": "The large model modifies the original SQL statement based on the error message and returns the modified SQL statement."
},
"label": "Note",
"name": "N: Fix SQL Statement"
},
"dragging": false,
"height": 172,
"id": "Note:SevenDancersMarry",
"position": {
"x": -52.470761864810754,
"y": 81.77236559091028
},
"positionAbsolute": {
"x": -52.470761864810754,
"y": 81.77236559091028
},
"resizing": false,
"selected": false,
"sourcePosition": "right",
"style": {
"height": 172,
"width": 228
},
"targetPosition": "left",
"type": "noteNode",
"width": 228
},
{
"data": {
"form": {
"cite": true,
"frequencyPenaltyEnabled": true,
"frequency_penalty": 0.7,
"llm_id": "deepseek-chat@DeepSeek",
"maxTokensEnabled": true,
"max_tokens": 256,
"message_history_window_size": 12,
"parameter": "Precise",
"parameters": [
{
"component_id": "ExeSQL:CoolFactsChew",
"id": "9c452513-6ab9-4ffb-8676-d7475363bb70",
"key": "exesql_input"
}
],
"presencePenaltyEnabled": true,
"presence_penalty": 0.4,
"prompt": "## You are the Repair SQL Statement Helper, please modify the original SQL statement based on the SQL query error report.\n\n## The contents of the SQL query error report and the original SQL statement are as follows:\n{exesql_input}\n\n## Answer only the modified SQL statement. Please do not give any explanation, just answer the code.",
"temperature": 0.1,
"temperatureEnabled": true,
"topPEnabled": true,
"top_p": 0.3
},
"label": "Generate",
"name": "Fix SQL Statement LLM"
},
"dragging": false,
"height": 128,
"id": "Generate:SmoothWombatsRemain",
"position": {
"x": -63.964315620743946,
"y": -56.53893429100532
},
"positionAbsolute": {
"x": -63.964315620743946,
"y": -56.53893429100532
},
"selected": false,
"sourcePosition": "right",
"targetPosition": "left",
"type": "generateNode",
"width": 200
},
{
"data": {
"form": {
"cite": true,
"frequencyPenaltyEnabled": true,
"frequency_penalty": 0.7,
"llm_id": "deepseek-chat@DeepSeek",
"maxTokensEnabled": true,
"max_tokens": 256,
"message_history_window_size": 12,
"parameter": "Precise",
"parameters": [
{
"component_id": "Retrieval:SillyPartsCheer",
"id": "2a77e574-a0a6-4a1a-af39-cb192f1d21f5",
"key": "ddl_input"
},
{
"component_id": "Retrieval:OddSingersRefuse",
"id": "83941a85-0b59-408e-97e5-504964b0e090",
"key": "db_input"
},
{
"component_id": "Retrieval:BrownStreetsRhyme",
"id": "c63d0ae6-7ee2-44a2-8a95-69d03c90cb44",
"key": "sql_input"
}
],
"presencePenaltyEnabled": true,
"presence_penalty": 0.4,
"prompt": "\n##The user provides a question and you provide SQL. You will only respond with SQL code and not with any explanations.\n\n##You may use the following DDL statements as a reference for what tables might be available. Use responses to past questions also to guide you: {ddl_input}.\n\n##You may use the following documentation as a reference for what tables might be available. Use responses to past questions also to guide you: {db_input}.\n\n##You may use the following SQL statements as a reference for what tables might be available. Use responses to past questions also to guide you: {sql_input}.\n\n##Respond with only SQL code. Do not answer with any explanations -- just the code.",
"temperature": 0.1,
"temperatureEnabled": true,
"topPEnabled": true,
"top_p": 0.3
},
"label": "Generate",
"name": "Generate SQL Statement LLM"
},
"dragging": false,
"height": 212,
"id": "Generate:CuteSidesBuy",
"position": {
"x": 191.98081287844155,
"y": -255.36496490928363
},
"positionAbsolute": {
"x": 191.98081287844155,
"y": -255.36496490928363
},
"selected": false,
"sourcePosition": "right",
"targetPosition": "left",
"type": "generateNode",
"width": 200
},
{
"data": {
"form": {
"empty_response": "Nothing found in DDL!",
"kb_ids": [],
"keywords_similarity_weight": 0.1,
"similarity_threshold": 0.02,
"top_n": 18
},
"label": "Retrieval",
"name": "DDL"
},
"dragging": false,
"height": 44,
"id": "Retrieval:SillyPartsCheer",
"position": {
"x": 199.0075429691716,
"y": -0.9595420072386389
},
"positionAbsolute": {
"x": 199.0075429691716,
"y": -0.9595420072386389
},
"selected": false,
"sourcePosition": "right",
"targetPosition": "left",
"type": "retrievalNode",
"width": 200
},
{
"data": {
"form": {
"empty_response": "Nothing found in Q->SQL!",
"kb_ids": [],
"keywords_similarity_weight": 0.3,
"similarity_threshold": 0.2,
"top_n": 8
},
"label": "Retrieval",
"name": "Q->SQL"
},
"dragging": false,
"height": 44,
"id": "Retrieval:BrownStreetsRhyme",
"position": {
"x": 219.1804193484379,
"y": 113.85464274901977
},
"positionAbsolute": {
"x": 219.1804193484379,
"y": 113.85464274901977
},
"selected": false,
"sourcePosition": "right",
"targetPosition": "left",
"type": "retrievalNode",
"width": 200
},
{
"data": {
"form": {
"empty_response": "Nothing found in DB-Description!",
"kb_ids": [],
"keywords_similarity_weight": 0.3,
"similarity_threshold": 0.2,
"top_n": 8
},
"label": "Retrieval",
"name": "DB Description"
},
"dragging": false,
"height": 44,
"id": "Retrieval:OddSingersRefuse",
"position": {
"x": 267.7575479510707,
"y": 249.15603226400776
},
"positionAbsolute": {
"x": 267.7575479510707,
"y": 249.15603226400776
},
"selected": false,
"sourcePosition": "right",
"targetPosition": "left",
"type": "retrievalNode",
"width": 200
},
{
"data": {
"form": {
"text": "Based on the result of the SQL execution, returns the error message to the large model if any errors occur; otherwise, returns the result to the user."
},
"label": "Note",
"name": "N: Analyze SQL"
},
"dragging": false,
"height": 176,
"id": "Note:HeavyIconsFollow",
"position": {
"x": -626.6563777191027,
"y": -48.82220889683933
},
"positionAbsolute": {
"x": -626.6563777191027,
"y": -48.82220889683933
},
"resizing": false,
"selected": false,
"sourcePosition": "right",
"style": {
"height": 176,
"width": 266
},
"targetPosition": "left",
"type": "noteNode",
"width": 266,
"dragHandle": ".note-drag-handle"
},
{
"data": {
"form": {
"text": "Receives the user's database-related questions and displays the large model's response."
},
"label": "Note",
"name": "N: Interface"
},
"dragging": false,
"height": 162,
"id": "Note:PinkTaxesClean",
"position": {
"x": -52.004609812312424,
"y": 336.95180237635077
},
"positionAbsolute": {
"x": -52.004609812312424,
"y": 336.95180237635077
},
"resizing": false,
"selected": false,
"sourcePosition": "right",
"style": {
"height": 162,
"width": 210
},
"targetPosition": "left",
"type": "noteNode",
"width": 210,
"dragHandle": ".note-drag-handle"
},
{
"data": {
"form": {
"text": "Searches for description about meanings of tables and fields."
},
"label": "Note",
"name": "N:DB Desctription"
},
"dragging": false,
"height": 128,
"id": "Note:IcyTreesPeel",
"position": {
"x": 283.6653421557703,
"y": 336.29235267887395
},
"positionAbsolute": {
"x": 283.6653421557703,
"y": 336.29235267887395
},
"resizing": false,
"selected": false,
"sourcePosition": "right",
"style": {
"height": 128,
"width": 251
},
"targetPosition": "left",
"type": "noteNode",
"width": 251,
"dragHandle": ".note-drag-handle"
},
{
"data": {
"form": {
"text": "Searches for samples about question to SQL.\nPlease check this dataset: https://huggingface.co/datasets/InfiniFlow/text2sql"
},
"label": "Note",
"name": "N: Q->SQL"
},
"dragging": false,
"height": 131,
"id": "Note:HugeGroupsScream",
"position": {
"x": 606.1206536213404,
"y": 113.09441734894426
},
"positionAbsolute": {
"x": 606.1206536213404,
"y": 113.09441734894426
},
"resizing": false,
"selected": false,
"sourcePosition": "right",
"style": {
"height": 131,
"width": 387
},
"targetPosition": "left",
"type": "noteNode",
"width": 387,
"dragHandle": ".note-drag-handle"
},
{
"data": {
"form": {
"text": "DDL(Data Definition Language).\n\nSearches for relevent database creation statements.\n\nIt should bind with a KB to which DDL is dumped in.\nYou could use 'General' as parsing method and ';' as delimiter."
},
"label": "Note",
"name": "N: DDL"
},
"dragging": false,
"height": 266,
"id": "Note:GreenCrewsArrive",
"position": {
"x": 545.3423934788841,
"y": -166.58872868890683
},
"positionAbsolute": {
"x": 545.3423934788841,
"y": -166.58872868890683
},
"resizing": false,
"selected": false,
"sourcePosition": "right",
"style": {
"height": 266,
"width": 266
},
"targetPosition": "left",
"type": "noteNode",
"width": 266,
"dragHandle": ".note-drag-handle"
},
{
"data": {
"form": {
"text": "The large model learns which tables may be available based on the responses from three knowledge bases and converts the user's input into SQL statements."
},
"label": "Note",
"name": "N: Generate SQL"
},
"dragging": false,
"height": 175,
"id": "Note:EightTurtlesLike",
"position": {
"x": 222.2150747084395,
"y": -445.32694170868734
},
"positionAbsolute": {
"x": 222.2150747084395,
"y": -445.32694170868734
},
"resizing": false,
"selected": false,
"sourcePosition": "right",
"style": {
"height": 175,
"width": 265
},
"targetPosition": "left",
"type": "noteNode",
"width": 265,
"dragHandle": ".note-drag-handle"
},
{
"data": {
"form": {
"text": "Executes the SQL statement in the database and returns the result.\n\nAfter configuring an accessible database, press 'Test' to ensure the accessibility."
},
"label": "Note",
"name": "N: Execute SQL"
},
"dragging": false,
"height": 178,
"id": "Note:FreshKidsTalk",
"position": {
"x": -251.5866574377311,
"y": -372.2192837064241
},
"positionAbsolute": {
"x": -251.5866574377311,
"y": -372.2192837064241
},
"resizing": false,
"selected": false,
"sourcePosition": "right",
"style": {
"height": 178,
"width": 346
},
"targetPosition": "left",
"type": "noteNode",
"width": 346,
"dragHandle": ".note-drag-handle"
}
],
"edges": [
{
"id": "reactflow__edge-begin-Answer:SocialAdsWonderc",
"markerEnd": "logo",
"source": "begin",
"sourceHandle": null,
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "Answer:SocialAdsWonder",
"targetHandle": "c",
"type": "buttonEdge"
},
{
"id": "reactflow__edge-ExeSQL:CoolFactsChewc-Switch:HotPartsTapa",
"markerEnd": "logo",
"source": "ExeSQL:CoolFactsChew",
"sourceHandle": "c",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "Switch:HotPartsTap",
"targetHandle": "a",
"type": "buttonEdge"
},
{
"id": "24dc76bf-2030-465e-9dd8-f4a784fd2b49",
"source": "Switch:HotPartsTap",
"sourceHandle": "end_cpn_id",
"target": "Answer:SocialAdsWonder"
},
{
"id": "reactflow__edge-Switch:HotPartsTapCase 1-Generate:SmoothWombatsRemainc",
"markerEnd": "logo",
"source": "Switch:HotPartsTap",
"sourceHandle": "Case 1",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "Generate:SmoothWombatsRemain",
"targetHandle": "c",
"type": "buttonEdge"
},
{
"id": "reactflow__edge-Generate:SmoothWombatsRemainb-ExeSQL:CoolFactsChewb",
"markerEnd": "logo",
"source": "Generate:SmoothWombatsRemain",
"sourceHandle": "b",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "ExeSQL:CoolFactsChew",
"targetHandle": "b",
"type": "buttonEdge"
},
{
"id": "reactflow__edge-Answer:SocialAdsWonderb-Retrieval:SillyPartsCheerc",
"markerEnd": "logo",
"source": "Answer:SocialAdsWonder",
"sourceHandle": "b",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "Retrieval:SillyPartsCheer",
"targetHandle": "c",
"type": "buttonEdge"
},
{
"id": "reactflow__edge-Answer:SocialAdsWonderb-Retrieval:BrownStreetsRhymec",
"markerEnd": "logo",
"source": "Answer:SocialAdsWonder",
"sourceHandle": "b",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "Retrieval:BrownStreetsRhyme",
"targetHandle": "c",
"type": "buttonEdge"
},
{
"id": "reactflow__edge-Answer:SocialAdsWonderb-Retrieval:OddSingersRefusec",
"markerEnd": "logo",
"source": "Answer:SocialAdsWonder",
"sourceHandle": "b",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "Retrieval:OddSingersRefuse",
"targetHandle": "c",
"type": "buttonEdge"
},
{
"id": "reactflow__edge-Generate:CuteSidesBuyc-ExeSQL:CoolFactsChewb",
"markerEnd": "logo",
"source": "Generate:CuteSidesBuy",
"sourceHandle": "c",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "ExeSQL:CoolFactsChew",
"targetHandle": "b",
"type": "buttonEdge"
},
{
"id": "reactflow__edge-Retrieval:SillyPartsCheerb-Generate:CuteSidesBuyb",
"markerEnd": "logo",
"source": "Retrieval:SillyPartsCheer",
"sourceHandle": "b",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "Generate:CuteSidesBuy",
"targetHandle": "b",
"type": "buttonEdge"
},
{
"id": "reactflow__edge-Retrieval:BrownStreetsRhymeb-Generate:CuteSidesBuyb",
"markerEnd": "logo",
"source": "Retrieval:BrownStreetsRhyme",
"sourceHandle": "b",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "Generate:CuteSidesBuy",
"targetHandle": "b",
"type": "buttonEdge"
},
{
"id": "reactflow__edge-Retrieval:OddSingersRefuseb-Generate:CuteSidesBuyb",
"markerEnd": "logo",
"source": "Retrieval:OddSingersRefuse",
"sourceHandle": "b",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "Generate:CuteSidesBuy",
"targetHandle": "b",
"type": "buttonEdge"
}
]
},
"history": [],
"messages": [],
"path": [],
"reference": []
},
"avatar": "data:image/png;base64,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
}