目录

摘要

一、 背景与痛点分析

二、 智能体客服系统架构

三、 核心应用场景与赋能价值

场景一:智能问答与导引(Intelligent Q&A & Guidance)

场景二:多模态事务处理(Multimodal Transaction Processing)

四、 核心代码实现

关键组件说明:

五、 总结与展望

软件平台的开发代码和核心软件技术

第一部分:核心软件技术栈(2025年)

第二部分:平台开发代码(微服务架构示例)

1. 智能问答服务 (qa-service)

项目结构

核心代码文件

2. 视频分析服务 (video-analytics-service)

核心代码片段:与消息队列集成

第三部分:平台的核心技术理念


报告日期: 2025年9月7日
撰写单位: 人工智能与智慧交通创新实验室

摘要

本报告探讨了人工智能智能体(Agent)技术在地铁乘客服务中心(Customer Service)的具体应用与赋能价值。传统地铁客服面临高峰时段应答率低、重复性问题处理效率低下、服务渠道分散、员工培训成本高等挑战。智能体通过整合大语言模型(LLM)、自动语音识别(ASR)、文本转语音(TTS)及知识库技术,构建了“全时、全域、全知”的数字化客服员工。报告重点分析了智能问答导引多模态事务处理两大核心应用场景,并提供了可落地的核心代码示例。实践表明,智能体客服能实现7x24小时秒级响应,将高频事务处理效率提升70%以上,并显著提升乘客体验与运营效率。


一、 背景与痛点分析

地铁客服中心是乘客与运营方沟通的核心枢纽,传统模式存在显著痛点:

  1. 问询压力巨大:日均处理成千上万次问询,其中超过60%为重复性、标准化问题(如首末班车时间、票价、失物招领)。

  2. 服务时间局限:人工客服受工作时间限制,无法提供全天候服务。

  3. 多渠道协同难:热线、APP、小程序、现场终端等服务渠道孤立,信息不互通。

  4. 专业培训成本高:新员工需长时间熟悉复杂的线路、票务政策及应急处置流程。

  5. 应急响应速度慢:面对突发大客流或故障,传统方式难以及时、准确地将安抚信息触达所有受影响乘客。

智能体技术是破解上述难题的钥匙,其核心价值在于将客服人员从重复劳动中解放出来,专注于处理更复杂的情绪安抚和突发事件。

二、 智能体客服系统架构

一个完整的智能体客服系统通常包含以下层次:

  • 感知层(Perception):通过ASR、OCR、语义理解等技术,接收来自热线电话、APP文字/语音、现场终端屏触控、甚至视频摄像头的乘客输入。

  • 认知与决策层(Cognition & Decision):核心是大语言模型(LLM),负责理解乘客意图、查询知识库、进行多轮对话并生成决策(如回答、办理业务、转人工)。

  • 知识层(Knowledge):整合结构化的时刻表、票价表、政策法规,以及非结构化的新闻通告、故障报告,形成智能体的“记忆”。

  • 执行层(Action):通过TTS播报答案、在界面显示信息、调用API办理业务(如开具电子延误证明)、或创建工单流转给人工坐席。

  • 评估与学习层(Learning):通过反馈机制和持续学习,不断优化回答质量和操作流程。

三、 核心应用场景与赋能价值

场景一:智能问答与导引(Intelligent Q&A & Guidance)

1. 场景概述:
这是智能体最基础且最易实现的应用。乘客通过任意渠道提出自然语言问题,智能体即时、准确地从知识库中检索信息并生成答案,同时能进行多轮对话以澄清模糊问询。

2. 智能体工作流:

  1. 输入:乘客提问:“请问从西湖文化广场到火车东站怎么坐车?末班车是几点?”

  2. 感知与理解:ASR将语音转为文本,LLM理解核心意图为“路径规划”和“末班车时间查询”。

  3. 决策与检索:LLM调用“地铁路径规划API”和“时刻表知识库”获取结构化数据。

  4. 执行与输出:LLM组织自然语言回复:“为您规划路线:乘坐1号线往湘湖方向,经过7站直达火车东站。全程约22分钟。1号线往湘湖方向的末班车时间为23:15,请您合理安排出行。”并通过TTS播报或界面显示。

3. 赋能价值:

  • 效率提升:响应时间从人工平均30秒缩短至<3秒,且可并发处理数千问询。

  • 成本降低:接管超过60%的重复性问询,大幅降低人工坐席压力。

  • 体验优化:提供7x24小时不间断的即时响应,乘客无需排队等待。

场景二:多模态事务处理(Multimodal Transaction Processing)

1. 场景概述:
智能体不仅能回答,更能“办事”。通过融合OCR、语音交互和业务流程自动化(RPA),智能体可引导乘客完成购票指导、延误证明开具、失物上报等复杂事务。

2. 智能体工作流(以开具延误证明为例):

  1. 输入:乘客说:“我的地铁刚才延误了,怎么开证明?”

  2. 感知与理解:LLM识别意图为“办理延误证明”。

  3. 决策与执行

    • 步骤1(询问):智能体:“请问您乘坐的是哪条线路,大约什么时间?”(多轮对话)

    • 步骤2(验证):乘客提供信息后,智能体自动查询该时间段的运营故障记录进行验证。

    • 步骤3(办理):验证通过后,智能体调用“电子证明开具API”,生成PDF文件。

    • 步骤4(交付):智能体:“证明已开具成功,请您提供电子邮箱或手机号,我将为您发送下载链接。”

  4. 输出:乘客通过短信或邮件收到电子证明。

3. 赋能价值:

  • 服务深化:将服务范围从“问答”扩展到“办事”,提供一站式解决方案。

  • 流程自动化:将原本需要人工后台操作的流程自动化,处理耗时从小时级降至分钟级。

  • 减少差错:标准化、程序化的流程避免了人工操作可能出现的遗漏或错误。

四、 核心代码实现

以下代码展示了智能问答导引核心模块的实现,采用LangChain框架集成大语言模型和知识库。

python

# metro_customer_service_agent.py
# pip install langchain-openai langchain chromadb sentence-transformers

import os
from datetime import datetime
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.schema import SystemMessage, HumanMessage
from langchain.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_community.document_loaders import TextLoader, WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter

class MetroQAAgent:
    """
    地铁智能问答导引智能体核心类
    集成LLM与向量知识库,处理乘客自然语言问询
    """

    def __init__(self, openai_api_key: str, persist_dir: str = "./chroma_db"):
        # 1. 初始化大语言模型 (使用DeepSeek等国产模型只需更换接口URL和模型名)
        self.llm = ChatOpenAI(
            model="gpt-4o-mini",  # 或 "deepseek-chat"
            api_key=openai_api_key,
            temperature=0.1,  # 低随机性,保证答案稳定
            max_tokens=1024
        )
        
        # 2. 初始化嵌入模型和向量数据库
        self.embeddings = OpenAIEmbeddings(api_key=openai_api_key)
        self.vectorstore = None
        self.persist_dir = persist_dir
        self._init_knowledge_base()

        # 3. 定义系统提示词,设定智能体角色和行为规范
        self.system_prompt = SystemMessage(content="""
        你是一名专业、耐心、友好的地铁客服助手“杭杭”。
        你的主要职责是解答乘客关于杭州地铁的各类问题,包括但不限于:
        - 线路查询、站点信息、换乘指南
        - 首末班车时间、行车间隔
        - 票价查询、票务政策(优惠、免费政策)
        - 失物招领指引
        - 乘客守则、禁带物品规定
        - 最新运营公告、临时调整信息

        请你严格遵守以下规则:
        1. 回答必须基于提供的地铁知识库内容,绝对不允许编造不存在的信息。
        2. 如果知识库中没有明确答案,请明确告知用户“根据当前信息,我无法确认这个问题”,并建议其拨打人工客服热线XXXX或通过官方APP查询。
        3. 保持回答简洁、准确、友好,重点突出。
        4. 如果乘客问题涉及投诉、紧急安全事件,直接引导其联系人工客服。
        5. 当前日期是:{current_date},回答关于末班车等问题时请务必注意时间。
        """.format(current_date=datetime.now().strftime("%Y年%m月%d日")))

    def _init_knowledge_base(self):
        """初始化或加载本地向量知识库"""
        if os.path.exists(self.persist_dir):
            # 加载已有数据库
            self.vectorstore = Chroma(
                persist_directory=self.persist_dir, 
                embedding_function=self.embeddings
            )
            print("知识库加载成功。")
        else:
            # 构建新知识库的示例(首次运行)
            print("未找到现有知识库,请先运行 `build_knowledge_base()` 方法构建知识库。")
            # self.build_knowledge_base()

    def build_knowledge_base(self, data_paths: list):
        """
        构建向量知识库
        :param data_paths: 知识源文件路径列表(支持txt、html/网址)
        """
        documents = []
        for path in data_paths:
            if path.startswith("http"):
                loader = WebBaseLoader(path)
            else:
                loader = TextLoader(path, encoding='utf-8')
            loaded_docs = loader.load()
            documents.extend(loaded_docs)

        # 分割文本
        text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
        splits = text_splitter.split_documents(documents)
        
        # 构建向量库并持久化
        self.vectorstore = Chroma.from_documents(
            documents=splits, 
            embedding=self.embeddings, 
            persist_directory=self.persist_dir
        )
        print(f"知识库构建完成,共处理 {len(splits)} 个文本块。")

    def ask(self, question: str) -> str:
        """
        核心问答方法
        :param question: 乘客的自然语言问题
        :return: 智能体的回答
        """
        if self.vectorstore is None:
            return "抱歉,知识库未就绪,请稍后再试。"

        # 1. 从知识库中检索最相关的文档片段
        retriever = self.vectorstore.as_retriever(search_kwargs={"k": 3})
        
        # 2. 构建提示词模板
        prompt = ChatPromptTemplate.from_messages([
            ("system", self.system_prompt.content),
            ("human", """请基于以下上下文信息回答用户的问题。如果信息不足,请直接说明。
            
            上下文信息:
            {context}
            
            用户问题:{input}
            
            请用中文回答:""")
        ])
        
        # 3. 创建问答链
        question_answer_chain = create_stuff_documents_chain(self.llm, prompt)
        rag_chain = create_retrieval_chain(retriever, question_answer_chain)
        
        # 4. 执行调用
        response = rag_chain.invoke({"input": question})
        return response["answer"]

# 使用示例
if __name__ == "__main__":
    # 1. 初始化智能体 (需设置OPENAI_API_KEY环境变量或直接传入key)
    api_key = os.getenv("OPENAI_API_KEY")
    agent = MetroQAAgent(openai_api_key=api_key)

    # 2. (首次运行需构建知识库) 准备知识源,可以是本地文本文件或网页URL
    # knowledge_sources = [
    #     "./data/hangzhou_metro_schedule.txt",
    #     "./data/ticket_fare_policy.txt",
    #     "https://www.hzmetro.com/service_announcement.html"
    # ]
    # agent.build_knowledge_base(knowledge_sources)

    # 3. 进行问答测试
    questions = [
        "一号线从湘湖到火车东站要坐多久?",
        "周末的末班车是几点?",
        "老人坐地铁有什么优惠吗?",
        "我的手机掉在地铁上了怎么办?"
    ]

    for q in questions:
        print(f"乘客问: {q}")
        answer = agent.ask(q)
        print(f"智能体答: {answer}\n{'-'*50}")
