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 文心一格模型
支持的模型介绍:
以下是对这几个模型的特点和使用场景的简要描述:
ernie-3.5(文心大模型)
特点:
- 作为百度文心大模型家族中的一员,ernie-3.5具有强大的语言理解和生成能力。
- 它是基于深度学习技术构建的,可以从海量的数据中学习到丰富的语言知识。
- ernie-3.5支持多种NLP任务,包括文本分类、命名实体识别、语义匹配等。
使用场景:
- 适用于需要文本分析和理解的场景,如情感分析、智能问答、文本摘要等。
- 在内容生成、智能对话等方面也有广泛应用。
ernie-turbo(文心大模型)
特点:
- ernie-turbo是百度推出的一款高效、轻量级的语言模型。
- 它在保证性能的同时,大大降低了计算和存储资源的需求。
- 特别适合在边缘设备上部署,如手机、平板等。
使用场景:
- 适用于资源受限的环境,需要快速响应和高效执行的NLP任务。
- 例如,在移动设备上进行文本输入补全、智能推荐等。
ernie-4.0(文心大模型)
特点:
- ernie-4.0是百度文心大模型系列的最新版本,具备更强大的语言理解和生成能力。
- 它在多个领域都进行了优化和提升,包括知识推理、阅读理解、文本生成等。
- 还引入了多模态能力,能够理解并生成图像、视频等多种类型的内容。
使用场景:
- 适用于复杂的语言处理任务,如自动写作、智能翻译、情感对话等。
- 在教育、金融、医疗等多个垂直领域都有广泛应用。
ernie-longtext(文心大模型)
特点:
- ernie-longtext专门针对长文本处理和生成任务进行了优化。
- 它能够处理超长文本输入,并保持高性能和高效率。
- 特别适合处理文档、文章等长篇幅的内容。
使用场景:
- 适用于需要处理长文本的场景,如文档摘要、论文理解、法律文书处理等。
- 在新闻媒体、学术研究等领域有广泛应用。
ernie-text-embedding(文心百中语义模型)
特点:
- ernie-text-embedding是一个专注于文本嵌入表示的模型。
- 它能够将文本映射到一个高维空间中,使得语义相似的文本在空间中位置更接近。
- 特别适合用于文本相似度匹配、聚类等任务。
使用场景:
- 适用于文本相似度计算和文本聚类等任务。
- 在推荐系统、搜索引擎优化等方面有广泛应用。
ernie-vilg-v2(文心一格模型)
特点:
- ernie-vilg-v2是一个多模态模型,结合了视觉和语言信息。
- 它能够理解并生成图像,实现文本和图像之间的跨模态交互。
- 在视觉问答、图像标注、视觉对话等方面表现出色。
使用场景:
- 适用于需要处理图像和文本信息的联合任务。
- 在社交媒体分析、广告设计、智能家居等领域有广泛应用。
请注意,上述描述可能随着模型的不断更新和发展而发生变化。在实际应用中,建议查阅最新的官方文档和资源以获取最准确的信息。
各个模型具体效果可以来这里体验:
百度智能云控制台 (baidu.com)https://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博客https://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都能为开发者提供有效的解决方案,助力他们构建出更加智能、高效的应用。