小白学大模型:自定义信息抽取Agent

news2024/11/25 4:48:16

自然语言处理(NLP)是人工智能和语言学领域的分支,它致力于使计算机能够理解、解释和生成人类语言。信息抽取和信息生成是NLP中的两个基础任务:

  1. 信息抽取是从文本中自动识别出结构化信息的过程。这些信息通常是实体(如人名、地点、组织名)、关系(如“属于”、“位于”)、事件(如“会议”、“冲突”)等。

  2. 信息生成是使用计算机程序自动创建或生成文本的过程。这可以是简单的文本摘要、复杂的新闻报道,甚至是创造性写作。

大模型在文本生成方面表现出色,但在信息抽取任务中,输出的结果可能不够精确和可控。本文将介绍使用tools和大模型结合,完成结果格式化的信息抽取任务。

unsetunsetTools 案例unsetunset

  • 定义函数调用的参数定义
tools = [
    {
        "type": "function",
        "function": {
            "name": "Ticket",
            "description": "根据用户提供的信息查询火车时刻",
            "parameters": {
                "type": "object",
                "properties": {
                    "date": {
                        "description": "要查询的火车日期",
                        "title": "Date",
                        "type": "string",
                    },
                    "departure": {
                        "description": "出发城市或车站",
                        "title": "Departure",
                        "type": "string",
                    },
                    "destination": {
                        "description": "要查询的火车日期",
                        "title": "Destination",
                        "type": "string",
                    },
                },
                "required": ["date", "departure", "destination"],
            },
        },
    }
]
  • 定义模型调用
messages = [
    {
        "role": "user",
        "content": "你能帮我查一下2024年1月1日从北京南站到上海的火车票吗?"
    }
]

from zhipuai import ZhipuAI
# https://open.bigmodel.cn/usercenter/apikeys
client = ZhipuAI(api_key="填入你的glm key")

response = client.chat.completions.create(
    model="glm-4-plus", 
    messages=messages,
    tools=tools,
    tool_choice="auto",
)
print(response.choices[0].message)

通过上述操作,可以完成函数参数的识别。但我们发现如果想要定义一个复杂的函数,其实很困难,在编写函数定义需要满足合法的格式。本文也会介绍通过pydantic简化tools定义的操作。

unsetunsetpydantic 是什么?unsetunset

Pydantic 是一个用于数据验证和设置管理的 Python 库。它通过 Python 类型注解来定义数据模型,并提供了强大的数据验证功能。Pydantic 的主要目标是确保数据在输入和输出时的一致性和有效性。它广泛应用于各种 Python 项目中,特别是在需要处理复杂数据结构和确保数据完整性的场景中。

  • 数据验证:确保输入数据符合预定义的类型和结构。

  • 序列化:将复杂的数据结构转换为 Python 数据类型,便于处理和传输。

  • 错误处理:提供详细的错误信息,帮助开发者快速定位和修复问题。

  • 配置管理:支持通过环境变量等方式管理配置,提高应用的可配置性。

  • JSON Schema 生成:模型可以自动生成 JSON Schema,便于与其他工具和系统集成。

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str

user = User(id=1, name='John Doe')
print(user)

unsetunset结合GLM Tools与pydanticunsetunset

结合 GLM Tools 与 Pydantic 的好处是,Pydantic 提供了一种方便的方式来定义和验证数据模型,而 GLM Tools 则提供了一种机制来调用大模型并执行信息抽取任务。通过这种方式,可以确保从大模型获取的数据是准确和可控的,同时也利用了大模型在文本生成方面的强大能力。

class GLMAgent:
    def __init__(self, model_name: str):
        self.model_name = model_name

    def call(self, user_prompt, response_model):
        messages = [
            {
                "role": "user",
                "content": user_prompt
            }
        ]
        tools = [
            {
                "type": "function",
                "function": {
                    "name": response_model.schema()['title'],
                    "description": response_model.schema()['description'],
                    "parameters": {
                        "type": "object",
                        "properties": response_model.schema()['properties'],
                        "required": response_model.schema()['required'],
                    },
                }
            }
        ]

        response = client.chat.completions.create(
            model=self.model_name,
            messages=messages,
            tools=tools,
            tool_choice="auto",
        )
        try:
            arguments = response.choices[0].message.tool_calls[0].function.arguments
            return response_model.model_validate_json(arguments)
        except:
            print('ERROR', response.choices[0].message)
            return None

