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

news2024/11/16 17:41:43
一、 概述

在推进产业数字化的过程中,数据作为最重要的资源是优化产业管控过程和提升产业数字化水平的基础一环,如何实现数据采集工作的便利化、高效化、智能化是降低数据分析体系运转成本以及推动数据价值挖掘体系的基础手段。随着数字化在产业端的推进,仅仅依靠各产业各企业内部的业务系统数据是不够的,一方面当前大量的数据集中在互联网,实时的、历史的、以及有价值的数据往往集中在专业行业网站、门户网站;另一方面行业最新的动态、知识更新往往沉淀在互联网平台上。如何将互联网、非结构化文本、图片等数据结构化,作为数据资源体系的重要补充运用到产业数字化中,是进一步挖掘数据价值、补充领域内外知识的重大问题。
以往获取互联网上的数据采取的主要手段就是爬虫,然而这种手段需要较高的代码能力、结构化互联网数据依然需要较大的工作量,而且对于文本知识的结构化通过正则式抽取的方式难以有效统一规则。例如笔者负责构建的农产品市场监测预警系统设计中,为了解决农产品市场数据的抽取、清洗、结构化,采用了正则式抽取文本的方式,然而当文本编写的样式、规则、数据嵌入的方式变化时,还得重新更新正则式库,维护成本奇高。
在这里插入图片描述
图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的应用场景扩展到数据分析体系中的基础环节——数据采集,可以广泛的应用到互联网网页表格数据抽取、文本数据整理等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AXI相关知识点

1、Axcache相关知识点 xilinx 文档Pg059推荐: . Xilinx recommends that master devices drive their AW/RCACHE outputs to 0b0011 to allow the AXI Interconnect core to pack data while performing width conversion. 下面这篇文档对Axcache讲解的非常通俗易…

2024年春招|个人简历范本(精选5篇)

HR浏览一份简历也就25秒左右,如果你连「好简历」都没有,怎么能找到好工作呢? 如果你不懂得如何在简历上展示自己,或者觉得怎么改简历都不出彩,那请你一定仔细读完。 个人求职简历第 1 篇 男 22 本科 AI简历 市场营销 123456789 resume@ai-tools.cn 个人概述 以互联…

数据库--SQL语言-1

练习网站:自学SQL网 Select 查询语法复习 SELECT column, another_column, …FROM mytableWHERE condition AND/OR another_condition AND/OR …; 操作符号: 如果属性是字符串, 我们会用到字符串相关的一些操作符号,其中 LIKE&#xff08…

「CISP题库精讲」CISP题库习题解析精讲5道

前言 本节只要对CISP考试中的5道习题进行详细的讲解,时间比较少,敲多少道,就算多少道,反正全部也就1400多道。 习题部分 第一题 某企业内网中感染了一种依靠移动存储进行传播的特洛伊木马病毒,由于企业部署的杀毒软件,为了解决该病毒在企业内部传播,作为信息化负责人…

C++进阶之路---多态(二)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、多态的原理 1.虚函数表 // 这里常考一道笔试题:sizeof(Base)是多少? class Base { public:…

Java怎么实现word转PDF?

问题背景 这其实源自于使用ES搜索word、pdf等文档的方案实现过程,出现了只能正确解析pdf却不能解析word内容的错误,于是折中方案何不直接把word转成pdf呢?word转pdf肯定是比pdf转word容易太多了。 实现方案 以下是针对多种Java环境下将Wor…

我用 Python 做了个小仙女代码蹦迪视频

前言 最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿遍又亿遍,久久不能离开! 看着仙紫小姐姐的蹦迪视频,除了一键三连还能做什么?突发奇想,能不能把小仙女的蹦迪视频转成代码舞呢? 说…

Python 基于 OpenCV 视觉图像处理实战 之 背景知识

