基于dify开发的多模态大模型应用-智能铭牌识别(附代码)

文章讲述了如何使用Dify框架进行大模型应用开发,包括接入大模型、搭建在线服务、编写FastAPI代码以及设计工作流和Prompt。着重展示了通过Dify实现文字处理和表格生成的实际步骤。
摘要由CSDN通过智能技术生成

大模型相关目录

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

  1. 大模型应用向开发路径:AI代理工作流
  2. 大模型应用开发实用开源项目汇总
  3. 大模型问答项目问答性能评估方法
  4. 大模型数据侧总结
  5. 大模型token等基本概念及参数和内存的关系
  6. 大模型应用开发-华为大模型生态规划
  7. 从零开始的LLaMA-Factory的指令增量微调
  8. 基于实体抽取-SMC-语义向量的大模型能力评估通用算法(附代码)
  9. 基于Langchain-chatchat的向量库构建及检索(附代码)
  10. 一文教你成为合格的Prompt工程师
  11. 最简明的大模型agent教程
  12. 批量使用API调用langchain-chatchat知识库能力
  13. langchin-chatchat部分开发笔记(持续更新)
  14. 文心一言、讯飞星火、GPT、通义千问等线上API调用示例
  15. 大模型RAG性能提升路径
  16. langchain的基本使用
  17. 结合基础模型的大模型多源信息应用开发
  18. COT:大模型的强化利器
  19. 多角色大模型问答性能提升策略(附代码)
  20. 大模型接入外部在线信息提升应用性能
  21. 从零开始的Dify大模型应用开发指南
  22. 基于dify开发的多模态大模型应用(附代码)


Dify框架

Didy是一个开源的 LLM 应用开发平台。
本文以文字识别文字整合表格填入三步功能组合的铭牌信息提取功能为例,介绍Dify框架在多模态大模型开发的基本流程。
多模态大模型实现这一功能,相比于传统的OCR系统,其 通用性更强、开发更快、模型对抽取结果的后处理能力更优秀

使用示例

本案例实现路径:

  • 输入:图像
  • 处理过程:文字提取、矫正、信息整合
  • 输出:json数据及整理后的excel表格文件
  • 注意:excel表格文件生成功能需搭建一个在线的服务(很简单)

步骤1:Dify大模型能力接入

首先在设定界面接入智谱AI的API,当然此处不限大模型厂家,只要具备多模态能力的大模型均可,离线模型如OmniLMM等亦可。
在这里插入图片描述
在这里插入图片描述
上图中glm-4v即具备视觉能力的多模态大模型。

步骤2:在线服务

该服务是为了服务于excel表格生成后,为用户提供的下载功能。
即大模型返回一个链接,通过该链接用户可下载大模型所生成的excel文件。
只需要在服务器启动服务,语句如下:

python -m http.server 9707

注,9707为端口,注意该服务不要和其他服务端口冲突。

步骤3:代码

from fastapi import FastAPI, HTTPException, Depends
from typing import List, Optional
import re
import json
import datetime
import pandas as pd
from pydantic import BaseModel


app = FastAPI()
def post_processing(input_data):
    # 使用正则表达式匹配{}之间的内容
    pattern = r'{(.*?)}'
    match = re.search(pattern, input_data, re.DOTALL)

    # 匹配后做数据后处理
    if match:
        match = '{' + match.group(1) + '}'
        json_str = match.replace('\n', '').replace(',}', '}')
        return json_str
    else:
        return str({'error':'llm out error!'})


@app.get("/generate")
def get_table(input_str = Depends(post_processing)):
    # 将字符串转换为字典
    data_dict = json.loads(input_str)
    for k, v in data_dict.items():
        if type(v) == list:
            data_dict[k] = [' '.join(v)]
        else:
            data_dict[k] = [v]
    df_json = pd.DataFrame(data_dict)
    # 读取excel文件
    df_excel = pd.read_excel('/home/gputest/lyq/py_file/result.xlsx', engine='openpyxl')

    # 将json数据追加到excel的DataFrame中(这里简单地追加到末尾)
    # 注意:你可能需要根据你的数据结构和需求调整这一步
    df_excel = pd.concat([df_excel, df_json], ignore_index=True)

    # 保存修改后的excel文件
    # 获取当下时间并format
    formatted_time = str(datetime.datetime.now().strftime("%Y_%m_%d_%H%M%S"))
    df_excel.to_excel(formatted_time+'.xlsx', index=False, engine='openpyxl')

    return 'http://172.19.138.52:9707/'+formatted_time+'.xlsx'

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

