ERNIE SDK 本地使用与markdown自动生成

ERNIE SDK 仓库包含两个项目:ERNIE Bot Agent 和 ERNIE Bot。ERNIE Bot Agent 是百度飞桨推出的基于文心大模型编排能力的大模型智能体开发框架,结合了飞桨星河社区的丰富预置平台功能。ERNIE Bot 则为开发者提供便捷接口,轻松调用文心大模型的文本创作、通用对话、语义向量及AI作图等基础功能。

ERNIE Bot是文心&飞桨官方提供的Python库,提供便捷易用的Python接口,可调用文心大模型能力,完成包含文本创作、通用对话、语义向量、AI作图在内的多项任务。

突然发现自己有100万免费token,刚好需要文本生成,赶紧来试试。

安装非常简单:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple erniebot==0.5.0

首先看看我们可以调用哪些模型:

import erniebot
# 列出支持的模型
models = erniebot.Model.list()
print(models)
# ernie-3.5             文心大模型(ernie-3.5)
# ernie-turbo           文心大模型(ernie-turbo)
# ernie-4.0             文心大模型(ernie-4.0)
# ernie-longtext        文心大模型(ernie-longtext)
# ernie-text-embedding  文心百中语义模型
# ernie-vilg-v2         文心一格模型

 支持的模型介绍: 

以下是对这几个模型的特点和使用场景的简要描述:

  1. ernie-3.5(文心大模型)

    • 特点

      • 作为百度文心大模型家族中的一员,ernie-3.5具有强大的语言理解和生成能力。
      • 它是基于深度学习技术构建的,可以从海量的数据中学习到丰富的语言知识。
      • ernie-3.5支持多种NLP任务,包括文本分类、命名实体识别、语义匹配等。
    • 使用场景

      • 适用于需要文本分析和理解的场景,如情感分析、智能问答、文本摘要等。
      • 在内容生成、智能对话等方面也有广泛应用。
  2. ernie-turbo(文心大模型)

    • 特点

      • ernie-turbo是百度推出的一款高效、轻量级的语言模型。
      • 它在保证性能的同时,大大降低了计算和存储资源的需求。
      • 特别适合在边缘设备上部署,如手机、平板等。
    • 使用场景

      • 适用于资源受限的环境,需要快速响应和高效执行的NLP任务。
      • 例如,在移动设备上进行文本输入补全、智能推荐等。
  3. ernie-4.0(文心大模型)

    • 特点

      • ernie-4.0是百度文心大模型系列的最新版本,具备更强大的语言理解和生成能力。
      • 它在多个领域都进行了优化和提升,包括知识推理、阅读理解、文本生成等。
      • 还引入了多模态能力,能够理解并生成图像、视频等多种类型的内容。
    • 使用场景

      • 适用于复杂的语言处理任务,如自动写作、智能翻译、情感对话等。
      • 在教育、金融、医疗等多个垂直领域都有广泛应用。
  4. ernie-longtext(文心大模型)

    • 特点

      • ernie-longtext专门针对长文本处理和生成任务进行了优化。
      • 它能够处理超长文本输入,并保持高性能和高效率。
      • 特别适合处理文档、文章等长篇幅的内容。
    • 使用场景

      • 适用于需要处理长文本的场景,如文档摘要、论文理解、法律文书处理等。
      • 在新闻媒体、学术研究等领域有广泛应用。
  5. ernie-text-embedding(文心百中语义模型)

    • 特点

      • ernie-text-embedding是一个专注于文本嵌入表示的模型。
      • 它能够将文本映射到一个高维空间中,使得语义相似的文本在空间中位置更接近。
      • 特别适合用于文本相似度匹配、聚类等任务。
    • 使用场景

      • 适用于文本相似度计算和文本聚类等任务。
      • 在推荐系统、搜索引擎优化等方面有广泛应用。
  6. ernie-vilg-v2(文心一格模型)

    • 特点

      • ernie-vilg-v2是一个多模态模型,结合了视觉和语言信息。
      • 它能够理解并生成图像,实现文本和图像之间的跨模态交互。
      • 在视觉问答、图像标注、视觉对话等方面表现出色。
    • 使用场景

      • 适用于需要处理图像和文本信息的联合任务。
      • 在社交媒体分析、广告设计、智能家居等领域有广泛应用。

请注意,上述描述可能随着模型的不断更新和发展而发生变化。在实际应用中,建议查阅最新的官方文档和资源以获取最准确的信息。

各个模型具体效果可以来这里体验:
 百度智能云控制台 (baidu.com)icon-default.png?t=N7T8https://console.bce.baidu.com/qianfan/ais/console/onlineTest

 由于是开发文本生成功能,所以使用个人觉得更好的 ERNIE-4.0 模型,选择模型并测试。

多轮对话
# encoding:utf-8
import erniebot

# 此处,我们使用aistudio后端。在AI Studio个人中心的访问令牌页面,大家可以获取aistudio后端的access token,然后填入下面代码中(替换{YOUR-ACCESS-TOKEN})。
erniebot.api_type = 'aistudio'
erniebot.access_token = '{YOUR-ACCESS-TOKEN}'

# 选择模型
model = 'ernie-4.0'
# messages中的每一项都是一个字典,其中的'role': 'user'表示发出当前消息的角色是“用户”,还可以是"assistant"表示对话助手,'content'则对应消息的具体内容。
messages = [{'role': 'user', 'content': "详细列出图像处理领域专业术语并解释"}]

first_response = erniebot.ChatCompletion.create(
    model=model,
    messages=messages,
)
print(first_response.get_result())

messages.append(first_response.to_message())
messages.append({'role': 'user', 'content': "你回答的很好,希望能再列出更多跟之前回答都完全不一样的图像处理领域专业术语"})

实测发现这种非流式传输还容易 timeout,在ai studio 的 BML Codelab 环境里运行,居然也会 timeout,这个是访问量过大导致的吗?还是 api_type 是 'aistudio' 免费的,所以卡? 

设置流式传输

在实际应用中,模型可能给出很长的回答,而这会导致很长的响应时间。比如生成200字的文案耗时较久,在获取到模型的响应前能够感觉到明显的卡顿。为了减少用户的等待时间,ERNIE Bot支持流式传输数据。具体而言,为erniebot.ChatCompletion.create API传入参数stream=True,则API将返回一个生成器。这个生成器对应一个响应序列,我们通过迭代操作即可获取全部响应。

# encoding:utf-8
import erniebot

class ERNIE:
    def __init__(self, model: str, access_token: str = None) -> None:
        self.chat_history = []
        self.model = model
        erniebot.api_type = "aistudio"
        erniebot.access_token = '换成你的 access token'

    def chat(self, query: str) -> str:
        "Use this function to chat with ERNIE BOT"
        self.chat_history.append({"role": "user", "content": query})
        response = erniebot.ChatCompletion.create(
            model=self.model,
            messages=self.chat_history,
        )
        self.chat_history.append({"role": "assistant", "content": response.get_result()})
        return response.get_result()

    def chat_stream(self, query: str) -> None:
        "Use this function to chat with ERNIE BOT"
        self.chat_history.append({"role": "user", "content": query})
        response = erniebot.ChatCompletion.create(model=self.model, messages=self.chat_history, stream=True)
        result = ""

        for resp in response:
            result += resp.get_result()
            print(result, flush=True)
        self.chat_history.append({"role": "assistant", "content": result})

    def clear(self):
        self.chat_history = []


ERNIE_BOT = ERNIE(model="ernie-4.0")
ERNIE_BOT.chat_stream("尽可能多的列出图像处理领域专业术语并解释,生成必须使用markdown格式,不需要给出来源")
ERNIE_BOT.chat_stream("你回答的很好,希望能再列出更多跟之前回答都完全不一样的图像处理领域专业术语")

慢慢打印出了想要的内容,可以将 markdown直接复制到 CSDN里,这样一篇专业术语知识库就生成了。ps: 流式打印发现很多内容是重复的,估计也是网卡或者调用繁忙,体验不太好。后面用不是免费的再试试

生成的内容文章:
图像处理领域专业术语-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Vulcan_S/article/details/136954139?spm=1001.2014.3001.5502

 就这两个问题,消耗了18648个token,这token消耗的有点快啊,感觉卡顿造成了很多无效的token消耗,或者代码有问题?后面继续摸索一下。。。

ERNIE SDK是一个强大的开发框架,它基于文心大模型及其Function Calling(函数调用)功能,为LLM(大型语言模型)应用开发提供了全新的视角。该框架旨在解决LLM应用开发中面临的核心挑战,并通过文心大模型展示了其卓越性能。

ERNIE SDK针对几个关键问题提供了有效的解决方案。首先,它解决了传统大模型在处理大型文档时面临的token输入数量限制问题。通过提供本地知识库检索的方式,使得处理大型文档问答任务更加方便。其次,ERNIE SDK使集成现有业务API工具成为可能,拓宽了LLM应用的功能性和适应性。此外,它还能够通过定制工具连接多种数据源,如SQL数据库,为大模型提供更多的信息。

作为一个高效的开发框架,ERNIE SDK大幅提升了开发者的工作效率。它支持开发者轻松地调用并统筹使用多种API,以构建应用。开发者可以根据用户需求以及函数描述信息,智能确定是否应该调用函数、调用哪一个函数,以及在调用该函数时需要如何设置输入参数。用户可以根据模型的提示调用函数,并将函数的响应传递给模型。模型将综合对话上下文信息,以自然语言形式给出满足用户需求的回答。

除了上述功能,ERNIE SDK还提供了文本嵌入服务,将文本转化为用数值表示的向量形式,用于文本检索、信息推荐、知识挖掘等场景。

总的来说,ERNIE SDK是一个功能强大、高效的开发框架,为LLM应用开发提供了全面的支持。无论是处理大型文档、集成业务API工具,还是连接多种数据源,ERNIE SDK都能为开发者提供有效的解决方案,助力他们构建出更加智能、高效的应用。

  • 37
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《项目介绍》 基于python+Flask+Paddle-ERNIE实现的的自动派单系统源码+项目说明.zip 基于fasttext的文本分类 最初的派单项目是使用fasttext实现的文本分类模型实现的一级文本分类任务。在这个任务中,没有层级分类的概念,即各标签之间没有从属关系。 Fasttext的思想是:将工单文本切分成单个字的序列,例如:【我爱中国】切分成[我,爱,中,国]。模型训练一个词嵌入层,对输入的文本,切分成**字序列**后通入模型获取句子的**词向量序列**。分类过程:对词向量序列去平均,作为文本的特征向量,经过线性层映射到最后的类别分类向量,实现多分类。 在最初的分类需求中,上家开发人员通过面向数据的编程,通过关键词检测等手段,处理一部分特征明显的工单,随后通过fasttext处理剩余的工单,在当时满足了客户的需求。 基于fasttext的层级文本分类 我们接手派单项目之后,通过分析上家的源码,发现存在几个可优化点: 1. 原方法从字的尺度对文本进行编码及特征提取,忽略了中文存在词尺度的上下文信息。举个例子:【我爱中国】切分成[我,爱,中,国],相当于将【I love china】切分成[I, l, o, v, e, c, h, i, n, a],随后进行fasttext文本特征提取,这造成了上下文信息丢失。 2. 原方法没有适配层级分类,新的需求要求对工单进行层级分类,不同层级之间具有依赖性,原方法显然不适用。 在初步尝试阶段,根据上述分析,我们引入了Jieba分词库(一个应用广泛的中文分词库)以解决词尺度的上下文信息丢失。我们针对3个层级各训练了一个fasttext分类器,以解决层级分类的标签分层问题。 在尝试中,我们发现,对非层级分类的场景中,引入Jieba分词的fasttext相较于纯fasttext有明显的性能提升。但是在层级分类场景中,仍未能很好地解决标签依赖的问题。例如:真实标签是**LABEL_lv_1-LABEL_lv_2-LABEL_lv_3_A**,是一个三级分类标签,在三个模型中的分类结果可能是:**LABEL_lv_1-LABEL_lv_2-LABEL_lv_3_B**。这是二级标签与三级标签不匹配的问题。 现在的算法 通过调研,我们选择了[基于Paddle的Encoder——ERNIE的层级分类模型][1](简称Hierarchical),作文分类模型,相较于之前的工作,改善有: 1. Encoder类词嵌入模型特征提取能力比fasttext更强,Encoder拥有自带的预训练分词器,相较于基于统计的Jieba分词器会更适配多变的语境。同时预训练模型拥有大量语料库作为底模支撑,在finetune的过程中相对更不容易发生过拟合。 2. Hierarchical在设置标签的时候,引入了不同层级之间依赖关系,具体而言,是让三级标签的标签文本中包含前两级标签的文本,使用特定的分隔符分隔。 Hierarchical的分类机制:使用ERNIE对输入文本进行编码,提取出文本的特征向量;整合多级标签,进行编码得到标签特征向量。通过计算文本特征向量与标签特征向量的余弦相似度,获得文本属于该标签的置信度。在这一步中,因为低级标签包含高级标签的文本,因此可以实现模型提取层级标签之间的依赖关系信息。 现有方法的弊端: 1. PaddlePaddle框架相较于PyTorch更难使用,如果使用现成开源代码开发,需要配置Paddle的环境,是相对麻烦的。可以用Docker解决这一个问题。 2. 我们目前还没有完全拆解分析ERNIE模型的源码及模型结构,暂时不能实现移植到Pytorch上用bert-base-chinese实现相似的功能。 API实现 我们使用了Flask轻量化Web框架实现了简单的Web API接口化。将模型导出为静态图,实现计算结果后处理,并部署到客户的服务器上,告知客户访问服务的IP和端口号即可。 模型静态图的导出使用Onnx作为导出规格,实现了在无GPU环境的BERT模型部署。在调用频率最高的一次测试中,客户一天调用了1.4万次接口,目前仍未收到客户对于处理速度的投诉。 总体流程 【注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载使用体验! 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值