Files
ragflow/agent/templates/DB Assistant.json

885 lines
59 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": {
"Answer:SocialAdsWonder": {
"downstream": [
"Retrieval:SillyPartsCheer",
"Retrieval:BrownStreetsRhyme",
"Retrieval:OddSingersRefuse"
],
"obj": {
"component_name": "Answer",
"inputs": [],
"output": {},
"params": {}
},
"upstream": [
"begin",
"ExeSQL:QuietRosesRun"
]
},
"ExeSQL:QuietRosesRun": {
"downstream": [
"Answer:SocialAdsWonder"
],
"obj": {
"component_name": "ExeSQL",
"inputs": [],
"output": {},
"params": {
"database": "",
"db_type": "mysql",
"frequencyPenaltyEnabled": true,
"frequency_penalty": 0.7,
"host": "",
"llm_id": "deepseek-chat@DeepSeek",
"loop": 3,
"maxTokensEnabled": true,
"max_tokens": 512,
"password": "",
"port": 6630,
"presencePenaltyEnabled": true,
"presence_penalty": 0.4,
"query": [],
"temperature": 0.1,
"temperatureEnabled": true,
"topPEnabled": true,
"top_n": 30,
"top_p": 0.3,
"username": "root"
}
},
"upstream": [
"Generate:CuteSidesBuy"
]
},
"Generate:CuteSidesBuy": {
"downstream": [
"ExeSQL:QuietRosesRun"
],
"obj": {
"component_name": "Generate",
"inputs": [],
"output": {},
"params": {
"cite": false,
"frequency_penalty": 0.7,
"llm_id": "deepseek-chat@DeepSeek",
"max_tokens": 512,
"message_history_window_size": 1,
"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
}
},
"upstream": [
"Retrieval:SillyPartsCheer",
"Retrieval:BrownStreetsRhyme",
"Retrieval:OddSingersRefuse"
]
},
"Retrieval:BrownStreetsRhyme": {
"downstream": [
"Generate:CuteSidesBuy"
],
"obj": {
"component_name": "Retrieval",
"inputs": [],
"output": {},
"params": {
"empty_response": "Nothing found in Q->SQL!",
"kb_ids": [],
"keywords_similarity_weight": 0.3,
"query": [
{
"component_id": "Answer:SocialAdsWonder",
"type": "reference"
}
],
"similarity_threshold": 0.2,
"top_n": 8
}
},
"upstream": [
"Answer:SocialAdsWonder"
]
},
"Retrieval:OddSingersRefuse": {
"downstream": [
"Generate:CuteSidesBuy"
],
"obj": {
"component_name": "Retrieval",
"inputs": [],
"output": {},
"params": {
"empty_response": "Nothing found in DB-Description!",
"kb_ids": [],
"keywords_similarity_weight": 0.3,
"query": [
{
"component_id": "Answer:SocialAdsWonder",
"type": "reference"
}
],
"similarity_threshold": 0.2,
"top_n": 8
}
},
"upstream": [
"Answer:SocialAdsWonder"
]
},
"Retrieval:SillyPartsCheer": {
"downstream": [
"Generate:CuteSidesBuy"
],
"obj": {
"component_name": "Retrieval",
"inputs": [],
"output": {},
"params": {
"empty_response": "Nothing found in DDL!",
"kb_ids": [],
"keywords_similarity_weight": 0.1,
"query": [
{
"component_id": "Answer:SocialAdsWonder",
"type": "reference"
}
],
"similarity_threshold": 0.02,
"top_n": 18
}
},
"upstream": [
"Answer:SocialAdsWonder"
]
},
"begin": {
"downstream": [
"Answer:SocialAdsWonder"
],
"obj": {
"component_name": "Begin",
"inputs": [],
"output": {
"content": {
"0": {
"content": "Hi! I'm your smart assistant. What can I do for you?"
}
}
},
"params": {}
},
"upstream": []
}
},
"embed_id": "BAAI/bge-large-zh-v1.5",
"graph": {
"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-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-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"
},
{
"id": "xy-edge__Generate:CuteSidesBuyc-ExeSQL:QuietRosesRunb",
"markerEnd": "logo",
"source": "Generate:CuteSidesBuy",
"sourceHandle": "c",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "ExeSQL:QuietRosesRun",
"targetHandle": "b",
"type": "buttonEdge",
"zIndex": 1001
},
{
"id": "xy-edge__ExeSQL:QuietRosesRunc-Answer:SocialAdsWonderc",
"markerEnd": "logo",
"source": "ExeSQL:QuietRosesRun",
"sourceHandle": "c",
"style": {
"stroke": "rgb(202 197 245)",
"strokeWidth": 2
},
"target": "Answer:SocialAdsWonder",
"targetHandle": "c",
"type": "buttonEdge",
"zIndex": 1001
}
],
"nodes": [
{
"data": {
"label": "Begin",
"name": "begin"
},
"dragging": false,
"height": 44,
"id": "begin",
"measured": {
"height": 44,
"width": 200
},
"position": {
"x": -707.997699967585,
"y": 271.71609546793474
},
"positionAbsolute": {
"x": -707.997699967585,
"y": 271.71609546793474
},
"selected": false,
"sourcePosition": "left",
"targetPosition": "right",
"type": "beginNode",
"width": 200
},
{
"data": {
"form": {},
"label": "Answer",
"name": "Interface"
},
"dragging": false,
"height": 44,
"id": "Answer:SocialAdsWonder",
"measured": {
"height": 44,
"width": 200
},
"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": {
"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",
"measured": {
"height": 172,
"width": 228
},
"position": {
"x": -62.91736862436424,
"y": 93.08952291375991
},
"positionAbsolute": {
"x": -62.91736862436424,
"y": 93.08952291375991
},
"resizing": false,
"selected": false,
"sourcePosition": "right",
"style": {
"height": 172,
"width": 228
},
"targetPosition": "left",
"type": "noteNode",
"width": 228
},
{
"data": {
"form": {
"cite": false,
"frequencyPenaltyEnabled": true,
"frequency_penalty": 0.7,
"llm_id": "deepseek-chat@DeepSeek",
"maxTokensEnabled": true,
"max_tokens": 512,
"message_history_window_size": 1,
"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": 232,
"id": "Generate:CuteSidesBuy",
"measured": {
"height": 232,
"width": 200
},
"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,
"query": [
{
"component_id": "Answer:SocialAdsWonder",
"type": "reference"
}
],
"similarity_threshold": 0.02,
"top_n": 18
},
"label": "Retrieval",
"name": "DDL"
},
"dragging": false,
"height": 106,
"id": "Retrieval:SillyPartsCheer",
"measured": {
"height": 106,
"width": 200
},
"position": {
"x": 198.3020069445181,
"y": -0.9595420072386389
},
"positionAbsolute": {
"x": 198.3020069445181,
"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,
"query": [
{
"component_id": "Answer:SocialAdsWonder",
"type": "reference"
}
],
"similarity_threshold": 0.2,
"top_n": 8
},
"label": "Retrieval",
"name": "Q->SQL"
},
"dragging": false,
"height": 106,
"id": "Retrieval:BrownStreetsRhyme",
"measured": {
"height": 106,
"width": 200
},
"position": {
"x": 231.17453176754782,
"y": 123.02661106951555
},
"positionAbsolute": {
"x": 231.17453176754782,
"y": 123.02661106951555
},
"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,
"query": [
{
"component_id": "Answer:SocialAdsWonder",
"type": "reference"
}
],
"similarity_threshold": 0.2,
"top_n": 8
},
"label": "Retrieval",
"name": "DB Description"
},
"dragging": false,
"height": 106,
"id": "Retrieval:OddSingersRefuse",
"measured": {
"height": 106,
"width": 200
},
"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"
},
"dragHandle": ".note-drag-handle",
"dragging": false,
"height": 176,
"id": "Note:HeavyIconsFollow",
"measured": {
"height": 176,
"width": 266
},
"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
},
{
"data": {
"form": {
"text": "Receives the user's database-related questions and displays the large model's response."
},
"label": "Note",
"name": "N: Interface"
},
"dragHandle": ".note-drag-handle",
"dragging": false,
"height": 162,
"id": "Note:PinkTaxesClean",
"measured": {
"height": 162,
"width": 210
},
"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
},
{
"data": {
"form": {
"text": "Searches for description about meanings of tables and fields."
},
"label": "Note",
"name": "N:DB Description"
},
"dragHandle": ".note-drag-handle",
"dragging": false,
"height": 128,
"id": "Note:IcyTreesPeel",
"measured": {
"height": 128,
"width": 251
},
"position": {
"x": 280.8431980571563,
"y": 394.1463067004627
},
"positionAbsolute": {
"x": 280.8431980571563,
"y": 394.1463067004627
},
"resizing": false,
"selected": false,
"sourcePosition": "right",
"style": {
"height": 128,
"width": 251
},
"targetPosition": "left",
"type": "noteNode",
"width": 251
},
{
"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"
},
"dragHandle": ".note-drag-handle",
"dragging": false,
"height": 131,
"id": "Note:HugeGroupsScream",
"measured": {
"height": 131,
"width": 387
},
"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
},
{
"data": {
"form": {
"text": "DDL(Data Definition Language).\n\nSearches for relevant 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"
},
"dragHandle": ".note-drag-handle",
"dragging": false,
"height": 266,
"id": "Note:GreenCrewsArrive",
"measured": {
"height": 266,
"width": 266
},
"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
},
{
"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"
},
"dragHandle": ".note-drag-handle",
"dragging": false,
"height": 175,
"id": "Note:EightTurtlesLike",
"measured": {
"height": 175,
"width": 265
},
"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
},
{
"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"
},
"dragHandle": ".note-drag-handle",
"dragging": false,
"height": 178,
"id": "Note:FreshKidsTalk",
"measured": {
"height": 178,
"width": 346
},
"position": {
"x": -293.35258272850365,
"y": -206.3839921107096
},
"positionAbsolute": {
"x": -251.5866574377311,
"y": -372.2192837064241
},
"resizing": false,
"selected": true,
"sourcePosition": "right",
"style": {
"height": 178,
"width": 346
},
"targetPosition": "left",
"type": "noteNode",
"width": 346
},
{
"data": {
"form": {
"database": "",
"db_type": "mysql",
"frequencyPenaltyEnabled": true,
"frequency_penalty": 0.7,
"host": "",
"llm_id": "deepseek-chat@DeepSeek",
"loop": 3,
"maxTokensEnabled": true,
"max_tokens": 512,
"password": "",
"port": 6630,
"presencePenaltyEnabled": true,
"presence_penalty": 0.4,
"query": [],
"temperature": 0.1,
"temperatureEnabled": true,
"topPEnabled": true,
"top_n": 30,
"top_p": 0.3,
"username": "root"
},
"label": "ExeSQL",
"name": "ExeSQL_0"
},
"dragging": false,
"id": "ExeSQL:QuietRosesRun",
"measured": {
"height": 64,
"width": 200
},
"position": {
"x": -318.61920731731163,
"y": 3.5145731711609436
},
"selected": false,
"sourcePosition": "right",
"targetPosition": "left",
"type": "ragNode"
}
]
},
"history": [],
"messages": [],
"path": [],
"reference": []
},
"avatar": "data:image/png;base64,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
}