多类型图像OCR:基于Dify的多模态Agent实现

大模型相关目录

大模型,包括部署微调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开发的多模态大模型应用(附代码)
  23. 基于零一万物多模态大模型通过外接数据方案优化图像文字抽取系统
  24. 快速接入stable diffusion的文生图能力
  25. 多模态大模型通过外接数据方案实现电力智能巡检(设计方案)
  26. 大模型prompt实例:知识库信息质量校验模块
  27. 基于Dify的LLM-RAG多轮对话需求解决方案(附代码)
  28. Dify大模型开发技巧:约束大模型回答范围
  29. 以API形式调用Dify项目应用(附代码)
  30. 基于Dify的QA数据集构建(附代码)
  31. Qwen-2-7B和GLM-4-9B:大模型届的比亚迪秦L
  32. 文擎毕昇和Dify:大模型开发平台模式对比
  33. 多类型图像OCR:基于Dify的多模态Agent实现


背景

Agent 通常是一个智能软件实体,能够感知其环境,并根据这些感知做出决策和行动。它可能包括学习能力,以优化其未来的决策和行动。

当下Agent研究往往是针对于文本类型数据输入,对语义进行感知并决策,现在对图文多模态输入的Agent研究相对比较匮乏。

技术方案

对不同类型图像进行识别时的解决方案。

  • 主Agent负责对图像类型进行识别,并格式化输出。
  • 子Agent负责对指定图像类型进行分析,被注入了一定的先验知识,如表格分析模型、铭牌分析模型等,并格式化输出。

技术架构图如下:
在这里插入图片描述
其中,工具使用效果如下:
在这里插入图片描述

代码及Dify设计

在这里插入图片描述
在这里插入图片描述

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 ', ':null,').replace('\n', '').replace('},', ',').replace(':',':')
        json_str = json_str.strip('"\"')
        return json_str
    else:
        return str({'error':'llm out error!'})
    
@app.get("/pic_type")
def get_pic_type(url):
    import openai
    from openai import OpenAI
    import re

    API_BASE = "https://api.lingyiwanwu.com/v1"
    API_KEY = "e6609f77a0fb40a290eb034535917144"

    client = OpenAI(
        # defaults to os.environ.get("OPENAI_API_KEY")
        api_key=API_KEY,
        base_url=API_BASE
    )


    prompt = '''
## 职位:你是一个图像类型判别小助手。
## 职能:你可以将图像分类为【设备铭牌、文件表格、其他】三个类型。其中,设备铭牌指包含设备类型、设备规范、设备厂家、编号、参数等信息的铭牌图像;文件表格指以表格形式存储信息的图像。
## 输出格式:你只能输出判断后得出的图像类型,不需要输出图像类型以外的信息。如:设备铭牌、文件表格、其他
    '''

    completion = client.chat.completions.create(
        model="yi-vl-plus",
        messages= [
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": url
                        }
                    },
                    {
                        "type": "text",
                        "text": prompt
                    }
                ]
            }
        ]
    )
    raw_result = completion.choices[0].message.content
    print('LLM Respone:',raw_result)
    
    
    # 定义正则表达式,匹配“设备铭牌”或“文件表格”
    pattern = re.compile(r'设备铭牌|文件表格')
    
    # 使用正则表达式搜索字符串
    match = pattern.search(raw_result)
    return match.group() if match else None,url

@app.get("/mingpai_info")
def get_mingpai_info(url):
    import openai
    from openai import OpenAI
    import re

    API_BASE = "https://api.lingyiwanwu.com/v1"
    API_KEY = "e6609f77a0fb40a290eb034535917144"

    client = OpenAI(
        # defaults to os.environ.get("OPENAI_API_KEY")
        api_key=API_KEY,
        base_url=API_BASE
    )


    prompt = '''
## 职位:你是一个具备图像信息提取、信息规整的智能助手
## 职能:请提取图像中的文字、数字等文本内容,重点提取【提取下二维码下方的数字和字母组成的条形码编号】。
根据识别内容信息提取【设备名称】、【规约标准】、【电压参数】、【电流参数】、【频率参数】、【生产年份】、【生产公司】等内容。
提取后,返回格式参考如下:{
"编号":"09991DY00000009999999999",
"设备名称":"配电箱",
"相关标准":"GB12345.1-2099",
"生产年份":"2059年",
"生产厂家":"某某有限公司",
"电压参数":"110V",
"电流参数":"0.3A",
"频率参数":"80HZ"
"功率参数":“COSΦ=0.8滞后”
}
注意,提取不到时将提取内容标注“null”,且不要填入多余内容。
注意,我不需要任何代码,请输出json格式结果,json中不允许嵌套json。
    '''

    completion = client.chat.completions.create(
        model="yi-vl-plus",
        messages= [
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": url
                        }
                    },
                    {
                        "type": "text",
                        "text": prompt
                    }
                ]
            }
        ]
    )
    raw_result = completion.choices[0].message.content
    print('LLM Respone:',raw_result)
    return post_processing(raw_result)
@app.get("/table_info")
def get_table_info(url):
    import openai
    from openai import OpenAI
    import re

    API_BASE = "https://api.lingyiwanwu.com/v1"
    API_KEY = "e6609f77a0fb40a290eb034535917144"

    client = OpenAI(
        # defaults to os.environ.get("OPENAI_API_KEY")
        api_key=API_KEY,
        base_url=API_BASE
    )


    prompt = '''
## 职位:你是一个具备表单图像信息提取、信息规整的智能助手
## 职能:请提取图像中的文字、数字等文本内容,注意图像是一个表格,你需要理解表格中的内容。
根据识别内容信息提取【工程项目名称】、【工作任务】、【工作内容】、【运行单位】、【承包商或作业施工单位】、【交底日期】、【安全措施】等内容。
提取后,返回格式参考如下:{
"工程项目名称":"某某项目",
"工作任务":"XXKv站XX任务",
"运行单位":"某某所",
"承包商或作业施工单位":"某某公司",
"交底日期":"2024年6月13日",
"安全措施":""
}
注意,提取不到时将提取内容标注“null”,且不要填入多余内容。
注意,我不需要任何代码,请输出json格式结果。
    '''

    completion = client.chat.completions.create(
        model="yi-vl-plus",
        messages= [
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": url
                        }
                    },
                    {
                        "type": "text",
                        "text": prompt
                    }
                ]
            }
        ]
    )
    raw_result = completion.choices[0].message.content
    print('LLM Respone:',raw_result)
    return post_processing(raw_result)


@app.get("/generate")
def get_table(input_str = Depends(post_processing)):
    print(input_str)
    # 将字符串转换为字典
    data_dict = json.loads(input_str.replace('\\n','').replace('\\',''))
    
    for k, v in data_dict.items():
        if type(v) == list:
            data_dict[k] = [' '.join(v)]
        else:
            data_dict[k] = [v]
    print('##################','json')
    df_json = pd.DataFrame(data_dict)
    print(data_dict)
    print('##################','df')
    print(df_json)
    '''
    # 读取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_json.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=9706)

需要强调的是,由于Dify不支持图像数据在工作流中的流通控制,因此本设计使用图像链接。
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

写代码的中青年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值