多模态大模型赋能工程设计合规性校验解决方案

大模型相关目录

大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容
从0起步,扬帆起航。

  1. 再谈Agent:Dify智能体实现Txet2SQL
  2. Moe模式:或将是最好的大模型应用开发路径
  3. 一文带你了解大模型RAG
  4. 详细记录swfit微调interVL2-8B多模态大模型进行目标检测(附代码)
  5. DIfy中集成magic-pdf实现文档解析agent与多模态大模型图文问答
  6. 大模型Prompt trick:利用大模型同情心提升模型性能
  7. 一文带你入门大模型微调
  8. 开源大模型LLaMA架构介绍
  9. CyberScraper-2077+simple-one-api:使用大模型爬虫
  10. 大模型高效利用结构化信息研究:HTML格式或许更好
  11. moonshot:一个用于评估任何 LLM 应用程序的简单模块化工具
  12. 多模态大模型赋能工程设计合规性校验解决方案


简介

在这里插入图片描述
工程建设应用场景下,存在接入方式图、接线图、配置图、安装图等典型设计原则,通过人工智能和大模型相关技术,可实现对工程建设有关图纸的智能分析识别。

总体设计

在这里插入图片描述
从数据层面看,可简单描述如:
输入初始蓝图扫码数据——>经图像处理强化后的图像数据——>拆解图纸为指定关键点,手动制定或目标检测定位——>关键点合规性校验——>校验结果整合,完成对整体图纸的合规性检验。
在这里插入图片描述
与之对应的,算法描述可如上图所示。

实际代码及开发组成

涉及:dify大模型应用开发平台、qwen多模态大模型接口、python脚本开发及fastapi框架

总体架构:设计了面向镀锌角铁的合规性检测子agent;设计了面向低压柜的合规性检验子agent;设计了镀锌角铁、低压柜的判别主agent
在这里插入图片描述

镀锌角铁的合规性检测子agent

在这里插入图片描述
该模块实现的效果和原理如上图所示,具体由dify开发而来。

dify中呈现如下:
在这里插入图片描述

LLM1模块prompt设定:

# 职能:
你是一个设计图描述专家,可以对设计图纸图像进行内容描述。
# 职能:

你是一个设计图描述专家,可以对设计图纸图像进行内容描述。
判断镀锌角铁是否与地面垂直。
提取图纸中两个镀锌角铁之间的距离。
# 限制
回答要求简单明了。
指出镀锌角铁是否与地面垂直
明确说明两个镀锌角铁之间的距离。

# 镀锌角铁硬竖直摆放时垂直地面,不可倾斜。
{{#sys.query#}}

LLM2模块prompt设定:

# 职能:

你是一个规则校验专家,可以根据规则对输入的信息进行校验。

# 校验点:
请检查镀锌角铁必须垂直插入地面

请检查镀锌角铁间距必须为5000mm左右


【输入信息】:图纸中两个镀锌角铁之间的距离是5000mm,是垂直插入地面的。
推理思考:

首先校验镀锌角铁是否垂直插入地面。
随后检查镀锌角铁之间的距离,获取距离数值为5000mm.
分析结论:
镀锌角铁垂直插入地面,符合要求
镀锌角铁间距为5000mm左右,符合要求



【输入信息】:图中镀锌角铁之间的距离是4000mm,不是垂直插入地面的。
推理思考:
首先校验镀锌角铁是否垂直插入地面。
随后检查镀锌角铁之间的距离,获取距离数值为4000mm.
分析结论:
镀锌角铁不是垂直插入地面,不符合要求
镀锌角铁间距为4000mm左右,不符合要求

【输入信息】:{{#llm.text#}}

后处理函数:

def main(arg1: str) -> dict:
    result = arg1.split(':')[-1]
    return {
        "result": result,
    }

低压柜子agent

与之类似

判别设计

import requests
import json
from openai import OpenAI
from fastapi import FastAPI, HTTPException, Depends

app = FastAPI()

def image_analysis_1(image_url):
    url = 'http://172.20.32.127/v1/chat-messages'
    headers = {
        'Authorization': 'Bearer app-9FIon6xxoW5cilCpRiDwzGnG',
        'Content-Type': 'application/json'
    }
    data = {
        "inputs": {},
        "query": "开始分析",
        "response_mode": "blocking",
        "conversation_id": "",
        "user": "abc-123",
        "files": [
            {
                "type": "image",
                "transfer_method": "remote_url",
                "url": image_url
            }
        ]
    }
    response = requests.post(url, headers=headers, data=json.dumps(data))
    return response.json()['answer']


def image_analysis_2(image_url):
    url = 'http://172.20.32.127/v1/chat-messages'
    headers = {
        'Authorization': 'Bearer app-Oga2SqOAELjdAwAQmH27rBmV',
        'Content-Type': 'application/json'
    }
    data = {
        "inputs": {},
        "query": "开始分析",
        "response_mode": "blocking",
        "conversation_id": "",
        "user": "abc-123",
        "files": [
            {
                "type": "image",
                "transfer_method": "remote_url",
                "url": image_url
            }
        ]
    }
    response = requests.post(url, headers=headers, data=json.dumps(data))
    return response.json()['answer']

def extract_content(json_string):
    # 将JSON字符串转换成Python字典
    data = json.loads(json_string)
    
    content = ''
    
    # 遍历choices列表查找content字段
    if 'choices' in data:
        for choice in data['choices']:
            if 'message' in choice and 'content' in choice['message']:
                content = choice['message']['content']
    return content
def get_pic_type(input_url):
    client = OpenAI(
        api_key='sk-api脱敏',
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    )
    completion = client.chat.completions.create(
        model="qwen-vl-plus",
        messages=[
            {
                "role": "user",
                "content": [
                {
                    "type": "text",
                    "text": "## 职位:你是一个图像类型判别大师。\n."+'''
                  你需要判别图像属于【镀锌角铁】还是属于【低压柜】。
                  只能输出一个类别。
                  例1:
                  输入:图像1
                  输出:镀锌角铁

                  例2:
                  输入:图像2
                  输出:镀锌角铁

                  例3:
                  输入:图像3
                  输出:低压柜

                  # 注意只输出一个类别,不输出其他内容。

                  开始分析:
                  '''
                },
                {
                    "type": "image_url",
                    "image_url": {
                    "url": input_url
                    }
                }
                ]
            }
            ]
        )
    return extract_content(completion.model_dump_json())




@app.get("/main_fuction")
def main(input_img_url):
    response = ''
    try:
        mid = get_pic_type(input_img_url)
        if "低压柜" in mid:
            response = image_analysis_2(input_img_url)
            print(mid,response)
        else:
            response = image_analysis_1(input_img_url)
            print(mid,response)
    except:
        print('some error exist.')
    
    return response


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

运行后将其接入dify工具。

最终效果

在这里插入图片描述
使用上述图像进行测试

在这里插入图片描述
效果如上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码的中青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值