Dify搭建WorkFlow

工作流实现数据一次性对话。

1.创建应用

image

 

 

2.添加变量

image

 

 3.准备本地文档

image

 4.文档提取器

大模型没法直接读取文件,所以在文件和大模型之间需要添加哥“文档提取器”

5.添加大模型

将{{#context#}}中的数据整理成csv格式并输出,只需要输出结果,不需要输出额外的解释

image

 6.代码执行

import csv
import json
from collections import defaultdict


def main(csv_string: str):
    """
    将CSV字符串转换为ECharts柱状图,并以markdown格式输出

    Args:
        csv_string: CSV格式的字符串,例如:'名称,数值\nA,10\nB,20\nC,15'

    Returns:
        包含ECharts图表的markdown字符串
    """
    # 使用defaultdict存储数据
    data = defaultdict(list)

    # 解析CSV
    lines = csv_string.strip().split('\n')
    reader = csv.reader(lines)

    # 获取表头
    headers = next(reader)

    # 准备数据
    categories = []
    values = []

    for row in reader:
        if len(row) >= 2:
            categories.append(row[0])
            try:
                values.append(float(row[1]))
            except ValueError:
                values.append(0)

            data[row[0]].append(row[1])

    # 构建ECharts配置
    chart_title = f"{headers[0]} vs {headers[1]} 柱状图" if headers else "数据柱状图"

    option = {
        'title': {
            'text': chart_title,
            'left': 'center'
        },
        'tooltip': {
            'trigger': 'axis',
            'axisPointer': {
                'type': 'shadow'
            }
        },
        'xAxis': {
            'type': 'category',
            'data': categories,
            'name': headers[0] if headers else '类别',
            'axisLabel': {
                'rotate': 45 if len(categories) > 5 else 0
            }
        },
        'yAxis': {
            'type': 'value',
            'name': headers[1] if len(headers) > 1 else '数值'
        },
        'series': [{
            'name': headers[1] if len(headers) > 1 else '数值',
            'type': 'bar',
            'data': values,
            'itemStyle': {
                'color': '#5470c6',
                'borderRadius': [5, 5, 0, 0]
            },
            'barWidth': '50%',
            'label': {
                'show': True,
                'position': 'top',
                'formatter': '{c}'
            }
        }],
        'grid': {
            'left': '10%',
            'right': '8%',
            'bottom': '15%',
            'top': '15%',
            'containLabel': True
        }
    }
    # 转换为JSON字符串
    chart_config = json.dumps(option, ensure_ascii=False)
    # 生成markdown格式的输出
    output = "\n```echarts\n" + chart_config + "\n```"
    return {"output": output}

7.输出

整体流程:

image

 

posted @ 2026-03-01 10:31  创客未来  阅读(5)  评论(0)    收藏  举报