最近在尝试将文心一言的LLM能力接入Promptulate,故写了一篇博客记录一下,Promptulate 是 Promptulate AI 旗下的大语言模型自动化与应用开发框架,旨在帮助开发者通过更小的成本构建行业级的大模型应用,其包含了LLM领域应用层开发的大部分常用组件,如外部工具组件、模型组件、Agent智能代理、外部数据源接入模块、数据存储模块、生命周期模块等。 通过 Promptulate,你可以轻松构建起属于自己的LLM应用程序。
Promptulate官网
将文心一言接入Promptulate之后,便可以轻松地利用Promptulate构建一些复杂能力,如让大语言模型使用工具。
文心一言(ERNIE Bot)是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。文心一言是知识增强的大语言模型,基于飞桨深度学习平台和文心知识增强大模型,持续从海量数据和大规模知识中融合学习具备知识增强、检索增强和对话增强的技术特色 。
百度的文心一言被定位为一种基于人工智能的赋能平台,旨在为金融、能源、媒体、政务等各行各业的智能化变革提供支持。它将充当一种“生产力工具”的角色,通过提供智能化的服务,帮助各行业提高工作效率和创造力。最终,这将推动各行业的发展,提高生产力,实现更快、更高效的工作方式。
通过https://yiyan.baidu.com/可以获取文心一言的内测机会。当然,你也可以申请获取API,这样子你可以有能多自定义功能的能力。
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文档,我们可以快速构建起一个基于Python的LLM接入程序。
import json
import requests
API_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
最新版,-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模型。
在使用百度千帆大模型平台系列的LLM之前,你需要先导入你的API Key
和Secret Key
import os
os.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_path
print(get_default_storage_path())
promptulate
的架构设计可以轻松兼容不同的大语言模型扩展,在promptulate
中,llm负责最基本的内容生成部分,因此为最基础的组件。
下面的示例展示了如何使用百度文心ErnieBot的大语言模型进行交互。
如果你想使用国产文心系列模型,只需要 ErnieBot()进行初始化,文心模型虽然与openai模型有较大差异,但是框架提供了尽可能完美的兼容。
你还可以使用ErnieBot(model=“ernie-bot”)来具体选择对应的文心模型,目前框架提供了两种文心模型,分别是文心一言(“ernie-bot”)和文心turbo(“ernie-bot-turbo”),默认为文心turbo模型。
from promptulate.llms import ErnieBot
llm = 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 ErnieBot
llm = ErnieBot(model="ernie-bot")
answer = llm("请解释一下引力波的放射与广义相对论的必然关系")
print(answer)
下面展示如何使用ErnieBot进行网络搜索。
from promptulate.tools import (
DuckDuckGoTool,
Calculator,
)
from promptulate.llms import ErnieBot
from promptulate.agents import ToolAgent
def 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进行网络搜索,最后运行结果如下: