上一篇文章:Dify工具使用全场景:输入标题生成文章的指南(功能篇·第3期)
我的场景
在上一个场景里,我通过标题生成了文章,但文章需要导出到word中,今天我主要记录一下文本生成word的过程。
第一步:制作dify工具
通过文本生成word的flask服务,用于把文本通过此工具转化成word下载链接。
首先创建flash服务类:
from flask import Flask, request, send_file
from docx import Document
import os
import time
import markdown
app = Flask(__name__)
@app.route('/convert', methods=['POST'])
def convert_md_to_docx():
app.logger.info('Received request for /convert')
if not request.data:
app.logger.error('No content part in the request')
return 'No content part', 400
content = request.data.decode('utf-8')
if content == '':
app.logger.error('No content provided')
return 'No content provided', 400
# 从请求中获取的Raw text内容保存为临时文件
mdfile_name = str(int(time.time())) + ".md"
with open(f"temp/{mdfile_name}", 'w', encoding='utf-8') as f:
f.write(content)
# 将Markdown转换为HTML
with open(f"temp/{mdfile_name}", 'r', encoding='utf-8') as f:
md_content = f.read()
html_content = markdown.markdown(md_content)
# 创建Word文档
doc = Document()
doc.add_paragraph(html_content)
# 将文档保存为Word文件格式
file_name = str(int(time.time())) + ".docx"
output_path = os.path.join('output', file_name)
doc.save(output_path)
# 返回文件的下载链接
download_url = request.host_url + 'download/' + os.path.basename(output_path)
print(download_url)
return {'download_url': download_url}
@app.route('/download/<filename>', methods=['GET'])
def download_file(filename):
file_path = os.path.join('output', filename)
return send_file(file_path, as_attachment=True)
if __name__ == '__main__':
os.makedirs('temp', exist_ok=True)
os.makedirs('output', exist_ok=True)
app.run(host='0.0.0.0', port=5000)
这样就创建了一个5000端口的web服务。
创建了这个web服务,我同时把它转化成了docker服务,部署在了和dify同一个服务器中。
怎么部署,可以参考
https://github.com/brightwang/dify-tool-service这个开源工程。要注意的是当前服务是5000,要确认是否会和容器的宿主机IP产生冲突,如果会则要修改成其它端口。
另外:对于不会编码的同学,可以采用trae工具来编写,让它参考dify-tool-service实现一个通过markdown文件生成docx的类似工程,AI就会给你打工了。
上面的步骤完成后,则在dify的docker-compose.yaml文件中修改启动服务,如下图:
启动dify 新服务:docker-compose up -d
这样就会开始安装了
成功启动,如下图验证:
创建工作流
根据图片配置,即可完成,发布、发布成工具。
这样工具就已经生成。
创建智能体agent
配置agent:
点击下载文档,如下图:
这样文本生图的过程就完成了,当然里面你可以增加一些其它操作并完善这个工具。