在windows环境通过markmap读取markdown格式文件生成脑图教程

0 基础环境准备

  • conda:已安装miniconda。
  • node:已安装node,配置好node环境。本教材主要解决markmap生成脑图问题,不在此赘述node安装过程,请自行在网上找node安装配置教程

1 项目环境准备

1.1 安装markmap工具

npm install -g markmap-cli

1.2 创建项目环境

新建一个python环境跑此程序,防止项目之间的依赖错误。建议采用python3.10版本,目前兼容性较好。环境创建好之后,计划环境,后续所有操作在此环境执行。

conda create -n mindmap_demo python=3.10

conda activate mindmap_demo

1.3 安装fastapi

需要通过fastapi提供http服务以后其他程序访问,也可使用flask。

pip install fastapi uvicorn

1.4 验证

  • 找一个目录新建mindmap文件夹,参考附录的markdown数据生成markdown文件,将markdown文件存放在新建文件夹的markdown文件夹下,如下图:

  • 然后执行markmap指令是否能正常执行,并生成html文件。如下:
markmap markdown/1741852665.md --no-open 
  • 生成的html文件如下图:

经过以下步骤说明项目环境已准备好,依赖全部正确安装。后续章节进入编码环节。

2 代码逻辑实现

在第一章节新建的根目录下新建markmap.py文件,编写主程序实现逻辑

2.1 引入依赖包

from fastapi import FastAPI, Request
from fastapi.responses import FileResponse
import time
import subprocess
import os
import sys

2.2 构建fastAPI并且生成根路径接口

# 使用 FastAPI 初始化应用
app = FastAPI()

# 测试根路径
@app.get('/')
def index():
    return "FastAPI server is running!"

2.3 处理markdown数据并生成html逻辑实现


# 上传并处理Markdown文件的路径
@app.post('/upload')
async def upload_markdown(request: Request):
    python_path = sys.executable
    print(f"python_path={python_path}")
    content = await request.body()
    content = content.decode('utf-8')
    time_name = str(int(time.time()))  # 生成时间戳作为文件名
    md_file_name = time_name + ".md"  # Markdown文件名
    html_file_name = time_name + ".html"  # HTML文件名

    # 创建markdown和html文件夹,如果它们不存在的话
    os.makedirs('markdown', exist_ok=True)
    os.makedirs('static/html', exist_ok=True)

    # 将Markdown内容写入文件
    with open(f'markdown/{md_file_name}', "w", encoding='utf-8') as f:
        f.write(content)

    print(f"Markdown file created: markdown/{md_file_name}")

    current_dir = os.getcwd()
    print(f"Current dir: {current_dir}")
    os.chdir(current_dir)
    # 使用subprocess调用markmap-cli将Markdown转换为HTML,并移动到static/html目录
    try:

        print(f"开始markmap")

        import shutil
        markmap_path = shutil.which('markmap')
        # 判断markmap是否存在
        if markmap_path is None:
            return "Error: markmap command not found. Please make sure it is installed and added to the system PATH."

        #  构建markdown生产html文件命令
        markdown_cmd = f"markmap markdown/{md_file_name} --output markdown/{html_file_name} --no-open"
        # 注意在windows环境下一定要使用powershell执行。默认使用的cmd,会出现生成不了html文件的情况。完全无输出,也不报错。
        if os.name == 'nt':
            # 在Windows上使用PowerShell执行命令
            markdown_cmd = f"powershell -Command markmap markdown/{md_file_name} --output markdown/{html_file_name} --no-open"

        print(f"即将执行的命令: {markdown_cmd}")
        # 主要shell=True必须加,不然会吧markdown_cmd里面的内容整个字符串当作一个命令,而不是markmap命令和参数,会报错windows文件不存在
        result = subprocess.run(markdown_cmd,
                                check=True, text=True, shell=True,
                                stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
        print(f"命令返回码: {result.returncode}")
        print(f"命令输出: {result.stdout}")
        print(f"命令错误信息: {result.stderr}")
        if result.returncode != 0:
            raise subprocess.CalledProcessError(result.returncode, result.args, output=result.stdout,
                                                stderr=result.stderr)

        # 尝试将生成的HTML文件移动到static/html文件夹
        os.replace(f'markdown/{html_file_name}', f'static/html/{html_file_name}')
        print(f"HTML file moved to: static/html/{html_file_name}")

        # 返回转换后的HTML文件链接
        base_url = str(request.base_url)
        preview_url = f"{base_url}html/{html_file_name}"
        return f'Markdown文件已保存. 点击预览: {preview_url}'
    except subprocess.CalledProcessError as e:
        # 如果转换过程中出现错误,返回错误信息
        return f"Error generating HTML file: {e.output}\n{e.stderr}"
    except Exception as e:
        return f"Unexpected error: {str(e)}"

2.4 提供HTML文件访问接口

# 提供HTML文件的路径
@app.get('/html/{filename}')
def get_html(filename: str):
    return FileResponse(f'static/html/{filename}')

2.5 启动http监听

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host='0.0.0.0', port=5001)

