前言
2025年6月30日,百度正式开源文心大模型4.5系列(ERNIE 4.5),涵盖10款不同参数规模的模型,包括了47B(470亿)、3B(30亿)激活参数的异构混合专家架构多模态MoE大模型,及0.3B(3亿)参数的稠密型模型,预训练权重与推理代码均完全开放。除此之外还提供完整的ERNIEKit微调工具链和FastDeploy推理框架,兼容主流生态,适用于各种业务场景。
目前,这些模型已可在GitCode代码托管平台进行下载,博主这里也是第一时间对文心开源模型进行了测评,并根据实践业务场景选择文心开源模型ERNIE-4.5-0.3B-Paddle构建了一个企业智能客服系统.
一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.gitcode.com/theme/1939325484087291906
一、文心开源大模型(ERNIE 4.5)核心技术探索
从GitCode平台可以看到,百度此次开源的文心大模型有十多款,形成了从0.3B到424B参数的梯度覆盖,不仅包含文本模型还包含了视觉多模态模型(VLM),除最小的0.3B 模型外,其余模型都采用异构多模态MoE(专家混合模型:Mixture of Experts)架构。
与常规的单模态MoE不同,此次百度开源的ERNIE 4.5模型是一种异构混合型,也就是通过“分而治之”策略提升模型性能的人工智能架构:将多个不同类型的专家模块集成在一起,每个输入仅激活部分相关的专家模块,从而在不显著增加计算量的前提下大幅提升模型容量。
我们选择一个ERNIE-4.5-21B-A3B-Base-Paddle,21b参数的开源模型的工程目录点击进去查看,如下图所示
文心开源大模型(ERNIE 4.5)核心技术包含以下几点:
1、异构多模态MoE架构:
异构多模态:
多模态:模型能“看懂”图片、“听懂”语音、“读懂”文字,还能把三者结合起来理解(比如看到一张“猫在沙发上”的图片,能生成对应的文字描述)。
异构:不同任务由不同的“专家模块”处理,比如文本任务由“语言专家”负责,图片任务由“视觉专家”负责,避免“一刀切”导致的效率低下。
MoE(专家混合模型):
原理:模型内部有多个“专家”(类似不同领域的专家),输入数据时,系统会自动分配给最擅长的专家处理。
优势:避免单一模型“什么都做但都不精”的问题,同时通过动态激活专家,减少计算量,提升效率。
2、多模态混合专家模型预训练
通过模态隔离路由和异构专家并行策略,实现文本与视觉模态的联合训练,避免模态间干扰
3、ERNIE 4.5的架构设计理念分析
专家分工:三类专家各司其职
文本专家:专注处理语言任务(如翻译、写文章、代码生成)。
视觉专家:优化图片/视频处理(如识别物体、分析场景)。
共享专家:捕捉跨模态的通用特征(比如文字和图片的关联性)。动态路由:智能分配任务
门控网络:相当于“任务调度员”,根据输入内容(文本/图片/视频)自动选择最合适的专家组合。
稀疏激活:每个任务只激活少量专家(比如处理文本时,主要用文本专家,少量用共享专家),减少计算量。效率优化:又快又省
自适应分辨率:视觉专家支持任意尺寸图片输入,避免裁剪导致的细节丢失。
混合精度训练:用更低的计算资源训练更大模型,成本降低但性能不降。
专家并行:分布式训练中,专家模块分布在不同设备,提升训练速度。
4、 对比传统模型:ERNIE 4.5的优势
ERNIEKit开发套件:覆盖微调(SFT)、对齐(DPO)到量化的全流程开发。
FastDeploy部署工具:解决多硬件平台高效推理问题,降低部署门槛。
维度 | 传统模型 | ERNIE 4.5 |
---|---|---|
处理模态 | 单一模态(如只能处理文本) | 多模态(文本+图片+视频) |
计算效率 | 高(可能浪费资源) | 低(动态激活专家) |
专业性 | 泛泛而谈 | 各领域专家精准处理 |
部署难度 | 高(需复杂调优) | 低(配套工具链支持) |
二、文心开源大模型官方Benchmark(基准测试)对比
大模型的Benchmark(基准测试)是用于评估和比较大型机器学习模型(如GPT、DeepSeek、PaLM等)性能的一系列标准化任务、数据集和评价指标,常用来作为评价模型质量的标准之一。
我们可以看到文心4.5系列模型在Benchmark测评上与其他开源模型相比,不俗的效果体现。
三、文心开源大模型私有化部署
最近公司有一个企业智能客服系统的需求需要进行开发,博主这里刚好了解到百度正式开源了文心大模型4.5系列(ERNIE 4.5) ,于是博主计划私有化部署一个ERNIE-4.5-0.3B-Paddle的轻量化模型,借助大模型的AI能力来充当咱们系统的智能客服,说干咱就干,先进行私有化部署。
1、准备好系统镜像和显卡
博主这里准备是英伟达的4090显卡(24G显存),用来跑ERNIE-4.5-0.3B-Paddle的轻量化模型是足够的
操作镜像,这里准备的是Ubuntu 20.04系统,加上必要的环境CUDA12\Python3.10等,如下图所示:
2、下载huggingface-cli
huggingface-cli 是 Hugging Face 官方提供的命令行工具,自带完善的下载模型功能
pip install -U huggingface_hub
3、如果下载受限制,可以设置以下国内环境变量,
2. 设置环境变量
Linux
export HF_ENDPOINT=https://hf-mirror.com
Windows Powershell
$env:HF_ENDPOINT = "https://hf-mirror.com"
建议将上面这一行写入 ~/.bashrc。
4、下载大模型
我们选择的是ERNIE-4.5-0.3B-Paddle大模型
下载命令:
#cDownload Model
huggingface-cli download baidu/ERNIE-4.5-0.3B-Paddle --local-dir baidu/ERNIE-4.5-0.3B-Paddle
5、下载 paddlepaddle-gpu
#注意这里的版本需要根据自己的cuda的版本去定
python3 -m pip install paddlepaddle-gpu==3.1.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
Looking in indexes: https://www.paddlepaddle.org.cn/packages/stable/cu118/
6、下载fastdeploy-gpu
FastDeploy的安装按这个文档,不要直接pip install,有要求,你的显卡选择对应命令,
下载地址:https://paddlepaddle.github.io/FastDeploy/get_started/installation/nvidia_gpu/
#1、如果是 For SM86/89 architecture GPUs(e.g A10/4090/L20/L40):
执行这个命令:
python -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/stable/fastdeploy-gpu-86_89/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
#2、如果是For SM80/90 architecture GPUs(e.g A30/A100/H100/):
执行这个命令
python -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/stable/fastdeploy-gpu-80_90/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
7、运行模型
python -m fastdeploy.entrypoints.openai.api_server \
--model baidu/ERNIE-4.5-0.3B-Paddle \
--port 8180 \
--metrics-port 8181 \
--engine-worker-queue-port 8182 \
--max-model-len 32768 \
--max-num-seqs 32
8、成功运行提示
Launching metrics service at http://0.0.0.0:8181/metrics
到这一步,咱们的模型就算部署成功了,咱们接下来,写一个测试脚本,看看模型提供的API接口能否调用成功。
9、编写脚本测试调用 test.py
test.py 测试脚本如下所示:
import openai
host = "0.0.0.0"
port = "8180"
client = openai.Client(base_url=f"http://{host}:{port}/v1", api_key="null")
response = client.chat.completions.create(
model="null",
messages=[
{"role": "system", "content": "你是一位电商售后客服专家,擅长处理客户售后服务问题,对产品使用体验、物流配送、售后服务、退换货流程和日常保养等都有丰富的实践经验。"},
{"role": "user", "content": "请问一般的产品售后有哪些保障,如何退换货?."},
],
stream=True,
)
for chunk in response:
if chunk.choices[0].delta:
print(chunk.choices[0].delta.content, end='')
print('\n')
10、大模型回答
运行命令:python test.py
大模型调用成功请求日志
到这里我们的大模型就私有化部署成功了。
对于算力有限的中小开发者,0.3B参数的稠密型模型可降低部署门槛,MoE模型则能满足企业级复杂任务的需求。这种分层供给思路,让不同资源条件的使用者都能找到适配的工具。
四、基于文心开源大模型开发一个智能客服系统
文心开源模型部署成功后,会提供一个可以调用的API接口,基于模型接口再加上补充的知识库,就可以开始进行我们的应用系统开发工作了。
1、知识库构建
主要流程:加载 → 分割 → 向量 → 存储 → 检索 → 生成
文本分割处理:首先对产品资料进行分块处理,将长文档转化为适合语义检索的知识单元
数据向量化处理及入库:将文本块转化为向量(embedding)。建立原始文本与向量数据的关联存储,形成高效检索的"文本-向量"双索引结构存储在知识向量库中。
知识库的构建使得系统能够通过计算问题向量与知识库向量的相似度,快速定位最相关的文本片段,为大模型生成精准回答提供数据支撑
2、技术架构
本项目主要采用以下前沿技术和工具:
- Vue 3 +vite:项目基于 Vue 3 构建,并采用 TS 语法,使组件书写更简洁、代码更加严谨。
- TDesign Vue Next:集成TDesign 前端组件库,实现了对话框、按钮、输入框、弹窗等多种 UI 组件,保证了界面的一致性和良好的用户体验。
- marked和Localstorage:用于解析和渲染大模型返回的Markdown字符串,使得消息中内容能够友好显示;Localstorage:用于实现对话记录的本地存储
- 流式 API 请求封装:通过 Fetch API 的流式请求与 SSE 技术,实现了聊天机器人实时响应,保证用户体验的流畅性。
- 知识库的构建:加载专业文档、处理文本、创建向量嵌入及数据入库
- 文心开源大模型私有化部署:为应用提供智能问答服务.
- 基于知识库的智能问答:检索问题改写、知识库检索、 使用大模型基于检索回来的相关文本段落整理检索结果,生成最终的回答。专业领域知识语料补充,解决模型数据时效性和回答幻觉问题.
3、功能介绍
(1) 智能客服能进行多轮对话与意图识别
精准解析用户问题:【文心开源大模型+知识库】提供准确回答,电商场景商品咨询应答准确率提升35%,政务业务合规性检查准确率达80%。
(2)对话展示
消息以气泡样式展示,支持 markdown格式文件渲染,用户与系统的对话清晰分隔。每条消息下方附有删除、引用及反馈按钮,方便用户管理和互动。
(3)历史数据存储
通过Localstorage本地存储,支持用户将历史问答记录本地存储,便于存档或再次询问。
(4)消息反馈
针对每条对话,用户可点赞或点踩,通过反馈组件记录用户对回答满意度,同时可以点击引用按钮快速将消息内容导入输入框继续讨论。方便模型进一步调优
4、核心代码展示
文本分割、向量化处理
# 安装必要库 (运行前取消注释)
# !pip install chromadb sentence-transformers nltk
import re
import nltk
from nltk.tokenize import sent_tokenize
from sentence_transformers import SentenceTransformer
import chromadb
from chromadb.config import Settings
# 下载NLTK数据(句子分割需要)
nltk.download('punkt')
# 1. 文本分割函数
def text_segmenter(text, max_length=200):
"""
将长文本分割为语义段落
策略:先分句,然后合并短句直到达到最大长度
"""
sentences = sent_tokenize(text)
segments = []
current_segment = ""
for sentence in sentences:
# 清理句子中的多余空格
cleaned_sentence = re.sub(r'\s+', ' ', sentence).strip()
if len(current_segment) + len(cleaned_sentence) <= max_length:
current_segment += " " + cleaned_sentence if current_segment else cleaned_sentence
else:
if current_segment:
segments.append(current_segment)
# 如果单句就超过max_length,直接截断
if len(cleaned_sentence) > max_length:
chunks = [cleaned_sentence[i:i+max_length] for i in range(0, len(cleaned_sentence), max_length)]
segments.extend(chunks)
else:
current_segment = cleaned_sentence
if current_segment:
segments.append(current_segment)
return segments
# 2. 向量化处理函数
def vectorize_texts(texts):
"""
使用Sentence Transformer模型生成文本向量
"""
# 加载轻量级模型(首次运行会自动下载)
model = SentenceTransformer('all-MiniLM-L6-v2')
embeddings = model.encode(texts)
return embeddings.tolist()
# 3. 向量数据库入库
def store_in_chroma(segments, embeddings, collection_name="doc_segments"):
"""
将文本片段和向量存入ChromaDB
"""
# 创建客户端(持久化到本地目录)
client = chromadb.Client(Settings(
chroma_db_impl="duckdb+parquet",
persist_directory="./vector_db" # 向量数据库存储路径
))
# 创建或获取集合
collection = client.get_or_create_collection(name=collection_name)
# 生成文档ID
ids = [f"doc_{i}" for i in range(len(segments))]
# 添加到集合
collection.add(
documents=segments,
embeddings=embeddings,
ids=ids
)
print(f"成功存储 {len(segments)} 个文本片段到集合 '{collection_name}'")
return client
# 示例使用
if __name__ == "__main__":
# 示例文本(替换为你的实际内容)
sample_text = """
大型语言模型(LLM)是人工智能领域的重要突破。它们通过分析海量文本数据学习语言模式,
能够生成人类般的文本。Transformer架构是LLM的核心,它使用自注意力机制处理文本序列。
LLM的应用包括:机器翻译、文本摘要、对话系统等。例如,ChatGPT展示了LLM在对话生成方面的强大能力。
然而,LLM也存在挑战,如训练成本高、可能产生有偏见的输出等。
研究人员正在开发更高效的训练方法,如参数高效微调(PEFT)。未来LLM可能会与多模态技术结合,
处理图像、音频等非文本信息。这将开启人工智能应用的新篇章。
"""
# 文本分割
segments = text_segmenter(sample_text, max_length=150)
print("\n分割后的文本片段:")
for i, seg in enumerate(segments):
print(f"[Segment {i+1}]: {seg[:80]}...") # 显示前80字符
# 向量化处理
embeddings = vectorize_texts(segments)
print(f"\n生成 {len(embeddings)} 个向量,维度: {len(embeddings[0])}")
# 存储到向量数据库
chroma_client = store_in_chroma(segments, embeddings)
# 查询示例
collection = chroma_client.get_collection("doc_segments")
query = "语言模型有哪些应用?"
query_embedding = vectorize_texts([query])[0]
results = collection.query(
query_embeddings=[query_embedding],
n_results=2
)
print("\n相似性查询结果:")
for i, doc in enumerate(results['documents'][0]):
print(f"结果 {i+1}: {doc}")
# 注意:实际使用时可能需要处理更长的文本,建议添加错误处理和大文件处理逻辑
应用端调用模型api接口实现智能问答
/**
* 调用模型api接口实现智能问答
*/
const getChatData = async (messages, options) => {
const { success, fail, complete, cancel } = options;
const controller = new AbortController();
const { signal } = controller;
cancel?.(controller);
// your-api-key
const apiKey = "";
const responsePromise = fetch("/v1/chat", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer${apiKey ? ` ${apiKey}` : ""}`,
},
body: JSON.stringify({
messages, // 消息列表
model: "", // 模型
stream: true, // 流式输出
}),
signal,
}).catch((e) => {
const msg = e.toString() || "流式接口异常";
complete?.(false, msg);
return Promise.reject(e); // 确保错误能够被后续的.catch()捕获
});
responsePromise
.then((response) => {
if (!response?.ok) {
complete?.(false, response.statusText);
fail?.();
throw new Error("Request failed"); // 抛出错误以便链式调用中的下一个.catch()处理
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
if (!reader) throw new Error("No reader available");
const bufferArr = [];
let dataText = ""; // 记录数据
const event = { type: null, data: null };
async function processText({ done, value }) {
if (done) {
complete?.(true);
return Promise.resolve();
}
const chunk = decoder.decode(value);
const buffers = chunk.toString().split(/\r?\n/);
bufferArr.push(...buffers);
let i = 0;
while (i < bufferArr.length) {
const line = bufferArr[i];
if (line) {
dataText += line;
const response = line.slice(6);
if (response === "[DONE]") {
event.type = "finish";
dataText = "";
} else {
try {
const choices = JSON.parse(response.trim())?.choices?.[0];
if (choices.finish_reason === "stop") {
event.type = "finish";
dataText = "";
} else {
event.type = "delta";
event.data = choices;
}
} catch (error) {
console.error("解析错误:", error);
}
}
}
if (event.type && event.data) {
const jsonData = { ...event };
success(jsonData);
event.type = null;
event.data = null;
}
bufferArr.splice(i, 1);
}
return reader.read().then(processText);
}
return reader.read().then(processText);
})
.catch(() => {
// 处理整个链式调用过程中发生的任何错误
fail?.();
});
};
//传参messgaes 示例
messages=[
{"role": "system",
"content": "你是一位电商售后客服专家,擅长处理客户售后服务问题,对产品使用体验、物流配送、售后服务、退换货流程和日常保养等都有丰富的实践经验。"},
{"role": "user",
"content": "请问一般的产品售后有哪些保障,如何退换货?."},
]
百度开源的文心ERNIE-4.5-0.3B-Paddle模型凭借其创新的架构、轻量化设计与PaddlePaddle框架的工业级支持,为智能客服系统提供了高性能、低成本的解决方案。通过方便部署、实时响应与行业定制化功能,该模型已在客服、政务、零售等领域验证了其价值,未来将进一步整合在线学习与多模态能力,推动智能客服从“效率工具”向“体验引擎”升级。
五、项目总结
百度开源文心4.5系列,不仅以多模态架构创新、高效训练体系构建及先进量化技术突破,彰显其在人工智能领域的技术领导力,更通过开源战略的深度实践,为全球大模型技术生态注入普惠动能。此次开源犹如为智能革命装上涡轮引擎,当技术民主化的浪潮冲破产业壁垒,真正受益的将是扎根开源沃土的万千创新者——他们以效率为刃,正在智能时代的画布上勾勒出前所未有的创新图景。这场由技术普惠驱动的变革,不仅重构了AI开发范式,更在产业升级的深水区开辟出一条由开放创新引领的智能进化之路。
文心是百度自主研发的产业级知识增强大模型,以创新性的知识增强技术为核心,从单模态大模型到跨模态、从通用基础大模型到跨领域、跨行业持续创新突破,构建了模型层、工具与平台层,百度开源文心大模型这一动作,大幅降低人工智能开发和应用门槛,加快人工智能大规模产业化进程并拓展人工智能技术边界。
如果文章前的你也想自己私有化部署来构建自己的项目应用话,不妨考虑文心开源模型成为你的首选基座:
使用轻量化模型?推荐使用文心4.5-0.3B-Base,实测英伟达4090显卡运行没问题。
想使用多模态智能体?文心4.5-VL-28B-A3B 只需要80G显存就可以运行部署。
本地资源有限,不想部署?百度千帆直接用API,省心还便宜。
下载链接:文心大模型免费下载地址:https://gitcode.com/?tn=68615cd044b6ce13aedca4f2