简介

百度文心一言(ERNIE Bot)是百度推出的大型语言模型,具有强大的中文理解与生成能力。文心一言通过飞桨深度学习平台训练而成,具有广泛的知识面,尤其在中文内容处理方面表现突出。通过LangChain框架,我们可以轻松地将文心一言模型集成到我们的应用程序中。

特点

  • 卓越的中文处理能力:针对中文语境和知识进行了专门优化

  • 丰富的中文知识库:拥有广泛的中文语料训练,对中国文化、历史等领域有深入理解

  • 多模态能力:支持文本-图像多模态交互(高级版本)

  • 安全合规:符合中国法律法规和内容安全要求

  • 低延迟:服务部署在中国境内,访问延迟低

  • 定制化能力:支持针对特定场景进行优化和定制

在LangChain中使用百度文心一言聊天模型

安装必要依赖

在使用文心一言聊天模型之前,需要安装相关依赖:

pip install langchain langchain-qianfan qianfan

配置API密钥

使用文心一言模型需要百度智能云API密钥,可以通过以下方式配置:

import os

# 方法1:设置环境变量
os.environ["QIANFAN_AK"] = "your-access-key"
os.environ["QIANFAN_SK"] = "your-secret-key"

# 方法2:在初始化时直接传递
from langchain_qianfan import ChatQianfan
chat = ChatQianfan(qianfan_ak="your-access-key", qianfan_sk="your-secret-key")

模型选择

百度文心大模型提供了多个版本,可以根据需求选择:

# 文心一言(默认模型)
chat_default = ChatQianfan()

# 指定ERNIE-Bot-4(文心一言4.0)
chat_ernie4 = ChatQianfan(model="ERNIE-Bot-4")

# 使用ERNIE-Bot(文心一言标准版)
chat_ernie = ChatQianfan(model="ERNIE-Bot")

# 使用ERNIE-Bot-turbo(文心一言轻量版)
chat_turbo = ChatQianfan(model="ERNIE-Bot-turbo")

基本使用

创建并发送简单消息

from langchain_qianfan import ChatQianfan
from langchain_core.messages import HumanMessage, SystemMessage

chat = ChatQianfan()

# 创建消息列表
messages = [
    SystemMessage(content="你是一位中医专家,擅长中医养生理论和实践指导。"),
    HumanMessage(content="请介绍一下中医理论中的阴阳五行学说。")
]

# 获取回复
response = chat.invoke(messages)
print(response.content)

高级功能

1. 流式输出

文心一言支持流式输出,适用于需要实时显示生成内容的场景:

from langchain_qianfan import ChatQianfan
from langchain_core.messages import HumanMessage

chat = ChatQianfan(streaming=True)

# 使用stream方法
for chunk in chat.stream([HumanMessage(content="请写一首关于长江的古风诗词")]):
    print(chunk.content, end="", flush=True)

2. 模型参数调优

可以调整各种参数来控制文心一言的输出:

from langchain_qianfan import ChatQianfan

# 控制随机性
deterministic_chat = ChatQianfan(temperature=0.1)  # 更确定性的输出
creative_chat = ChatQianfan(temperature=0.9)  # 更具创造性和多样性

# 控制生成长度
chat = ChatQianfan(max_output_tokens=500)  # 限制回复最大令牌数

# 惩罚重复
diverse_chat = ChatQianfan(penalty_score=1.0)  # 降低重复内容的概率

3. 多轮对话管理

文心一言善于处理多轮对话,保持上下文连贯:

from langchain_qianfan import ChatQianfan
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage

chat = ChatQianfan()

# 创建多轮对话
messages = [
    SystemMessage(content="你是一位旅游顾问,擅长推荐中国的旅游景点。"),
    HumanMessage(content="我想去云南旅游,有什么推荐?"),
    AIMessage(content="云南是个旅游胜地,有丽江古城、大理洱海、香格里拉、昆明石林等著名景点。您计划什么时间去?想体验什么类型的旅游?"),
    HumanMessage(content="我计划十月份去,主要想体验少数民族文化和自然风光。")
]

response = chat.invoke(messages)
print(response.content)

4. 知识问答应用

文心一言在中文知识问答方面表现优异:

from langchain_qianfan import ChatQianfan
from langchain_core.messages import HumanMessage

chat = ChatQianfan(temperature=0.1)  # 使用低温度提高准确性

# 中文知识问答
response = chat.invoke([HumanMessage(content="请详细解释中国古代科举制度的发展历程及其影响。")])
print(response.content)

5. 内容创作与润色

文心一言善于中文内容创作和优化:

from langchain_qianfan import ChatQianfan
from langchain_core.messages import SystemMessage, HumanMessage

chat = ChatQianfan()

# 创作内容
messages = [
    SystemMessage(content="你是一位资深文案撰写专家。"),
    HumanMessage(content="请为一款新上市的中国传统风格智能手表撰写一段富有诗意的广告文案,突出其结合传统文化与现代科技的特点。")
]

response = chat.invoke(messages)
print(response.content)

6. 函数调用

高级版文心一言支持函数调用能力:

from langchain_qianfan import ChatQianfan
from langchain_core.messages import HumanMessage

# 定义可用的函数
functions = [
    {
        "name": "query_weather",
        "description": "查询指定城市的天气情况",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "城市名称,例如北京、上海"},
                "date": {"type": "string", "description": "查询日期,格式为YYYY-MM-DD,可选"}
            },
            "required": ["city"]
        }
    }
]

# 初始化支持函数调用的聊天模型
chat = ChatQianfan(model="ERNIE-Bot-4").bind(functions=functions)

# 模型将决定是否调用函数
response = chat.invoke([HumanMessage(content="明天深圳的天气怎么样?")])
print(response)

7. 异步调用

对于需要处理大量请求的应用,可以使用异步API:

import asyncio
from langchain_qianfan import ChatQianfan
from langchain_core.messages import HumanMessage

async def generate_async():
    chat = ChatQianfan()
    response = await chat.ainvoke([HumanMessage(content="异步请求示例,请简要介绍杭州西湖的历史")])
    return response.content

# 运行异步函数
result = asyncio.run(generate_async())
print(result)

注意事项

  1. 账号申请:使用文心一言API需要在百度智能云平台申请账号并开通服务

  2. 费用控制:请注意监控API使用量和相关费用

  3. QPS限制:百度API有调用频率限制,大量请求时需要合理控制请求速率

  4. 内容合规:确保遵守中国法律法规和百度平台的内容政策

  5. 中文优化:文心一言对中文优化较好,中文场景效果更佳

常见问题排查

  • API密钥错误:确保API密钥正确设置且有效

  • 服务未开通:检查是否已在百度智能云开通文心一言服务

  • 配额限制:检查是否超出API调用配额

  • 模型选择:确认所请求的模型是否在您的账户中可用

通过本文档,您应该能够在LangChain框架中有效地使用百度文心一言聊天模型,从基础应用到高级功能,为您的应用添加强大的中文自然语言处理能力。