Dify是一个开源的LLM应用开发平台,它通过直观的可视化界面,帮助开发者快速构建和部署AI应用,支持包括模型管理、知识库、工作流编排等全方位功能,你可以把它理解为一个类似于扣子的"AI应用的乐高积木系统";这里我们介绍一个利用Dify和flask搭建AI结合知识库自动生成word的应用的例子。
一、工具准备:
1、搭建一个属于自己的Dify开发平台。
开源地址:https://gitcode.com/gh_mirrors/di/dify
不愿意搭建的也可以使用Dify云平台:https://cloud.dify.ai/ 不过这会儿好像访问不了了,待修复。
2、Flask安装
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
使用 pip 安装 Flask:
pip install flask
二、编写本地服务用于接收AI检索服务的内容,生成word文件
这里主要是用python来写的:
from flask import Flask, request, jsonify
from docx import Document # type: ignore
from docx.shared import Pt # type: ignore
from docx.enum.text import WD_ALIGN_PARAGRAPH # type: ignore
from datetime import datetime
import os
import logging
import subprocess
app = Flask(__name__)
# 配置日志
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
# 配置保存文档的目录
SAVE_DIR = "./data/"
if not os.path.exists(SAVE_DIR):
os.makedirs(SAVE_DIR)
@app.route('/test', methods=['POST'])
def test():
return 'hello world!'
@app.route('/generate_doc', methods=['POST'])
def generate_doc():
try:
# 获取请求中的JSON数据 --知识库 + word文档生成
#data = request.json
#title = data.get('title')
#content = data.get('content')
#获取请求中的RAW数据 --test文档生成
data = request.get_data(as_text=True)
title,content = data.split('!!')
# 生成文档
file_name = f"phl_{datetime.now().strftime('%Y%m%d_%H%M%S')}.docx"
file_path = os.path.join(SAVE_DIR, file_name)
logger.debug(f"File path: {file_path}")
doc = Document()
if title:
# 添加大标题
paragraph = doc.add_heading(title, level=1)
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中对齐
paragraph.style.font.name = 'FangSong' # 直接设置整个段落的字体
paragraph.style.font.size = Pt(22) # 二号字体
if content:
# 添加正文
paragraph = doc.add_paragraph(content)
paragraph.style.font.name = 'FangSong' # 直接设置整个段落的字体
paragraph.style.font.size = Pt(10.5) # 五号字体
doc.save(file_path)
logger.info(f"Document generated successfully at {file_path}")
# 在Mac上打开文件
#subprocess.call(['open', file_path])
return jsonify({"message": "Document generated successfully", "file_path": file_path}), 200
except Exception as e:
logger.error(f"Error generating document: {e}")
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5001)
工具代码写好后,在代码所在目录的终端窗口中输入执行启动flask服务命令:
Python Doc_flask_app.py
三、在Dify平台上新建知识库+word生成的应用 ,主要沿用已有知识库应用模板,加上HTTP请求节点即可。HTTP请求节点上配置成上面生成word的服务,就可以把AI检索的内容生成word文件了。(word文件的格式可以在代码中调整,本例暂时只实现功能,感兴趣可以自行研究)
到此,你就可以通过聊天机器人查询知识库并生成word文档了!
HTTP请求节点也可以采用JSON格式入参,那么相应的生成word文档的服务也需要改成相应的解析代码。