上述代码中

return ‘http://172.19.138.52:9707/’+formatted_time+‘.xlsx’

这一语句是配合步骤2生成下载链接的。

其他代码,则是对大模型整合的json代码做后处理和表格对齐填充工作,之后发布为一个可访问调用的API业务。

步骤4:Dify项目构建——python功能API引入

运行服务成功如下所示:
在这里插入图片描述
运行API成功如下所示:
在这里插入图片描述

进入Dify,找到工具页面自定义工具:
在这里插入图片描述
在schema中填入API对应内容:
在这里插入图片描述
Schema:

{
    "openapi": "3.1.0",
    "info": {
        "title": "FastAPI",
        "version": "0.1.0"
    },
    "servers": [
        {
          "url": "http://172.19.138.52:3000"
        }
      ],
    "paths": {
        "/generate": {
            "get": {
                "summary": "Get Table",
                "operationId": "get_table_generate_get",
                "parameters": [
                    {
                        "required": true,
                        "schema": {
                            "title": "Input Data"
                        },
                        "name": "input_data",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful Response",
                        "content": {
                            "application/json": {
                                "schema": {}
                            }
                        }
                    },
                    "422": {
                        "description": "Validation Error",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/HTTPValidationError"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "HTTPValidationError": {
                "properties": {
                    "detail": {
                        "items": {
                            "$ref": "#/components/schemas/ValidationError"
                        },
                        "type": "array",
                        "title": "Detail"
                    }
                },
                "type": "object",
                "title": "HTTPValidationError"
            },
            "ValidationError": {
                "properties": {
                    "loc": {
                        "items": {
                            "anyOf": [
                                {
                                    "type": "string"
                                },
                                {
                                    "type": "integer"
                                }
                            ]
                        },
                        "type": "array",
                        "title": "Location"
                    },
                    "msg": {
                        "type": "string",
                        "title": "Message"
                    },
                    "type": {
                        "type": "string",
                        "title": "Error Type"
                    }
                },
                "type": "object",
                "required": [
                    "loc",
                    "msg",
                    "type"
                ],
                "title": "ValidationError"
            }
        }
    }
}

上述内容获取方式:
在这里插入图片描述
步骤3中启动了API服务,访问172.19.138.52:3000/docs即可点击下图红框获取。
在这里插入图片描述

步骤5:Dify项目构建——工作流串接及Prmpot设计

构建工作流如下:
在这里插入图片描述
部分细节(prompt、多模态配置、前后输入)如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后,该服务即可搭建为一个API或url聊天链接,测试结果如下:
输入图片:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 40
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
dify是一个开源的Python库,用于快速开发机器学习模型和部署机器学习服务。它提供了一系列的工具和接口,帮助开发者在机器学习项目中更高效地进行数据处理、特征工程、模型训练和模型部署等任务。 dify的主要特点包括: 1. 简单易用:dify提供了简洁的API和丰富的功能,使得开发者可以快速上手并进行高效的开发。 2. 模块化设计:dify采用模块化的设计,每个模块都有清晰的功能和接口,可以根据需求选择性地使用。 3. 数据处理和特征工程:dify提供了丰富的数据处理和特征工程工具,包括数据清洗、特征选择、特征变换等功能,帮助开发者更好地准备数据。 4. 模型训练和评估:dify支持多种常见的机器学习算法,并提供了模型训练和评估的接口,方便开发者进行模型选择和性能评估。 5. 模型部署和服务化:dify支持将训练好的模型部署为API服务,方便其他应用程序进行调用和集成。 如果你想开发模块,可以按照以下步骤进行: 1. 确定模块的功能和接口:明确你的模块要解决的问题,并设计好相应的功能和接口。 2. 实现模块代码:使用Python编写你的模块代码,可以借助dify提供的工具和接口来简化开发过程。 3. 测试和调试:对你的模块进行测试和调试,确保其功能正常并符合预期。 4. 文档编写:编写清晰的文档,介绍你的模块的功能、使用方法和示例代码等。 5. 提交和分享:将你的模块提交到dify的开源社区,与其他开发者分享你的成果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

写代码的中青年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值