文心一言接入Promptulate,开发复杂LLM应用程序
简介
最近在尝试将文心一言的LLM能力接入Promptulate,故写了一篇博客记录一下,Promptulate 是 Promptulate AI 旗下的大语言模型自动化与应用开发框架,旨在帮助开发者通过更小的成本构建行业级的大模型应用,其包含了LLM领域应用层开发的大部分常用组件,如外部工具组件、模型组件、Agent智能代理、外部数据源接入模块、数据存储模块、生命周期模块等。 通过 Promptulate,你可以轻松构建起属于自己的LLM应用程序。
Promptulate官网
将文心一言接入Promptulate之后,便可以轻松地利用Promptulate构建一些复杂能力,如让大语言模型使用工具。
文心一言介绍
文心一言(ERNIE Bot)是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。文心一言是知识增强的大语言模型,基于飞桨深度学习平台和文心知识增强大模型,持续从海量数据和大规模知识中融合学习具备知识增强、检索增强和对话增强的技术特色 。
百度的文心一言被定位为一种基于人工智能的赋能平台,旨在为金融、能源、媒体、政务等各行各业的智能化变革提供支持。它将充当一种“生产力工具”的角色,通过提供智能化的服务,帮助各行业提高工作效率和创造力。最终,这将推动各行业的发展,提高生产力,实现更快、更高效的工作方式。
通过https://yiyan.baidu.com/可以获取文心一言的内测机会。当然,你也可以申请获取API,这样子你可以有能多自定义功能的能力。
Promptulate
Promptulate AI 专注于构建大语言模型应用的开发者平台,致力于为开发者和企业提供构建、扩展、评估大语言模型应用的能力。Promptulate 是 Promptulate AI 旗下的大语言模型自动化与应用开发框架,旨在帮助开发者通过更小的成本构建行业级的大模型应用,其包含了LLM领域应用层开发的大部分常用组件,如外部工具组件、模型组件、Agent智能代理、外部数据源接入模块、数据存储模块、生命周期模块等。 通过 Promptulate,你可以轻松构建起属于自己的LLM应用程序。
更多地,为构建一个强大而灵活的LLM应用开发平台,以创建能够自动化各种任务和应用程序的自主代理,Promptulate 通过Core AI Engine、Agent System、APIs and Tools Provider、Multimodal Processing、Knowledge Base和Task-specific Modules 6个组件实现自动化AI平台。 Core AI Engine是该框架的核心组件,负责处理和理解各种输入,生成输出和作出决策。Agent System是提供高级指导和控制AI代理行为的模块;APIs and Tools Provider提供工具和服务交互的API和集成库;Multimodal Processing是一组处理和理解不同数据类型(如文本、图像、音频和视频)的模块,使用深度学习模型从不同数据模式中提取有意义的信息;Knowledge Base是一个存储和组织世界信息的大型结构化知识库,使AI代理能够访问和推理大量的知识;Task-specific Modules是一组专门设计用于执行特定任务的模块,例如情感分析、机器翻译或目标检测等。通过这些组件的组合,框架提供了一个全面、灵活和强大的平台,能够实现各种复杂任务和应用程序的自动化。
当前promptulate
正处于快速开发阶段,仍有许多内容需要完善与讨论,十分欢迎大家的讨论与参与,而其作为一个大语言模型自动化与应用开发框架,主要由以下几部分组成:
Agent
更高级的执行器,负责复杂任务的调度和分发llm
大语言模型,负责生成回答,可以支持不同类型的大语言模型Memory
负责对话的存储,支持不同的存储方式及其扩展,如文件存储、数据库存储等Framework
框架层,实现不同类型的prompt框架,包括最基础的Conversation
模型,还有self-ask
和ReAct
等模型。Tool
提供外部工具扩展调用,如搜索引擎、计算器等Hook&Lifecycle
Hook系统与生命周期系统,开发者可以进行定制化的生命周期逻辑控制Rreset roles
提供预设角色,进行定制化对话Provider
为系统提供更多数据源或执行自主操作,如数据库的连接

文心一言API快速上手
通过API文档,我们可以快速构建起一个基于Python的LLM接入程序。
import json
import requestsAPI_KEY = "your api key"
SECRET_KEY = "your secret key"def get_access_token():"""使用 API Key,Secret Key 获取access_token,替换下列示例中的应用API Key、应用Secret Key"""url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={API_KEY}&client_secret={SECRET_KEY}"payload = json.dumps("")headers = {"Content-Type": "application/json", "Accept": "application/json"}response = requests.request("POST", url, headers=headers, data=payload)return response.json().get("access_token")def llm(prompt: str) -> str:url = ("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token="+ get_access_token())payload = json.dumps({"messages": [{"role": "user", "content": prompt}]})headers = {"Content-Type": "application/json"}response = requests.request("POST", url, headers=headers, data=payload)print(response.json()["result"])return response.json()["result"]if __name__ == "__main__":llm("你好")
当然,我们希望用文心一言构建一些复杂的Prompt应用,如利用LLM+网络搜索,下面的示例展示了如何在Promptulate上使用文心一言,进行LLM+网络搜索的功能。
Promptulate + ErnieBot
相关文档
打开终端,输入下面命令下载promptulate
最新版,-U
表示更新到最新版,如果你已经下载promptulate
旧版本,那么执行此命令会更新到最新版。promptulate
当前正处于快速发展阶段,因此你可能需要经常更新最新版以享用最新的成果。
pip install -U promptulate
promptulate
可以支持不同类型的大语言模型调用,如OpenAI的gpt-3.5 gpt-4.0,下面介绍百度文心系列大模型的使用,要使用其能力,你需要前往百度千帆大模型平台创建大模型应用并获取到对应的API Key
和Secret Key
。
如果你想使用国产文心系列模型,只需要 ErnieBot()进行初始化,文心模型虽然与openai模型有较大差异,但是框架提供了尽可能完美的兼容。
你还可以使用ErnieBot(model=“ernie-bot”)来具体选择对应的文心模型,目前框架提供了两种文心模型,分别是文心一言(“ernie-bot”)和文心turbo(“ernie-bot-turbo”),默认为文心turbo模型。
KEY配置
在使用百度千帆大模型平台系列的LLM之前,你需要先导入你的API Key
和Secret Key
import osos.environ["ERNIE_API_KEY"] = "your api key"
os.environ["ERNIE_API_SECRET"] = "your secret key"
在你第一次使用的时候,需要使用上述代码导入环境变量,但是在第一运行之后promptulate
会进行缓存,即后面再运行就不需要再导入key了。
如果你的key过期了,可以尝试重新按照上面的方法导入key,或者你也可以把 cache
文件给删除掉,通过以下代码可以获取到缓存文件的位置:
from promptulate.utils import get_default_storage_pathprint(get_default_storage_path())
LLM快速上手
promptulate
的架构设计可以轻松兼容不同的大语言模型扩展,在promptulate
中,llm负责最基本的内容生成部分,因此为最基础的组件。
下面的示例展示了如何使用百度文心ErnieBot的大语言模型进行交互。
如果你想使用国产文心系列模型,只需要 ErnieBot()进行初始化,文心模型虽然与openai模型有较大差异,但是框架提供了尽可能完美的兼容。
你还可以使用ErnieBot(model=“ernie-bot”)来具体选择对应的文心模型,目前框架提供了两种文心模型,分别是文心一言(“ernie-bot”)和文心turbo(“ernie-bot-turbo”),默认为文心turbo模型。
from promptulate.llms import ErnieBotllm = ErnieBot()
answer = llm("请解释一下引力波的放射与广义相对论的必然关系")
print(answer)
上述ErnieBot默认使用
ernie-bot-turbo
模型
输出结果如下:
广义相对论是一种描述引力如何影响时空的物理学理论,它指出当物质和能量聚集在一起时,它们弯曲了周围的时空,引起了引力。质量和能量更大的物体会导致更大
的时空弯曲,这就是为什么地球会围绕太阳旋转。根据广义相对论,当物质或能量在空间中运动时,它们会产生引力波,就像在水面上产生涟漪一样。引力波是一种类
似电磁波的波动,但它们是由物质和能量的弯曲引起的,而电磁波是由电荷的振动引起的。引力波是极微弱的,但是当强烈的引力场存在(例如在引力天体碰撞或超新
星爆炸等事件中),它们可以被探测到。事实上,2015年,激光干涉引力波天文台利用引力波探测器直接探测到了引力波,并为广义相对论提供了强有力的证据。因
此,引力波的放射与广义相对论必然关系紧密。通过引力波,我们可以更加深入地了解时空的性质,并进一步验证这个理论。
切换模型
文心提供了 “ernie-bot"与"ernie-bot-turbo”,详情介绍查看官方文档与API文档
ERNIE-Bot-turbo
文心一言人工智能大语言模型,拥有产业级知识增强文心大模型ERNIE,具备跨模态、跨语言的深度语义理解与生成能力。
ERNIE-Bot
文心一言大语言模型,基于飞桨深度学习平台和文心知识增强的强大模型,持续从海量数据和大模型知识中融合学习。具备知识增强、检索增强和对话增强的技术特色。
你可以使用如下方式切换模型:
from promptulate.llms import ErnieBotllm = ErnieBot(model="ernie-bot")
answer = llm("请解释一下引力波的放射与广义相对论的必然关系")
print(answer)
网络搜索
下面展示如何使用ErnieBot进行网络搜索。
from promptulate.tools import (DuckDuckGoTool,Calculator,
)
from promptulate.llms import ErnieBot
from promptulate.agents import ToolAgentdef main():llm = ErnieBot(temperature=0.0)tools = [DuckDuckGoTool(),Calculator(),]agent = ToolAgent(tools=tools,llm=llm)prompt = """Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?"""agent.run(prompt)if __name__ == "__main__":main()
在上述代码中,使用DuckDuckGo进行网络搜索,最后运行结果如下:

参考资料
- Promptulate官网
- Promptulate github
- 如何获得内测和使用方法
相关文章:

文心一言接入Promptulate,开发复杂LLM应用程序
简介 最近在尝试将文心一言的LLM能力接入Promptulate,故写了一篇博客记录一下,Promptulate 是 Promptulate AI 旗下的大语言模型自动化与应用开发框架,旨在帮助开发者通过更小的成本构建行业级的大模型应用,其包含了LLM领域应用层…...

TDengine函数大全-聚合函数
以下内容来自 TDengine 官方文档 及 GitHub 内容 。 以下所有示例基于 TDengine 3.1.0.3 TDengine函数大全 1.数学函数 2.字符串函数 3.转换函数 4.时间和日期函数 5.聚合函数 6.选择函数 7.时序数据库特有函数 8.系统函数 聚合函数 TDengine函数大全APERCENTILEAVGCOUNTELAPS…...

DRM全解析 —— ADD_FB(2)
接前一篇文章:DRM全解析 —— ADD_FB(1) 本文参考以下博文: DRM驱动(四)之ADD_FB 特此致谢! 上一回围绕libdrm与DRM在Linux内核中的接口: DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, d…...

windows下docker compose方式挂载数据卷volume遇到的问题
例子一,windows 下docker desk top部署TDengine td-compose.yml version: 3 services:tdengine1:image: tdengine/tdengine:latestcontainer_name: tdengine1hostname: tdengine1ports:- 6030:6030- 6041:6041- 6043-6049:6043-6049- 6043-6049:6043-6049/udpresta…...

TCP三次握手四次挥手总结
目录 一、两种传输模式: 二、数据方向: 三、端口的作用: 四、端口类型: 五、三次握手: 六、四次断开 常见面试题 TCP(Transfer control protocol)传输控制协议 一、两种传输模式&#x…...