Python 基于 OpenCV 视觉图像处理实战 之 背景知识 目录 Python 基于 OpenCV 视觉图像处理实战 之 背景知识 一、简单介绍 二、人工智能(Artificial Intelligence,AI) 三、OpenCV 四、计算机视觉任务的主要类型 五、计算机视觉是通…

博客系统(SSM)

前端页面http://t.csdnimg.cn/zwKyG以上是之前写过的博客前端页面的内容,下面是通过SSM实现的后端内容。 目录 一.准备工作 1.1数据准备 1.2修改配置版本文件 1.3配置数据库 二.项目公共模块 2.1实体类 2.2操作数据库部分 三.功能开发 3.1博客列表 获取博…

确保电子设备稳定运行:晶振安装的详细检查方法

晶振的安装质量直接影响到电路的稳定性和可靠性,因此,检查晶振安装是否正确是非常重要的。下面,我们将介绍一些检查晶振安装是否正确的方法。 1. 检查晶振引脚的焊接质量 在检查晶振安装时,首先要确保晶振的引脚已经正确且牢固地…

stata中inlist2命令(划分区域的简洁命令)

inlist2 首先在stata命令框中输入ssc install inlist2,replace与传统的inlist命令相比,第一是没有字符串个数限制,第二是不用加引号。 常见的划分区域的stata命令 1.最原始的做法 gen area1 if province"北京市"|province"天津市"…

PolarDN的MISC题目:01,0和255详细过程

一、0和255 题目给了俩个文件,一个.txt,一个.py .txt文件中包含0和255 一个字节有八位,每一位只能储存1或0,计算机只懂二进制,所以就是2的八次方,又计算机规定从0开始计数,所以是0至255 考虑用编码转换工…

美团发布VisionLLaMA,为视觉生成和理解提供新基线

在人工智能领域,统一的模型架构对于简化模型设计、提高模型效率以及促进跨领域应用具有重要意义。近年来,大语言模型(Large Language Models, LLMs)在处理文本输入方面取得了显著的进展,其中基于变换器(Tra…

Leetcode笔记——二叉树的迭代遍历

中序遍历: 定义一个 保存中间量的栈 和一个 结果数组 1. 模板写法 注释版: 背诵版: 前序遍历 1. 中 右 左 的顺序遍历 2. 模板写法,按中 左 右 的顺序遍历 后序遍历 1. 模板写法,按左 右 中 的顺序遍历 注释版&am…

Anaconda 的一些配置

Anaconda 安装及修改环境默认位置 https://blog.csdn.net/qq_54562136/article/details/128932352 最重要的一步!!!!!改文件夹权限 Anaconda创建、激活、退出、删除虚拟环境 修改pip install 默认安装路径

鸿蒙Harmony应用开发—ArkTS声明式开发(模态转场设置:全屏模态转场)

通过bindContentCover属性为组件绑定全屏模态页面,在组件插入和删除时可通过设置转场参数ModalTransition显示过渡动效。 说明: 从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 不支持横竖屏切换。…

智能合约开发基础知识:最小信任机制、智能合约、EVM

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 专栏的前面几篇详细了介绍了区块链的核心基础知识 有兴趣学习的小伙伴可以看看http://t.csdnimg.cn/fCD5E关于区块…

Redis高可用之哨兵模式和集群模式

Redis高可用 Redis哨兵高可用 概述 sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。 哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点 不会每次都通过sentinel代理访问redis的主…

Java开发从入门到精通(一):Java的基础语法项目案例

Java大数据开发和安全开发 Java 案例练习案例一:买飞机票案例二:开发验证码案例三:评委打分案例四:数字加密案例五:数组拷贝案例六: 抢红包案例七:找素数案例八:模拟双色球[拓展案例] Java 案例练习 案例一:买飞机票 分析: 方法是需要接收数据?需要接收机票原价、当前月份、舱…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:外描边设置)

设置组件外描边样式。 说明: 从API Version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 outline outline(value: OutlineOptions) 统一外描边样式设置接口。 卡片能力: 从API version 11开始,该…