2.6 启动服务

在当前conda(mindmap_demo)环境下执行编写好的python脚本。如下图:

2.7 关键节点说明

  1. windows环境一定要指定powershell来执行命令,默认使用的cmd,可能识别不了python环境
  2. 执行指令时,shell=True一定要指定,否则会把整个字符串当作一个指令,导致报错,显示windows找不到文件。

3 整体流程验证

  • 通过apifox请求upload接口,将markdown数据填写进body中,注意是post请求,且body是raw格式。如下图:

  • 然后访问接口返回的html地址,效果如下图:

附录:

markdown文件

# 大模型微调指南
## 引言
大模型微调是自然语言处理领域中的一种常见技术,旨在通过调整预训练模型的参数,使其更好地适应特定任务或数据集。
## 微调步骤
1. 选择预训练模型
   - 模型类型:根据任务需求选择合适的预训练模型,如文本生成、文本分类、命名实体识别等。
   - 模型规模:根据计算资源选择适当规模的模型,大型模型通常性能更好,但也需要更多的计算资源。
2. 准备数据集
   - 数据收集:收集与任务相关的数据,确保数据的质量和多样性。
   - 数据预处理:对收集到的数据进行清洗、分词、标注等预处理操作,使其符合模型输入的要求。
   - 数据划分:将数据集划分为训练集、验证集和测试集,用于模型训练、验证和测试。
3. 设置训练参数
   - 学习率:设置合适的学习率,通常使用较小的学习率进行微调。
   - 批量大小(Batch Size):根据计算资源设置合适的批量大小。
   - 训练轮数(Epochs):根据验证集性能确定训练轮数,避免过拟合。
4. 微调模型
   - 加载预训练模型:使用深度学习框架加载预训练模型。
   - 修改模型输出层:根据任务需求修改模型的输出层,使其适应特定任务的输出格式。
   - 训练模型:在训练集上训练模型,同时使用验证集进行性能监控,调整学习率等参数。
5. 模型评估与测试
   - 评估指标:根据任务需求选择合适的评估指标,如准确率、F1分数、BLEU分数等。
   - 模型测试:在测试集上评估模型的性能,确保模型具有良好的泛化能力。
6. 模型部署与监控
   - 模型导出:将训练好的模型导出为可部署的格式,如ONNX、TensorFlow SavedModel等。
   - 模型部署:将模型部署到生产环境中,确保模型能够实时处理输入数据。
   - 性能监控:持续监控模型在生产环境中的性能,及时发现并解决问题。
## 注意事项
- 数据质量:确保数据的质量和多样性,避免数据偏差导致模型性能下降。
- 计算资源:根据计算资源选择合适的模型规模和批量大小,避免资源不足导致训练失败。
- 过拟合:使用正则化、dropout等技术防止模型过拟合,同时关注验证集性能。
- 模型解释性:对于某些任务,可能需要关注模型的解释性,以便更好地理解模型的决策过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值