【0901作业】QTday3 对话框、发布软件、事件处理机制,使用文件相关操作完成记事本的保存功能、处理键盘事件完成圆形的移动
目录 一、思维导图 二、作业 2.1 使用文件相关操作完成记事本的保存功能 2.2 处理键盘事件完成圆形的移动 一、思维导图 二、作业 2.1 使用文件相关操作完成记事本的保存功能 void Widget::on_saveBtn_clicked() {QString filename QFileDialog::getSaveFileName(this,&…...

mysql数据库运行sql:datetime(0) NULL DEFAULT NULL报错【杭州多测师_王sir】
一、错误信息 CREATE TABLE file (id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 文件md5,name varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,create_time datetime(0) NULL DEFAULT NULL,update_time date…...

手撕二叉平衡树
今天给大家带来的是平衡树的代码实现,如下: #pragma once #include <iostream> #include <map> #include <set> #include <assert.h> #include <math.h> using namespace std; namespace cc {template<class K, clas…...

超图嵌入论文阅读1:对偶机制非均匀超网络嵌入
超图嵌入论文阅读1:对偶机制非均匀超网络嵌入 原文:Nonuniform Hyper-Network Embedding with Dual Mechanism ——TOIS(一区 CCF-A) 背景 超边:每条边可以连接不确定数量的顶点 我们关注超网络的两个属性࿱…...

Qt xml解析之QXmlStreamReader
文章目录 背景QXmlStreamReader简单介绍使用QXmlStreamReader添加头文件<QXmlStreamReader>toString()toInt()完整代码 背景 项目中遇到需要解析某个方法返回的xml字符串,奈何C/C中没有原生的方法可供调用,只能使用第三方库,搜了一圈资…...

Selenium基础 — CSS选择器定位大全
1、css属性定位 css选择器策略示例说明#id#telA选择id"telA"的所有元素。.class.telA选择 class"telA”的所有元素。[属性名属性值][nametelA]除了id和class属性,其他属性的定位格式[attribute][target]选择带有target 属性所有元素。**选择所有元素…...

vue3中keep-alive的使用及结合transition使用
正确用法 在组件中使用(这里结合了 transition 内置动画组件 ) <template><div class"layout clearfix"><router-view v-slot"{ Component, route }"><transition name"fade-transform" mode"…...

【提示工程】询问GPT返回Json结构数据
theme: orange 众所周知,我们可以通过构建的Prompt获取期望的内容,但是通常都是以自然语言返回的,假如我们想得到结构化的数据,比如Json,XML那么怎么办,这篇文章给你一个思路。 理所当然的想法 要实现询问大…...

CSS水平垂直居中方案
1 前言 水平居中、垂直居中是前端面试百问不厌的问题。其实现方案也是多种多样,常叫人头昏眼花。 水平方向可以认为是内联方向,垂直方向认为是块级方向。 2 内联元素的水平垂直居中 首先,常见内联元素有:a、span、em、b、stro…...

SpringBoot入门篇3 - 整合junit、整合mybatis、基于SpringBoot实现ssm整合
目录 1.整合JUnit Spring整合JUnit SpringBoot整合JUnit 测试类注解:SpringBootTest 作用:设置JUnit加载的SpringBoot启动类 2.整合mybatis ①使用spring initializr初始化项目的时候,添加依赖。 ②设置数据源application.yml spring:d…...

C#,《小白学程序》第七课:列表(List)应用之一“编制高铁车次信息表”
1 文本格式 /// <summary> /// 车站信息类 class /// </summary> public class Station { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; /// <summary> /// 车站名 /// </summary>…...

周报/月报 Prompt
前言 用 AI 写好一份周报或月报。 文章目录 前言一、目的二、Prompt 设计原则三、模板 一、目的 简单的日程,扩写成一篇高质量的周报; 二、Prompt 设计原则 角色 目标 背景 要求 三、模板 内容生成模板 你是我的周报助手,根据我的工作…...

c++ 学习 之 构造函数的分类和调用类型 深入学习
正文 构造函数是在C中用于创建和初始化对象的特殊函数。构造函数可以根据不同的特性和参数进行分类,以下是一些常见的构造函数分类和详细讲解它们的调用方式: 默认构造函数: 默认构造函数是一个特殊的构造函数,它没有参数&#x…...

Royal TSX 6 Mac多协议远程软件
Royal TSX是一款功能强大的远程桌面管理软件,适用于Mac操作系统。它允许用户通过一个集成的界面来管理和访问多个远程计算机和服务器。 Royal TSX支持多种远程协议,包括RDP、VNC、SSH、Telnet和FTP等,可以方便地连接到Windows、Linux、Mac和其…...

远程管理通道安全SSH协议主机验证过程
可以使用SSH协议进行远程管理通道安全保护,其中涉及的主要安全功能包括主机验证、数据加密性和数据完整性保护。 这里要注意的是【主机验证】和【身份验证】的区别,主机验证是客户端确认所访问的服务端是目标访问对象,比如从从客户端A(192.16…...

.NET 操作 TDengine .NET ORM
TDengine 是国内比较流的时序库之一,支持群集并且免费,在.NET中资料比较少,这篇文章主要介绍SqlSugar ORM来操作TDengine 优点: 1、SqlSugar支持ADO.NET操作来实现TDengine,并且支持了常用的时间函数、支持联表、分…...

SQL Server对象类型(3)——视图(View)
1. 视图概念 与Oracle中的视图类似,SQL Server中的视图也是一种虚的、通过一个查询定义的逻辑对象,主要用于集中、简化、定制用户需求,控住其底层表安全,以及应用系统提供向后兼容等方面。 --注: 1)上述内容中的“虚的”,表示视图本身并不实际包含和存储数据,SQL Ser…...

【LeetCode】剑指 Offer <二刷>(1)
目录 前言: 题目:剑指 Offer 03. 数组中重复的数字 - 力扣(LeetCode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 前言: …...

MySQL事物和存储引擎
事务 一、MySQL事务的概念 事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 事务是一个不可分割的工作逻辑单…...

代码随想录算法训练营Day51 | 309. 最佳买卖股票时机含冷冻期 | 714. 买卖股票的最佳时机含手续费 | 股票总结
文章目录 309. 最佳买卖股票时机含冷冻期标准 dp机智的分析解法 714. 买卖股票的最佳时机含手续费贪心算法 股票总结 309. 最佳买卖股票时机含冷冻期 题目链接 | 解题思路 标准 dp 本题多了冷却期的条件,将原本的两个状态变得更复杂了。变化在于,如果…...

C#,《小白学程序》第八课:列表(List)应用之二“编制高铁列车时刻表”
1 文本格式 /// <summary> /// 车站信息类 class /// </summary> public class Station { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; /// <summary> /// 车站名 /// </summary&g…...

2、QT的信号与槽
一、什么是信号与槽 一个对象发送一个信号出去,另外一个对象接收到该信号后,会触发相应的槽函数 二、信号与槽的语法 connect(信号的发送者,SIGNAL(信号名称),信号的接收者,SLOT(槽函数)); 1、写法: QT 4 的写法 connect(sende…...

Java代码审计15之Apache log4j2漏洞
文章目录 1、log4j简介2、复现2.1、高版本测试2.2、测试代码2.3、补充之dns探测2.3.1、rmi、ldap也可以dnslog探测 2.3.2、dnslog外带信息 3、漏洞原理3.1、漏洞的危害大的背景3.2、具体的代码调试 4、靶场测试4.1、dns探测4.2、工具下载与使用4.3、测试4.4、手工可以测出&…...

c语言每日一练(13)
前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,上学期间将看学业情况更新。 五道选择题: 1、程序运行的结果…...

H5 + C3基础(六)(2D转换transform 位移 旋转 缩放)
2D转换transform & 2D转换transform平移利用平移百分比优化盒子水平垂直居中 旋转指定2d变换的中心点 transform-origin 缩放2d转换简写 2D转换transform 所谓2D转换,就是在二维坐标系内进行各种操作,包括平移,转动,缩放等等…...