一句话生成uml图相关操作

这里写目录标题

cpp 复制代码
调用 Deepseek API (假设接口类似OpenAI)

输入一句话描述

自动生成PlantUML代码

调用PlantUML渲染生成时序图PNG
cpp 复制代码
sudo yum install -y java-1.8.0-openjdk-devel

一、实现思路

输入:一句自然语言描述

调用大语言模型API(或者本地部署模型)生成对应的脚本代码(PlantUML代码、Airflow DAG等)

保存脚本到本地文件

调用相关工具渲染脚本生成图片(PlantUML)或者执行(Airflow等)

展示或保存结果

二、关键技术栈

大语言模型:OpenAI API(GPT-4/3.5),或本地模型(GPT-2,LLaMA)

PlantUML渲染:本地Java环境运行plantuml.jar

文件操作:Python内置

子进程调用:Python的subprocess模块调用外部命令

三、示范代码:一句话生成PlantUML时序图并渲染

这里以调用OpenAI API举例,离线部署请用本地模型接口替换调用部分

cpp 复制代码
import requests
import os
import subprocess

# Deepseek API配置
DEESEEK_API_KEY = "sk-23ef0511ccec4b729f7e0a62bef75904"
DEESEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"  # 请替换成实际接口地址

def generate_plantuml_code(description: str) -> str:
    prompt = f"""
你是一名专业的UML设计师,帮我根据下面的需求描述生成PlantUML格式的时序图代码。

需求描述:
{description}

请直接输出PlantUML时序图完整代码,确保格式正确,可以直接用PlantUML渲染。
"""
    headers = {
        "Authorization": f"Bearer {DEESEEK_API_KEY}",
        "Content-Type": "application/json"
    }
    payload = {
        "model": "deepseek-chat",
        "messages": [{"role": "user", "content": prompt}],
        "temperature": 0.3,
        "max_tokens": 400
    }

    response = requests.post(DEESEEK_API_URL, json=payload, headers=headers)
    response.raise_for_status()
    data = response.json()
    code = data['choices'][0]['message']['content']
    return code.strip()

def save_to_file(content: str, filename: str):
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(content)

def render_plantuml(plantuml_file: str):
    plantuml_jar_path = "./plantuml.jar"
    if not os.path.isfile(plantuml_jar_path):
        raise FileNotFoundError(f"{plantuml_jar_path} 不存在,请先下载 PlantUML jar 并放到脚本目录")
    subprocess.run(["java", "-jar", plantuml_jar_path, plantuml_file], check=True)
#     subprocess.run(["java", "-Dfile.encoding=UTF-8", "-jar", "plantuml.jar", plantuml_file], check=True)

def main():
    # 这里是示范用的描述,可以替换成任意一句话
    description = ("用户登录系统,系统接收用户名和密码,"
                   "验证成功后返回登录成功信息,"
                   "验证失败则返回错误提示。")

    print("调用Deepseek生成PlantUML代码...")
    plantuml_code = generate_plantuml_code(description)
    print("\n生成的PlantUML代码如下:\n")
    print(plantuml_code)

    filename = "output.puml"
    save_to_file(plantuml_code, filename)
    print(f"\nPlantUML代码已保存到文件:{filename}")

    print("调用PlantUML生成时序图PNG...")
    render_plantuml(filename)
    print("时序图生成完成,请查看output.png文件。")

if __name__ == "__main__":
    main()

四、运行前准备

申请OpenAI API密钥(或者用自己离线模型接口替换generate_plantuml_code)

下载并安装Java运行环境

下载PlantUML工具包:https://plantuml.com/zh/starting,把plantuml.jar放到脚本同目录

运行脚本,输入描述,自动生成并渲染时序图

如报问题

你这个错误:

cpp 复制代码
ImportError: Can't connect to HTTPS URL because the SSL module is not available.
意思是你的 Python 环境中缺少对 SSL 的支持,导致 requests 访问 HTTPS 网址失败。

这种直接参考之前文档部署ocr 也存在ssl的问题结局方式

最终效果展示

五、扩展

换成Airflow DAG代码生成,调用Airflow执行

用本地大模型微调后替换OpenAI接口

加GUI界面,方便输入和展示结果

多模态生成:比如直接用图形库展示流程图,不必依赖PlantUML