关键组件说明:
  1. 大语言模型 (LLM):作为智能体的“大脑”,负责理解、推理和生成。

  2. 向量知识库 (ChromaDB):存储和管理地铁相关的结构化与非结构化知识,通过语义相似性进行检索。

  3. 检索增强生成 (RAG):核心架构。先将用户问题在知识库中检索出最相关的参考信息,再将“问题+参考信息”一同送给LLM生成答案,极大提高了答案的准确性和可靠性,避免了LLM的“幻觉”问题。

  4. 系统提示词 (System Prompt):精确定义了智能体的角色、职责和回答规范,是控制其行为的关键。

五、 总结与展望

智能体技术正在重塑地铁客服的形态,将其从成本中心转变为价值中心。通过实施上述智能问答和事务处理智能体,地铁公司可以:

  1. 立即获得收益:大幅降低人工成本,提升服务效率与可及性。

  2. 提升品牌形象:提供数字化、智能化的优质服务体验。

  3. 数据驱动优化:智能体积累的问询数据是优化运营、完善服务的宝贵资产。

未来展望:未来的智能体客服将更加“多模态”和“具身化”,例如通过AR眼镜为现场工作人员提供实时知识支持,或通过服务机器人进行实体交互。最终,智能体将与人深度融合,构建一个高效、温暖、无处不在的超级客服系统。

软件平台的开发代码和核心软件技术

好的,探讨构建地铁智能体系统所需的核心软件技术平台开发代码。这将不是一个简单的代码片段,而是一个完整的、可扩展的微服务架构技术蓝图。


第一部分:核心软件技术栈(2025年)

构建一个企业级智能体平台,远不止调用API那么简单。它需要一整套稳定、高效、可扩展的技术体系作为支撑。

技术层级 核心技术与选型 说明
① 智能体大脑层 DeepSeek-V3 / GLM-4 / Qwen 国产大模型底座。用于意图识别、对话管理、逻辑推理、代码生成。
② 框架与编排层 LangChain / LangGraph 智能体核心框架。用于组装工具调用、多步骤工作流(Multi-Agent Orchestration)。
AutoGen / CrewAI 多智能体协作框架。适用于复杂场景下多个智能体间的协同工作。
③ 计算与部署层 TensorRT-LLM / vLLM 高性能推理引擎。实现大模型的高吞吐、低延迟推理,支撑高并发。
Kubernetes (K8s) 容器编排。管理所有微服务和大模型推理容器的生命周期、扩缩容。
KubeEdge / OpenYurt 云边协同。将轻量级智能体能力下沉到边缘节点(如车站服务器),实现断网自治。
④ 数据与知识层 Chroma / Milvus / Weaviate 向量数据库。存储和快速检索非结构化知识(如政策文档、故障手册),实现RAG。
Elasticsearch 全文检索数据库。快速查询结构化和日志数据。
Redis 内存数据库。用作高速缓存(Cache)和会话(Session)存储,提升响应速度。
⑤ 消息与流层 Apache Kafka / RocketMQ 消息队列。处理高吞吐量的实时数据流(如视频分析结果、传感器告警),解耦系统组件。
MQTT 物联网协议。用于与海量IoT设备(传感器、摄像头、广播)进行轻量级通信。
⑥ 应用与集成层 FastAPI / Django Python Web框架。快速构建RESTful API供前端或其他系统调用。
gRPC 高性能RPC框架。用于微服务内部间的高性能通信。
Apache Airflow 任务调度。定期训练模型、更新知识库、执行批处理任务。

第二部分:平台开发代码(微服务架构示例)

下面我们以智能问答服务视频分析服务为例,展示其核心代码结构和实现。

1. 智能问答服务 (qa-service)

这是一个典型的基于RAG的微服务。

项目结构

text

复制

下载

