LLM 构建Data Muti-Agents 赋能数据分析平台的实践之①:数据采集

一、 概述

在推进产业数字化的过程中,数据作为最重要的资源是优化产业管控过程和提升产业数字化水平的基础一环,如何实现数据采集工作的便利化、高效化、智能化是降低数据分析体系运转成本以及推动数据价值挖掘体系的基础手段。随着数字化在产业端的推进,仅仅依靠各产业各企业内部的业务系统数据是不够的,一方面当前大量的数据集中在互联网,实时的、历史的、以及有价值的数据往往集中在专业行业网站、门户网站;另一方面行业最新的动态、知识更新往往沉淀在互联网平台上。如何将互联网、非结构化文本、图片等数据结构化,作为数据资源体系的重要补充运用到产业数字化中,是进一步挖掘数据价值、补充领域内外知识的重大问题。
以往获取互联网上的数据采取的主要手段就是爬虫,然而这种手段需要较高的代码能力、结构化互联网数据依然需要较大的工作量,而且对于文本知识的结构化通过正则式抽取的方式难以有效统一规则。例如笔者负责构建的农产品市场监测预警系统设计中,为了解决农产品市场数据的抽取、清洗、结构化,采用了正则式抽取文本的方式,然而当文本编写的样式、规则、数据嵌入的方式变化时,还得重新更新正则式库,维护成本奇高。
在这里插入图片描述
图1 通过文本爬取、正则式清洗获取行业网站-瘦肉型白条猪肉出厂价格价格
在前述文章中【LLM赋能产业数智化业务系统升级的思考】我们讨论了将LLM引入数据平台的设想、可行性及应用场景,通过我们的测试输入待抽取数据的网站—>LLM—>清洗入库是可行性的。本文对该设想做一些实践验证,以推动LLM在产业数字化中的落地。

二、整体设计

1、数据的来源将有如下渠道:文本数据块、网页表格块、网页文本块、图片块等。
2、使用langchain或者llamaindex等框架的检索工具,根据prompt的要求检索相关的信息组成知识块。
3、检索的知识块+用户数据格式要求+数据导出方式一起组合成新的提示词{task prompt}输入到大模型中,完成数据的提取及导入。
在这里插入图片描述

三、数据采集实践

1.使用langchain及llama.cpp加载大模型,其他的加载方式请参考blog:LLM RAG 多种方式装载LLM的实践

import os
from langchain.vectorstores import Chroma
from langchain.prompts import PromptTemplate
from langchain.llms import LlamaCpp
from langchain.prompts import PromptTemplate
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
template = """Question: {question}

Answer: Let's work this out in a step by step way to be sure we have the right answer."""

prompt = PromptTemplate(template=template, input_variables=["question"])
callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])

n_gpu_layers =0  # Change this value based on your model and your GPU VRAM pool.
n_batch = 5120  # Should be between 1 and n_ctx, consider the amount of VRAM in your GPU.
callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])
# Make sure the model path is correct for your system!
llm = LlamaCpp(
    model_path="./fivetwin/openchat-3.5-0106-GGUF/openchat-3.5-0106.Q4_K_M.gguf",
    n_gpu_layers=n_gpu_layers,
    n_batch=n_batch,
    max_tokens=200000,
    n_ctx=8912,
    callback_manager=callback_manager,
    verbose=True, # Verbose is required to pass to the callback manager
    context_window=4096,
)

2、数据获取
(1)网页表格数据结构化获取
我们需要将该网站的生猪报价信息整理成json格式。
建立网页文本的知识块:使用langchain AsyncHtmlLoader获取网页的内容,并向量化。

import pprint
from langchain.document_loaders import AsyncHtmlLoader 
from langchain.document_transformers import Html2TextTransformer
from langchain.text_splitter import RecursiveCharacterTextSplitter
urls = ["https://zhuanlan.zhihu.com/p/671371646"]
loader = AsyncHtmlLoader(urls)
docs = loader.load()
#print(docs)
# Transform
html2text = Html2TextTransformer()
docs_transformed = html2text.transform_documents(docs)

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1500, chunk_overlap=150)
split_docs = text_splitter.split_documents(docs_transformed)
vectordb = Chroma.from_documents(
    documents=split_docs,
    embedding=embeddings
    )

构建数据抽取解析问答链

from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="chat_history", input_key="human_input",return_messages=False)
from langchain.chains import ConversationalRetrievalChain
bot = ConversationalRetrievalChain.from_llm(llm, retriever=vectordb.as_retriever(),memory=memory,verbose=True,return_source_documents=False)

构建数据输出要求及格式:

query = """请根据上下文,查询整理各省市生猪市场价格信息,请使用如下的JSON格式返回数据
{{
    {{
      "产地或品牌":"x",
      "规格": "a",
      "单位":"元/公斤",
      "报价": "50",
      "报价提供方":"b",
      "发布时间":"b"
    }},
    {{
      "产地或品牌":"x",
      "规格": "a",
      "单位":"元/公斤",
      "报价": "50",
      "报价提供方":"b",
      "发布时间":"b"
    }},
  
}}
例如:
{
    "产地或品牌": "河北石家庄",
    "规格": "外三元;体重:90-100kg; ",
    "单位": "元/公斤",
    "报价": 15.8,
    "报价提供方": "河北石家庄市",
    "发布时间": "2024-01-30"
    }},
将数据整理成csv格式,并输出一个叫“生猪市场价格情况表.csv”的文件,可以使用python模块的pandas工具
"""
result = bot.invoke({"question": query})
result["answer"]

结果分析:
1)由下图可以看出LLM-RAG-bot将检索到的知识块与数据格式要求一起组合成promt输入到LLM中
在这里插入图片描述
2)结果LLM-RAG-bot系统的解析成功将数据抽取成用户所需的格式。
在这里插入图片描述
(2)网页文本数据的抽取
大量的数据以文本形式存储在互联网上,如何将其中的有用的信息抽取成结构化的将对于数据资源的补充具有重大意义。接下来将设计一个基于LLM的系统用于文本知识结构化信息抽取,首先我们将互联网上的文本通过爬虫或者其他形式整理成csv,再通过RAG和提示词工程提取其中的结构化信息。
在这里插入图片描述

from langchain.document_loaders.csv_loader import CSVLoader
loader = CSVLoader(file_path="./data.csv")
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1500, chunk_overlap=150)
split_docs = text_splitter.split_documents(docs)
vectordb = Chroma.from_documents(documents=split_docs,embedding=embeddings)
memory = ConversationBufferMemory(memory_key="chat_history", input_key="human_input",return_messages=False)
bot_data = ConversationalRetrievalChain.from_llm(llm, retriever=vectordb.as_retriever(),memory=memory,verbose=True,return_source_documents=False)

构建提示词工程:

query="""请根据上下文,查询整理文档中农产品价格信息,请使用JSON格式返回数据
{{
    {{
      "date":"x",
      "type": "a",
      "unit":"元/公斤",
      "price": "50",
      .....
    }},
    {{
       "date":"x",
      "type": "a",
      "unit":"元/公斤",
      "price": "50",
      .....
    }},
  
}}
例如:
{
    "date":"7月21日",
    "type": "牛肉",
    "unit":"元/公斤",
    "price": "50",
    }},

运行RAG系统:

result = bot.invoke({"query": query})
result["answer"]

结果探讨:
1)系统将提示词和检索到的问答合并输入大模型:
在这里插入图片描述
2)输出我们说规定的数据格式:成功将文本中关于农产品的结构化信息提取出来。

在这里插入图片描述

四、小结

通过本次测试,我们成功将大模型及AI Agents的应用场景扩展到数据分析体系中的基础环节——数据采集,可以广泛的应用到互联网网页表格数据抽取、文本数据整理等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/441006.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑小问题:Windows更新后黑屏

Windows 更新后黑屏解决方法 在 Windows 更新后,伴随了一个小问题,电脑启动后出现了桌面黑屏。原因可能是火绒把 explorer.exe 当病毒处理了。 下面讲解 Windows 更新后黑屏的解决方法,步骤如下: 1. 按 ctrl alt delete 组合键…

JAVA实战开源项目:生活废品回收系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案,旨在鼓…

【操作系统概念】 第9章:虚拟内存管理

文章目录 0.前言9.1 背景9.2 按需调页9.2.1 基本概念9.2.2 按需调页的性能 9.3 写时复制9.4 页面置换9.4.1 基本页置换9.4.2 FIFO页置换9.4.3 最优(Optimal)置换9.4.4 LRU(Least Recently Used)页置换9.4.5 近似LRU页置换9.4.6 页缓冲算法 9.5 帧分配9.5…

遥遥领先!基于transformer变体的时间序列预测新SOTA!

目前,以CNN、RNN和 Transformer 模型为代表的深度学习算法已经超越了传统机器学习算法,成为了时间序列预测领域一个新的研究趋向。这其中,基于Transformer架构的模型在时间序列预测中取得了丰硕的成果。 Transformer模型因其强大的序列建模能…

JVM-垃圾收集器G1

G1垃圾回收器 概述: 是一款面向服务器的垃圾收集器,主要针对配备多个处理器及大容量内存的机器. 以极高效率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.G1保留了年轻代和老年代的概念,但不再是物理隔阂了,它们都是(可以不连…

Apache服务的搭建与配置

一、apache安装 systemctl stop firewalldsystemctl disable firewalldsetenforce 0yum -y install httpdsystemctl start httpdnetstat -ntlp | grep 80 二、认识主配置文件 # vim /etc/httpd/conf/httpd.conf ServerRoot "/etc/httpd" #定义工作目…

【linux驱动开发】IO模型之同步IO、异步IO、IO多路复用

文章目录 IO的概述IO模型的实现阻塞IO非阻塞IOIO多路复用信号驱动异步IO 编译与测试说明 IO的概述 io,英文名称为inoput与output,表示输入与输出。 在冯诺依曼结构计算机中,计算机由 运算器、控制器、存储器、输入、输出五部分组成&#xf…

华为云开年采购季Web及移动App上云体验,助力软件行业创新发展

随着云化、智能化浪潮的进一步深入,越来越多的应用软件开发商选择将核心产品从本地IDC机房搬迁到公有云上。但同时,软件开发商们也非常在意公有云厂商的可靠性与安全性,希望能够选择一家更加稳定可靠的云服务商,确保自身业务的连续…

MS2548,自动方向控制、半双工 RS-485 收发器,可替代MAX13487

产品简述 MS2548 是一个 5V 供电、半双工 RS-485 收发器。 芯片具有自动换向控制功能,可用于隔离 485 端口, 驱动器输入与使能信号一起配合控制芯片的状态, 驱动差分总线。 芯片内部集成热插拔保护和过温保护功能。接 收器输入阻抗为 1…

华为OD机试真题-测试用例执行计划

测试用例执行计划 题目描述: 某个产品当前迭代周期内有N个特性({F1,F2,...,FN})需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其ID作为下标进行标识。 设计了M个测试用例({T1,T2,...,TM}),每个用例对应了一个覆盖特…

网络工程师笔记9

动态路由 RIP路由协议 配置简单 易于维护 适用于小型网络 周期性是30s发一次

分享关于如何解决系统设计问题的逐步框架

公司广泛采用系统设计面试,因为在这些面试中测试的沟通和解决问题的技能与软件工程师日常工作所需的技能相似。面试官的评估基于她如何分析一个模糊的问题以及如何逐步解决问题。测试的能力还包括她如何解释这个想法,与他人讨论,以及评估和优…

主网NFT的发布合约

1.什么是nft? NFT:Non-fungible-token 非同质化货币 2.新建suimove项目 使用sui move new 项目名命令新建sui move项目 sui move new nft_qyx项目结构如下: 3.写nft合约 module qyx123::nft{use sui::object::{Self, UID};use sui::transfer;use sui::tx_context::{Sel…

C++11_右值引用与移动语义

目录 1、左值的定义 1.1 左值引用 2、右值的定义 2.1 右值引用 3、右值与左值的使用区别 4、右值引用的意义 4.1 左值引用的短板 5、移动语义 5.1 移动构造 5.2 移动赋值 6、万能引用 6.1 右值的别名-左值化 6.2 完美转发 前言: 在C11之前就有了引…

143.和弦是什么?和声是什么?三和弦

内容参考于: 三分钟音乐社 上一个内容:142.音程的构唱练习 和弦的定义: 一个音可以把它称为单音 两个音可以把它称为音程 更多的音,通俗的定义上,三个音或者三个以上的音构成的集体就可以叫做和弦,这些音…

如何将虚拟机设置成固定IP

问题描述: 在VMware虚拟机上部署的项目ip地址和数据库ip地址发生变动,导致mysql,nginx,redis等无法访问,要改配置又特别麻烦,而且下次可能还会变动。 解决方法: 将虚拟机ip地址配置成固定ip 关闭虚拟机,找…

【SpringMVC】快速体验 SpringMVC接收数据 第一期

文章目录 一、SpringMVC 介绍1.1 主要作用1.2 核心组件和调用流程理解 二、快速体验三、SpringMVC接收数据3.1 访问路径设置3.1.1 精准路径匹配3.1.2 模糊路径匹配3.1.3 类和方法级别区别3.1.4 附带请求方式限制3.1.5 进阶注解 与 常见配置问题 3.2 接收参数(重点&a…

Vulnhub内网渗透Jangow01靶场通关

详细请见个人博客 靶场下载地址。 下载下来后是 .vmdk 格式,vm直接导入。 M1请使用UTM进行搭建,教程见此。该靶场可能出现网络问题,解决方案见此 信息搜集 arp-scan -l # 主机发现ip为 192.168.168.15 nmap -sV -A -p- 192.168.168.15 # 端…

python的虚拟环境

python的虚拟环境可以为项目创建一个独立的环境,能够解决使用不同版本依赖给项目带来冲突的麻烦。创建虚拟环境的方式有很多种,pipenv会自动帮你管理虚拟环境和依赖文件,并且提供了一系列命令和选项来帮忙你实现各种依赖和环境管理相关的操作…

【动态规划.3】[IOI1994]数字三角形 Number Triangles

题目 https://www.luogu.com.cn/problem/P1216 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 7→3→8→7→5 的路径产生了最大权值。 分析 这是一个动态规划…