接下来只需要通过代码定义,函数的说明、参数、参数说明、参数类型和参数可选的范围即可。 这种思路也在国外很多框架中

class Ticket(BaseModel):
    """根据用户提供的信息查询火车时刻"""
    date: str = Field(description="要查询的火车日期")
    departure: str = Field(description="出发城市或车站")
    destination: str = Field(description="要查询的火车日期")

GLMAgent(model_name = 'glm-4-plus').call("你能帮我查一下2024年1月1日从北京南站到上海的火车票吗?", Ticket)

通过这种方法有三个优点:

  • 定义函数很简单,通过写代码就可以完成函数参数定义,不需要自己写json、验证json的合法性。

  • 可以定义参数、参数类型和待选参数,适用范围很广。

  • 通过tools可以抽取得到结构化输出,并且上述操作可以适用于openai的接口。

案例1:文本分词

class Text(BaseModel):
    """抽取句子中的的单词,进行文本分词"""
    keyword: List[str] = Field(description="单词")

GLMAgent(model_name = 'glm-4-plus').call('阿水是强哥的好朋友。谢大脚是长贵的老公。', Text)

输出结果

Text(keyword=['阿水', '强哥', '好朋友', '谢大脚', '长贵', '老公'])   

案例2:文本分类

class Text(BaseModel):
    """分析文本的情感"""
    sentiment: Literal["正向", "反向"] = Field(description="情感类型")

GLMAgent(model_name = 'glm-4-air').call('我今天很开心。', Text)

输出结果

Text(sentiment='正向')   

通过修改参数的待选取值范围,可以控制输出的情感类别:

class Text(BaseModel):
    """分析文本的情感"""
    sentiment: Literal["postivate", "negative"] = Field(description="情感类型")

GLMAgent(model_name = 'glm-4-air').call('我今天很开心。', Text)

输出结果

Text(sentiment='postivate')   

案例3:文本匹配

class Text(BaseModel):
    """判断句子是否语义相近"""
    score:float = Field(description="文本相似度,介于0与1。0代表不相似,1代表相似")

GLMAgent(model_name = 'glm-4-air').call('我今天很开心 与 我今天不开心。', Text)

输出结果

GLMAgent(model_name = 'glm-4-air').call('我今天很开心 与 我今天超级开心。', Text)   

案例4:实体抽取

class Text(BaseModel):
    """抽取实体"""
    person: List[str] = Field(description="人名")
    location: List[str] = Field(description="地名")

GLMAgent(model_name = 'glm-4-air').call('今天我和徐也也去海淀吃饭,强哥也去了。', Text)

输出结果

Text(person=['我', '徐也也', '强哥'], location=['海淀'])   

案例5:关系抽取

class Text(BaseModel):
    """抽取句子中所有实体之间的关系"""
    source_person: List[str] = Field(description="原始实体")
    target_person: List[str] = Field(description="目标实体")
    relationship: List[Literal["朋友", "亲人", "同事"]] = Field(description="待选关系")

GLMAgent(model_name = 'glm-4-air').call('阿水是强哥的好朋友。谢大脚是长贵的老公。', Text)

输出结果

Text(source_person=['阿水'], target_person=['强哥'], relationship=['朋友'])   

案例6:关键词提取

class Text(BaseModel):
    """抽取句子中的关键词"""
    keyword: str = Field(description="关键词")

GLMAgent(model_name = 'glm-4-plus').call('阿水是强哥的好朋友。谢大脚是长贵的老公。', Text)

输出结果

Text(keyword='阿水')   

案例7:综合案例(RAG路由)

