Skip to content

ChatModels模块

1. 简介

文心一言是百度研发的知识增强大语言模型,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。

大家通过ERNIE Bot可以调用文心一言模型完成简单的AI任务,但是如果面对复杂的场景应用,可能需要基于ERNIE Bot开发较多的功能模块。

为了降低使用门槛和开发工作,我们推荐通过ERNIE Bot Agent来调用文心一言模型,助力大家快速开发出AI应用。

ERNIE Bot Agent支持多个文心一言模型,包括ernie-3.5ernie-turboernie-4.0ernie-longtext

模型名称 说明 功能 输入token数量上限
ernie-3.5 文心大模型3.5版本。具备优秀的知识增强和内容生成能力,在文本创作、问答、推理和代码生成等方面表现出色。 对话补全,函数调用 3000
ernie-turbo 文心大模型。相比ernie-3.5模型具备更快的响应速度和学习能力,API调用成本更低。 对话补全 3000
ernie-4.0 文心大模型4.0版本,具备目前系列模型中最优的理解和生成能力。 对话补全,函数调用 3000
ernie-longtext 文心大模型。在ernie-3.5模型的基础上增强了对长对话上下文的支持,输入token数量上限为7000。 对话补全,函数调用 7000

2. 核心类

下面简单介绍ChatModels模块的核心类,详细接口请参考API文档

ChatModel类是基类,以下是主要的属性和方法。

属性 类型 描述
model str 文心一言模型的名称,支持"ernie-3.5", "ernie-turbo", "ernie-4.0", "ernie-longtext"
default_chat_kwargs Dict[str, Any] 设置调用文心一言模型的默认参数,支持temperature,top_p等,具体参考文档
方法 描述
chat 和模型进行多轮对话,是一个虚方法

ERNIEBot类继承ChatModel类,以下是主要的属性和方法。

属性 类型 描述
model str 文心一言模型的名称,支持"ernie-3.5", "ernie-turbo", "ernie-4.0", "ernie-longtext"
api_type str 文心一言模型的后端,支持"aistudio"和"qianfan",默认是"aistudio"。
access_token Optional[str] 文心一言模型的鉴权access token,不同后端需要使用对应的access token
enable_multi_step_tool_call bool 设置是否开启多工具规划连续调用的功能,默认为False
default_chat_kwargs Dict[str, Any] 设置调用文心一言模型的默认参数,支持temperature,top_p等等,具体参考文档
方法 描述
chat 和模型进行多轮对话

Notes

不同后端需要使用对应的access token进行鉴权,我们推荐使用"aistudio"后端,文档的示例也都使用"aistudio"后端进行演示。

3. 使用示例

为了直观展示,我们举例进行说明,请先确保完成ERNIE Bot Agent的安装和鉴权步骤。

出于使用场景和性能的考虑,ERNIE Bot Agent只提供异步接口来使用文心一言模型。

3.1 进行文本补全

这个示例中,首先创建文心一言ernie-3.5模型,然后两次调用chat接口传入只有单条HumanMessage的数组,文心一言模型会对单条HumanMessage做出回答,返回一条AIMessage

import os
import asyncio
from erniebot_agent.chat_models import ERNIEBot
from erniebot_agent.memory import HumanMessage

os.environ["EB_AGENT_ACCESS_TOKEN"] = "your access token"

async def demo():
    model = ERNIEBot(model="ernie-3.5")
    human_message = HumanMessage(content='你好,你是谁')
    ai_message = await model.chat(messages=[human_message])
    print(ai_message.content, '\n')

    human_message = HumanMessage(content='推荐三个深圳有名的景点')
    ai_message = await model.chat(messages=[human_message],
                                        stream=True)  # 流式返回
    async for chunk in ai_message:
        print(chunk.content, end='')

asyncio.run(demo())

示例的输出类似于:

你好,我是百度公司开发的人工智能语言模型,我的中文名是文心一言,英文名是ERNIE Bot。如果您有任何问题,请随时向我提问。

深圳有许多著名的景点,以下是三个推荐景点:
1. 深圳世界之窗
2. 深圳欢乐谷
3. 深圳东部华侨城

3.2 进行多轮对话

如果希望进行多轮对话,而且让文心一言模型能够根据上下文进行回答,可以执行如下代码。其中前一轮对话的输入输出Message会被带入第二轮对话。

import os
import asyncio
from erniebot_agent.chat_models import ERNIEBot
from erniebot_agent.memory import HumanMessage

os.environ["EB_AGENT_ACCESS_TOKEN"] = "your access token"

async def demo():
    model = ERNIEBot(model="ernie-3.5")
    messages = []

    messages.append(HumanMessage(content='推荐三个深圳有名的景点'))
    ai_message = await model.chat(messages=messages)
    messages.append(ai_message)
    print(ai_message.content, '\n')

    messages.append(HumanMessage(content='根据你推荐的景点,帮我做一份一日游的攻略'))
    ai_message = await model.chat(messages=messages)
    messages.append(ai_message)
    print(ai_message.content, '\n')

asyncio.run(demo())

示例的输出类似于:

深圳有很多有名的景点,以下是三个推荐的景点:
1. **深圳世界之窗**:
2. **深圳欢乐谷**:
3. **深圳东部华侨城**:

好的,以下是一份深圳一日游的攻略:
早上:
* 早上9点左右到达深圳世界之窗。首先可以参观非洲区的莫高窟、埃塞俄比亚院及四大文明古国馆,了解不同文化的历史和特点。
* 然后可以前往亚洲区的比萨斜塔、悉尼歌剧院等著名建筑,感受不同国家的建筑风格和文化内涵。
* 接着可以参观欧洲区的罗马斗兽场、白宫等著名景点,了解不同国家的政治、历史和文化。

中午:
* 在世界之窗内的餐厅享用午餐,品尝当地美食。
下午:
* 下午可以前往深圳欢乐谷,游览各种刺激和好玩的游乐设施。可以先体验一下高速过山车、云霄飞车等刺激的项目,然后再尝试其他的游乐设施。
* 可以选择在欢乐谷内游玩一整个下午,尽情享受游乐园的乐趣。
晚上:
* 晚上可以选择在东部华侨城内度过。可以先去温泉浴场放松一下身心,然后再去主题公园欣赏各种表演和娱乐活动。

3.3 命令行聊天应用

下面示例实现了一个简易的命令行聊天应用。

import os
import asyncio
from erniebot_agent.chat_models import ERNIEBot
from erniebot_agent.memory import HumanMessage, AIMessage

os.environ["EB_AGENT_ACCESS_TOKEN"] = "your access token"

async def demo():
    model = ERNIEBot(model='ernie-3.5')
    messages = []

    print('你好,有什么我可以帮助你的吗?')
    while True:
        prompt = input()
        messages.append(HumanMessage(prompt))
        ai_message = await model.chat(messages=messages, stream=True)

        result = ''
        async for chunk in ai_message:
            result += chunk.content
            print(chunk.content, end='')
        print('')
        messages.append(AIMessage(result))

asyncio.run(demo())