接着上一篇使用大模型提取QA

自动化生成问答对(question&answer)-CSDN博客

这一篇是将QA输出的内容打印在表格上面,将最终大模型生成的QA问答对,以excel的形式进行输出。

dify本身没有生成Excel的模块,或者是有,但我没有发现。

但是聪明的程序猿是不会被难倒,有通过json生成Excel的py啊,可以使用http模块,调用py程序。

目录

dify输出方法思路

第一步:python程序

第二步,搭建测试dify workflow工作流

LLM结构化输出


dify输出方法思路

第一步,运行一段python程序,启一个http

第二步,测试构建dify的work flow流程,搭建http模块

第一步:python程序

早就有人写过生成Excel的程序,如下

from flask import Flask,request,jsonify
import os
import pandas as pd
import datetime
 
app = Flask(__name__)
 
 
@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'
 
 
@app.route('/write_to_excel', methods=['POST'])
def write_to_excel():
    # 1. 检查请求数据
    if not request.is_json:
        return jsonify({"result": -1, "error": "Content-Type必须是application/json"}), 400
 
    data = request.json
 
    # 2. 参数为空检查
    if not data or len(data) == 0:
        return jsonify({"result": -1, "message": "输入参数为空"}), 400
 
    try:
        # 3. 生成带时间戳的文件名
        timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
        excel_file_path = os.path.join(os.getcwd(), f'output_{timestamp}.xlsx')  # 添加时间戳
 
        # 4. 数据处理
        df = pd.DataFrame(data)
        df.to_excel(excel_file_path, index=False, engine='openpyxl')
 
        return jsonify({
            "result": 1,
            "message": "数据已成功写入Excel文件",
            "file_path": excel_file_path,
            "saved_rows": len(data),
            "timestamp": timestamp  # 返回时间戳信息
        }), 200
 
    except Exception as e:
        return jsonify({"result": -1, "error": str(e)}), 500
 
 
 
if __name__ == '__main__':
    app.run()

下面讲一下如何使用这段代码

首先,在电脑上需要安装python,pip工具类软件

然后,运行下面的代码,安装组件

python3 -m pip install flask pandas openpyxl

想知道安装没有安装成功,甚至可以在屏幕上打印出来

 python3 -c "import flask, pandas, openpyxl; print('All packages imported successfully!')

当然以上的脚本不是我写的,是A I写的,大家合理使用AI,如下,它不仅帮你写,还帮你执行。

以上步骤完成后,可以在terminal中运行本代码:

python3 dify2excel.py

然后就会看到屏幕打印出:

然后大胆的打开浏览器,看看页面上有没有hello world几个大字,代表了咱们程序运行成功了

第二步,搭建测试dify workflow工作流

1、http一定要使用http://host.docker.internal:5000/write_to_excel,不能使用127.0.0.1

2、headers要填写对

3、很重要,输入一定要是一段json,要不然输出错误

测试成功,最后生成的结果:

在程序的同目录下会生成一个Excel表

LLM结构化输出

说一下我遇见的错误

就是因为我给它的不是一段json,所以它解析不出来。

在我真正想把我生成的QA生成到Excel,我需要倒回到大模型那个模型,让大模型输出json格式的内容。

这里要保证大模型的输出为一个JSON格式,是结构化的

方法一:定义一个合适的prompt参数

倒回去修改第二个大模型的system prompt参数:

你必须根据我的问答对格式来生成一个JSON对象,要求只输出JSON,不要有任何其他文字。

标红这段字体非常重要,之前我描述,以JSON格式进行展示,然后每次给我生成的是一个可复制的JSON,输入到http调用请求中,总是返回参数不正确。

如何写好prompt ,是使用好大模型的关键!

经过调试后,生成一个EXECL表

缺点:超过20行后,又会变成之前的mark down块


方法二、代码调用

这个还需要重新补充一下

当我想生成超过20条的问题的时候,大模型依旧给我返回带json注释的内容,如下:

```json [ {"问题"...."........} ] ```

 dify增加代码块,通过代码吧json部分的内容去掉

def main(raw_input) :
 import re
 import json

# Use regex to extract content between square brackets or curly braces
 json_match = re.search(r'\[.*\]', raw_input, re.DOTALL) or re.search(r'\{.*\}', raw_input, re.DOTALL)

 if json_match:
    clean_json_str = json_match.group()
    # Parse the extracted string into a JSON object
    json_data = json.loads(clean_json_str)
    # Output the cleaned JSON
    return {"json_data":json_data}
 else:
    return {"error": "No JSON found in input"}

最后可以将json格式输送个下一个模块,生成表格

缺点:格式一变,就需要对应的重新编写代码


方法三、提取参数模块使用

使用参数提取,把非json格式,通过大模型新提取参数,将其转换成对应的参数格式。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