实战进阶:结合华为云 ModelArts 与 LangChain,打造企业级智能客服系统
一、 前言
在前两天的文章中,我们分别探讨了:
1. RAG(检索增强生成):如何通过外部知识库解决大模型幻觉问题。
2. 华为云 ModelArts 部署:如何一键在云端运行开源大模型并获取 API。
但在实际企业落地中,仅仅有一个孤立的模型 API 是不够的。客服场景不仅要求模型“会说话”,更要求它“说得准、说的是企业内部规范”。
今天我们就来串联全流程,用 Python 写一个真正可用于业务的智能客服原型系统。
────────────────────────────────────
二、 系统架构设计
整个企业级智能客服的核心链路如下:
1. 知识库准备:收集企业的《产品说明书》、《售后政策》、《常见FAQ》等文档。
2. 向量化存储:利用嵌入模型(Embedding)将文档切片并存入向量数据库。
3. 华为云大模型推理:通过 ModelArts 提供的在线服务 API 作为大脑。
4. LangChain 调度:将“用户提问 $\rightarrow$ 向量检索 $\rightarrow$ 华为云大模型生成”串联成完整的检索问答链(RetrievalQA)。
────────────────────────────────────
三、 核心代码实现
在编写代码前,请确保安装了相关依赖:
pip install langchain requests chromadb tiktoken
以下是完整的企业级智能客服核心脚本:
import os
from langchain.chains import RetrievalQA
from langchain.embeddings.openai import OpenAIEmbeddings # 也可以替换为开源Embedding
from langchain.llms.base import LLM
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
import requests
# ==================== 1. 自定义华为云 ModelArts 大模型包装类 ====================
class ModelArtsLLM(LLM):
endpoint_url: str = "https://your-modelarts-endpoint-url.com/v1/infer"
api_token: str = "您的华为云-IAM-Token"
@property
def _llm_type(self) -> str:
return "modelarts_llm"
def _call(self, prompt: str, stop=None) -> str:
headers = {
"Content-Type": "application/json",
"X-Auth-Token": self.api_token
}
payload = {
"inputs": prompt,
"parameters": {
"max_new_tokens": 512,
"temperature": 0.1, # 客服场景建议温度调低,保证回答严谨
"top_p": 0.9
}
}
try:
response = requests.post(self.endpoint_url, headers=headers, json=payload, timeout=60)
if response.status_code == 200:
# 根据 ModelArts 实际返回的 JSON 结构解析文本
result = response.json()
return result.get("generated_text", "未能解析到回答")
else:
return f"调用华为云大模型失败,状态码: {response.status_code}"
except Exception as e:
return f"请求异常: {str(e)}"
# ==================== 2. 构建知识库与问答链 ====================
def create_customer_service_bot():
# 模拟企业售后知识库
faq_text = """
问题1:华为云 ModelArts 支持哪些框架?
回答:ModelArts 支持 TensorFlow、PyTorch、MindSpore 等主流深度学习框架,以及主流开源大模型。
问题2:购买的云服务资源可以退款吗?
回答:根据华为云相关政策,包年包月产品在规定退订时间内支持非全额退订,按需付费产品则实时结算不予退款。
问题3:如何联系人工客服?
回答:您可以拨打华为云官方客服热线,或在控制台右下角点击“在线咨询”转接人工专员。
"""
with open("company_faq.txt", "w", encoding="utf-8") as f:
f.write(faq_text)
# 加载与切分文档
from langchain.document_loaders import TextLoader
loader = TextLoader("company_faq.txt", encoding="utf-8")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=150, chunk_overlap=20)
docs = text_splitter.split_documents(documents)
# 向量化存储(此处简化演示使用默认Embedding,生产环境可换为本地模型)
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(docs, embeddings)
# 实例化我们的华为云大模型
huawei_llm = ModelArtsLLM()
# 创建检索问答链
qa_chain = RetrievalQA.from_chain_type(
llm=huawei_llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 1}),
return_source_documents=True # 返回溯源文档,增强客服可信度
)
return qa_chain
# ==================== 3. 模拟客户咨询测试 ====================
if __name__ == "__main__":
bot = create_customer_service_bot()
user_query = "请问购买的云服务能退款吗?"
print(顾客提问: {user_query}\n)
response = bot({"query": user_query})
print(f"智能客服回答: \n{response['result']}")
print(f"\n[参考知识库来源]: {response['source_documents'][0].page_content}")
────────────────────────────────────
四、 生产环境落地的优化方向
如果你想把这个原型推向真实业务上线,建议从以下几个维度进行加固:
1. 多轮对话记忆(Chat History):目前的脚本是一问一答的,客服场景需要引入 ConversationalRetrievalChain 来支持上下文追问(例如用户接着问:“那怎么退呢?”)。
2. 混合检索与重排(Rerank):结合关键词检索(BM25)与向量检索,并加入 Rerank 模型,确保在庞大的企业知识库中精准捞出答案。
3. 敏感词过滤与安全审核:利用华为云内容安全(Moderation)服务,过滤客户的不当言论,并防止大模型吐出违规内容。
────────────────────────────────────
五、 总结
通过今天这篇实战,我们打通了从企业私有知识库切分 $\rightarrow$ 华为云 ModelArts 大模型推理 $\rightarrow$ LangChain 智能编排的全链路。
借助华为云强大的云计算与 AI 基础设施,企业可以非常轻松、安全地构建出具备行业专业度的智能客服系统。
如果你在实现过程中遇到了架构设计或代码报错的问题,欢迎在评论区留言交流!
- 点赞
- 收藏
- 关注作者
评论(0)