qa-service/
├── app/
│   ├── __init__.py
│   ├── main.py              # FastAPI 应用入口
│   ├── api/                 # API 路由
│   │   └── endpoints.py     # /ask 端点
│   ├── core/                # 核心逻辑
│   │   ├── config.py        # 配置管理
│   │   └── agent.py         # 智能体核心类
│   ├── models/              # 数据模型
│   │   └── schemas.py       # Pydantic 模型定义
│   └── services/            # 外部服务调用
│       └── llm_service.py   # 封装LLM调用
├── knowledge/               # 知识库文档
├── Dockerfile
└── requirements.txt
核心代码文件

app/main.py (应用入口)

python

复制

下载

from fastapi import FastAPI
from app.api.endpoints import router as api_router
from app.core.config import settings

app = FastAPI(title="Metro QA Agent Service", version="1.0.0")
app.include_router(api_router, prefix="/api/v1")

@app.get("/health")
async def health_check():
    return {"status": "healthy", "model": settings.LLM_MODEL}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

app/core/agent.py (智能体核心类 - 强化版RAG)

python

复制

下载

import logging
from typing import List, Optional
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
from app.services.llm_service import LLMClient  # 自定义的LLM客户端
from app.core.config import settings

logger = logging.getLogger(__name__)

class MetroQAAgent:
    def __init__(self):
        self.llm_client = LLMClient()
        self.vectorstore = self._init_vector_db()
        self.retriever = self.vectorstore.as_retriever(
            search_type="similarity_score_threshold",
            search_kwargs={"k": 5, "score_threshold": 0.7}  # 设置相似度阈值,过滤低质量检索结果
        )
        self.prompt = self._create_qa_prompt()

    def _init_vector_db(self):
        """初始化向量数据库连接"""
        embeddings = OpenAIEmbeddings(
            model=settings.EMBEDDING_MODEL,
            openai_api_base=settings.LLM_API_BASE,
            openai_api_key=settings.LLM_API_KEY
        )
        return Chroma(
            persist_directory=settings.VECTOR_DB_PATH,
            embedding_function=embeddings
        )

    def _create_qa_prompt(self):
        """创建增强版的提示词模板,包含更多上下文和约束"""
        return ChatPromptTemplate.from_messages([
            ("system", """你是一名专业的杭州地铁客服助手“杭杭”。请严格遵循以下规则:
            1. 基于提供的<上下文>回答问题。如果上下文不包含答案,请明确说“根据现有资料,我无法确定”。
            2. 回答需简洁、准确、友好。优先使用列表和重点。
            3. 如果问题涉及投诉、紧急安全事件,请引导用户拨打人工客服热线:XXXX。
            4. 当前日期:{current_date}。回答末班车等问题时请特别注意时间有效性。
            5. 严禁编造信息。
            上下文:{context}"""),
            ("human", "{input}")
        ])

    async def aask(self, question: str, chat_history: Optional[List] = None) -> dict:
        """异步问答方法,支持多轮对话历史"""
        try:
            # 1. 检索增强:从向量库获取最相关上下文
            relevant_docs = await self.retriever.ainvoke(question)
            if not relevant_docs:
                return {"answer": "抱歉,知识库中没有找到相关信息。", "source_documents": []}

            # 2. 构建LLM输入
            document_chain = create_stuff_documents_chain(self.llm_client.get_llm(), self.prompt)
            retrieval_chain = create_retrieval_chain(self.retriever, document_chain)

            # 3. 调用LLM
            result = await retrieval_chain.ainvoke({
                "input": question,
                "current_date": "2025-09-07"  # 应从系统获取
            })
            
            return {
                "answer": result["answer"],
                "source_documents": [doc.metadata.get("source", "Unknown") for doc in relevant_docs] # 返回引用来源,增加可信度
            }

        except Exception as e:
            logger.error(f"QA Agent error: {e}")
            return {"answer": "系统暂时无法处理您的请求,请稍后再试。", "source_documents": []}

app/api/endpoints.py (API路由)

python

复制

下载

from fastapi import APIRouter, HTTPException
from app.models.schemas import QuestionRequest, QuestionResponse
from app.core.agent import MetroQAAgent
import asyncio

router = APIRouter()
agent = MetroQAAgent()  # 依赖注入更适合生产环境