class Text(BaseModel):
    """文本问答内容解析"""
    search: bool = Field(description="是否需要搜索")
    keywords: List[str] = Field(description="待选关键词")
    intent: Literal["查询客服问题", "查询产品问题", "查询系统问题", "其他"] = Field(description="意图")

GLMAgent(model_name = 'glm-4-plus').call('汽车发动和轮胎出故障了,如何处理?', Text)

输出结果

Text(search=True, keywords=['汽车发动故障', '轮胎故障', '处理方法'], intent='查询产品问题')   

案例8:综合案例(事件抽取)

class Text(BaseModel):
    """文本问答内容解析"""
    time: List[str] = Field(description="时间")
    particate: List[str] = Field(description="选手")
    competition: List[str] = Field(description="赛事名称")

GLMAgent(model_name = 'glm-4-plus').call('2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!2022语言与智能技术竞赛由中国中文信息学会和中国计算机学会联合主办。', Text)

输出结果

Text(time=['2月8日上午'], particate=['谷爱凌'], competition=['北京冬奥会自由式滑雪女子大跳台决赛', '2022语言与智能技术竞赛'])   

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

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

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

相关文章

APO的告警关联和告警故障影响面功能介绍

一般IT系统都会配置一系列告警来提醒运维或开发人员,系统存在问题。将告警进行分类之后,至少会有以下种类的告警: 系统运行资源告警(CPU、内存、磁盘) 网络质量告警Kubernetes事件告警应用级别告警(延时、错…

Java项目: 基于SpringBoot+mybatis+maven中小型医院网站管理系统(含源码+数据库+开题报告+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven中小型医院网站管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、…

逻辑回归函数求导过程自推 LaTex 语法

背景 之前对逻辑归回函数求导过程进行过推导,当时不会用公式编辑,直接在纸上手动推导的,再重写一下,顺便回顾一下数学知识。 逻辑回归函数 逻辑回归的数学函数表达式为: g ( z ) 1 1 e − 2 g(z)\frac{1}{1e^{-2…

光控资本:国企改革概念股是什么意思?

国企改革概念股是指与国有企业改革相关的上市公司股票。 这些国企获益于国企改革方针,并有望在改革进程中完结企业运营结构优化、企业竞争力加强、运营效果添加、股票估值提高。相关国企股票的商场表现通常会遭到国企改革方针开展、企业改革成效、商场全体行情等多…

轻松编排工作流,浅谈DolphinScheduler如何使用Python调用API接口?

最近,在做某大型零售企业项目时,有客户用到DolphinScheduler,并咨询是否可以用Python脚本编排工作流?该如何实现?相信有很多人会有这样的疑问,那么,本文将为我们简单分享DolphinScheduler的优势…

2024骨传导耳机品牌推荐!深度实测五大超值尖货!

作为一位有着十余年数码测试经验的博主,近期经常收到粉丝朋友询问哪款骨传导耳机值得入手之类的问题,骨传导耳机作为当下非常热门的蓝牙机型,拥有不入耳佩戴更健康舒适等问题,那么在本次的耳机选购课堂中,主要想跟大家…

Craft:年度 Mac 应用,卡片式笔记新星

今年的年度 Mac 应用大奖颁给了Craft,这是一款集笔记、文档和个人管理于一体的独特工具。Craft 最大的亮点在于其卡片式的交互设计,这种设计让信息组织变得更加直观且高效。 尽管它仅上线了一年时间,但已经展现出了不输于许多老牌笔记应用的…

【MySQL】数据库基础认识

W...Y的主页 😊 代码仓库分享💕 目录 1. 数据库基础 1.1 什么是数据库 1.2 主流数据库 1.3 基本使用 1.3.1 MySQL安装 1.3.2 连接服务器 1.3.3 服务器管理 1.3.4 服务器,数据库,表关系 1.3.5 使用案例 1.3.6 数据逻…

一些做题中总结的零散的python函数的简单运用

输出保留两位数的小数 将16进制(可修改)的数进制转换成十进制并输出 大小写转化,第一个是搞成全部大写的,第二个高成全部小写的,最后一个是搞成第一个是大写的其他全部是小写的 将这个n的两边空格去掉 使用print(n,end…

什么是PPT,怎么制作?5款办公必备的幻灯片制作软件!

要说职场人日常离不开的两样东西,非幻灯片和PPT莫属,不论是日常会议、项目汇报还是客户展示,幻灯片和PPT都扮演着至关重要的角色。 然而,很多人可能会混淆幻灯片和PPT这两个概念,认为它们是同一回事。事实上&#xff…

OpenHarmony(鸿蒙南向)——平台驱动开发【PWM】

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 PWM(Pulse Width Modulation&#xff…

用通义灵码如何快速合理解决遗留代码问题?

本文首先介绍了遗留代码的概念,并对遗留代码进行了分类。针对不同类型的遗留代码,提供了相应的处理策略。此外,本文重点介绍了通义灵码在维护遗留代码过程中能提供哪些支持。 什么是遗留代码 与过时技术相关的代码: 与不再受支持的…

Day 43~48 smbms

SMBMS SMBMS是超市订单管理系统的简称 数据库: 项目如何让搭建? 考虑使用不使用Maven? 依赖,jar 项目搭建准备工作 1.搭建一个mavenweb项目 2.配置Tomcat 3.测试项目是否能够跑起来 4.导入项目中会遇到的jar包 jsp,servle…

在nuxt中集成mars3d

创建一个nuxt项目 创建一个项目&#xff0c;安装依赖 安装mars3d ,安装mars3d-cesium 替换app.vue <template><div id"mars3dContainer" class"mars3d-container"></div><!-- <div>123</div> --> </template&…

无人机之模拟图传篇

无人机的模拟图传技术是一种通过模拟信号传输图像数据的方式&#xff0c;它通常使用无线电模块或专用通信协议进行数据传输。 一、基本原理 模拟图传技术的工作原理是将摄像头或相机设备采集到的图像数据&#xff0c;通过模拟信号的形式进行传输。这些模拟信号在传输过程中可能…

贪心算法专题(一)

目录 1、贪心算法简介 1.1 什么是贪心算法 1.2 贪心算法的特点 1.3 贪心算法的学习方向 2、算法应用【leetcode】 2.1 题一&#xff1a;柠檬水找零 2.1.1 算法原理 2.1.2 算法代码 2.2 题二&#xff1a;将数组和减半的最少操作次数 2.2.1 算法原理 2.2.2 算法代码 2…

OpenCV图像文件读写(4)解码图像数据函数imdecode()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从内存缓冲区读取图像。 imdecode 函数从指定的内存缓冲区读取图像。如果缓冲区太短或包含无效数据&#xff0c;函数将返回一个空矩阵 (Mat::dat…

双十一数码什么值得买?盘点双十一最值得入手的数码好物

每年双11已经成为了人们购物的重要节点&#xff0c;除了手机外的其他数码产品也是购物清单上不可或缺的一部分。我们的生活和工作中&#xff0c;使用的数码产品越来越多。是时候给大家种草一波3C数码好物了&#xff0c;键盘、鼠标、平板、耳机、显示器啥都有&#xff0c;产品虽…

Web端云剪辑解决方案,支持多种滤镜、转场、贴纸、粒子、蒙版类特效效果

美摄科技隆重推出其革命性的Web端云剪辑解决方案&#xff0c;旨在为全球创作者提供一站式、高效能、云端化的视频编辑新体验&#xff0c;让视频创作不再受限于时间与空间&#xff0c;轻松实现专业级的视觉效果。 【云端赋能&#xff0c;创意无界】 美摄科技的Web端云剪辑解决…

“接口测试简介”——实现接口测试,软件自动化测试入门攻略

实现接口测试 接口测试是检查程序各部分之间的交互点&#xff0c;从无测试到手工测试、借助脚本或工具实现自动化测试以及测试平台的构建&#xff0c;接口测试近几年发展非常迅速&#xff0c;许多企业也都开始重视接口测试&#xff0c;因此&#xff0c;接口测试也成了测试人员…