概要
使用本地部署的n8n平台,在问答窗口中生成带图表的回答。
效果展示


添加节点
- When chat message received
- AI Agent
- Execute a SQL query
- Code
- AI Agent (Tool: QuickChart)

完整流程如图所示,我这里是使用MYSQL作为模型回答的信息源(知识库)。如果不用MYSQL,那么中间三个节点就不需要了。
- 第一个AI Agent的作用是把自然语言转SQL,Source for Prompt选Define below,prompt如下,其中 {{ $json.chatInput }} 表示上一节点的用户输入。接入对应的Model和Memory 。Memory的Session Key From Previous Node填 {{ $json.sessionId }} 。
请根据我的问题和下方提供的MySQL建表语句,仅生成一条查询原始数据的SQL语句,不做任何业务判断,不使用CASE表达式或类似的判断语句,不需要给出最终答案。
只输出SQL语句本身,不包含任何解释说明。
SQL语句应能直接用于查询所需数据,供后续分析。
cash_flow代表当前时间的现金流,不能进行求和计算。
如分析某指标时需要一并查询year、week ,并排序。
查询的字段需要重命名为COMMENT值。
我的问题:{{ $json.chatInput }}
MYSQL表结构:
CREATE TABLE cash_flow_history (
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键',
year INT COMMENT '年',
week INT COMMENT '周',
cash_in DECIMAL(20,2) COMMENT '流入金额',
cash_out DECIMAL(20,2) COMMENT '流出金额',
cash_flow DECIMAL(20,2) COMMENT '现金流',
cash_flow_cumulative DECIMAL(20,2) COMMENT '现金流累计',
repay_loan_out DECIMAL(20,2) COMMENT '偿还贷款_流出',
internal_borrowing_lease_out DECIMAL(20,2) COMMENT '内部拆借&融资租赁付款_流出',
internal_borrowing_in DECIMAL(20,2) COMMENT '内部拆借_流入',
interest_out DECIMAL(20,2) COMMENT '利息_流出',
loan_in DECIMAL(20,2) COMMENT '取得借款_流入',
salary_welfare_out DECIMAL(20,2) COMMENT '工资&福利_流出',
investment_out DECIMAL(20,2) COMMENT '投资_流出',
reimbursement_other_in DECIMAL(20,2) COMMENT '报销及其他_流入',
reimbursement_other_out DECIMAL(20,2) COMMENT '报销及其他_流出',
other_cash_out DECIMAL(20,2) COMMENT '支付其他现金流出_流出',
other_investment_in DECIMAL(20,2) COMMENT '收到其他投资现金_流入',
investment_in DECIMAL(20,2) COMMENT '收到投资_流入',
subsidy_other_in DECIMAL(20,2) COMMENT '收到的补贴及其他_流入',
subsidy_other_out DECIMAL(20,2) COMMENT '收到的补贴及其他_流出',
tax_out DECIMAL(20,2) COMMENT '税费_流出',
tax_return_in DECIMAL(20,2) COMMENT '税费返还_流入',
purchase_payment_out DECIMAL(20,2) COMMENT '采购付款_流出',
purchase_asset_out DECIMAL(20,2) COMMENT '采购资产_流出',
sales_in DECIMAL(20,2) COMMENT '销售回款_流入'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='历史现金流数据表';
-
Execute a SQL query节点配置如下:
添加对应的MYSQL凭证信息,如果是docker部署的n8n和MYSQL,host填宿主机的ip就可以了。

-
Code节点的作用是把MYSQL查询出的数据转为JSON字符串。代码如下:
// javascript
// n8n 中 items 是一个数组,每个元素是 { json: { ... } }
const data = items.map(item => item.json);
// 转为 JSON 字符串
const jsonString = JSON.stringify(data);
// 返回 JSON 字符串
return [
{
json: {
jsonString
}
}
];
- 这个AI Agent的model需要选支持Function Calling/Tool Calling功能的模型,不然无法调用Tool。

QuickChart的配置如下,Labels Array点一下箭头处的⭐️,让模型自动填入,最终效果Labels Array和Data都是Defined automatically by the model。图中只是展示⭐️在哪里,不是最终效果。

现在就可以发起问答了,如果有合适的数据,模型会自动调用Tool生成图表。在聊天窗口右侧有Logs信息,模型会多次调用Tool,原因是模型传入的参数不对、数据不全、效果不好等自动重试,最后选择输出一个合适的图表。
2703

被折叠的 条评论
为什么被折叠?