@router.post("/ask", response_model=QuestionResponse)
async def ask_question(request: QuestionRequest):
    """
    核心问答API端点
    - **question**: 用户问题
    - **session_id**: (可选) 会话ID,用于维护多轮对话上下文
    """
    if not request.question.strip():
        raise HTTPException(status_code=400, detail="问题不能为空")
    
    try:
        # 异步处理请求,避免阻塞
        result = await agent.aask(request.question)
        return QuestionResponse(
            answer=result["answer"],
            sources=result["source_documents"],
            session_id=request.session_id
        )
    except asyncio.TimeoutError:
        raise HTTPException(status_code=504, detail="请求处理超时")
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"内部服务器错误: {str(e)}")

Dockerfile (容器化)

dockerfile

复制

下载

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]

2. 视频分析服务 (video-analytics-service)

这是一个处理实时视频流的服务,与智能体协同。

核心代码片段:与消息队列集成

python

复制

下载

# video_processor.py
import cv2
from ultralytics import YOLO
import json
import paho.mqtt.client as mqtt
from app.core.config import settings

class VideoStreamProcessor:
    def __init__(self):
        self.model = YOLO('yolov8s.pt')
        self.mqtt_client = self._init_mqtt()

    def _init_mqtt(self):
        client = mqtt.Client()
        client.connect(settings.MQTT_BROKER_HOST, settings.MQTT_BROKER_PORT, 60)
        client.on_connect = self._on_mqtt_connect
        return client

    def _on_mqtt_connect(self, client, userdata, flags, rc):
        print("Connected to MQTT Broker")
        # 订阅来自其他服务的控制命令
        client.subscribe("metro/video/control/#")

    def process_frame(self, frame, camera_id):
        results = self.model(frame, classes=0, verbose=False)  # 只检测人
        person_count = len(results[0].boxes) if results[0].boxes else 0

        # 计算密度逻辑 (简化)
        # ...

        # 将分析结果发布到MQTT主题,供其他服务(如广播智能体)消费
        alert_msg = {
            "camera_id": camera_id,
            "timestamp": time.time(),
            "person_count": person_count,
            "density_level": "high" if person_count > 30 else "normal"
        }
        self.mqtt_client.publish("metro/analytics/density", json.dumps(alert_msg))
        return person_count

# 在main函数中,会打开RTSP流,循环读取帧并调用process_frame

第三部分:平台的核心技术理念

  1. 微服务化 (Microservices):每个智能体能力(问答、视觉、语音、数据查询)都是一个独立的服务,通过API(REST/gRPC)和消息队列(Kafka/MQTT)通信。这允许技术栈异构(不同服务用最适合的语言开发)和独立扩缩容。

  2. 容器化与编排 (Docker & Kubernetes):每个服务都打包成Docker镜像,由K8s统一调度和管理。这提供了极致的弹性伸缩能力,例如在早高峰自动扩容“视频分析服务”的实例数量。

  3. 服务网格 (Service Mesh):在生产环境中,会使用Istio或Linkerd等服务网格来管理服务间的通信,实现高级的流量管理、安全策略和可观测性。

  4. 可观测性 (Observability):平台绝非黑盒。通过集成Prometheus(指标收集)、Grafana(仪表盘可视化)、Loki(日志聚合)和Jaeger(分布式追踪),运维团队可以清晰地监控每一个智能体的健康状态、性能指标和调用链。

  5. MLOps流水线:知识库的更新、模型的再训练不是手动过程,而是通过Apache AirflowKubeflow Pipelines构建的自动化流水线完成,确保智能体的“知识”和“能力”能够持续迭代优化。

总结:开发这样一个智能体平台,其核心软件技术是现代云原生、AI工程化和传统软件工程的最佳实践融合。核心代码不仅仅是算法模型,更是将这些技术有机整合起来的、具备高可用性、高可扩展性和可维护性的分布式系统代码。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