不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • Langchain
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • Langchain
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • 前置知识

  • PyTorch

  • Langchain

    • 01.Langchain基础
    • 02.数据检索增强RAG
    • 03.文档向量化原理
    • Agent智能体
    • 05.快递Agent智能体
      • 01.Prompt 模板(定制)
        • 0、Prompt 模板定制
        • 1、实现举例
      • 02.行业工具 Tools(定制)
      • 03.快递行业知识库(RAG)
        • 0、RAG 七阶段
        • 1、文档预处理阶段
        • 2、实时查询
      • 04.Memory 模块(推荐定制)
      • 05.Agent/AgentExecutor(可选)
    • 100.Agent智能体核心梳理
    • 105.Agent智能体梳理
    • 200.AI Agent核心概念
  • 大模型
  • Langchain
xiaonaiqiang
2025-06-04
目录

05.快递Agent智能体

模块 是否必须 是否定制 说明
Prompt 模板 ✅ 是 ✅ 强定制 明确角色与任务
行业 Tools ✅ 是 ✅ 强定制 快递相关工具API接口
知识库 RAG ✅ 是 ✅ 强定制 客服、赔付、网点知识
Memory 记忆 ✅ 是 ✅ 推荐定制 多轮上下文
Agent 策略 ✅ 是 ✅ 可定制 复杂任务分解与串联
AgentExecutor 可选 ✅ 可定制 多任务执行调度

# 01.Prompt 模板(定制)

  • 目的:告诉 LLM 你是快递行业的智能体,擅长查询物流、价格、投诉等业务。
  • 定制点:
    • 角色定义(如快递客服、物流调度员、网点助手)
    • 工具列表说明(有哪些可调用能力)
    • 行业术语提示(避免LLM误解行业术语,如“中转、逆向单、电子面单”)

# 0、Prompt 模板定制

  • 快递行业 Prompt 定制 Checklist

    • 要素 是否需要 建议
      角色身份清晰 ✅ 必须 让 LLM “像客服”而不是像搜索引擎
      工具列表嵌入 ✅ 必须 让 LLM 知道可以调用什么,怎么调用
      行业规则写入 ✅ 必须 防幻觉、防错误行为
      Few-shot 示例 ✅ 强烈推荐 引导思维风格
      动态填充模板 ✅ 推荐 使用 prompt 模板 + memory 实现 context-aware
  • ① 角色身份清晰(明确 LLM 的身份和职责范围)

    • 你是“智递小助手”,是某快递公司的在线智能客服助手,擅长处理以下任务
      1. 快递单号物流状态查询
      2. 快递价格预估
      3. 投诉问题引导
      4. 附近网点查询
      5. 丢件理赔流程说明
      
      1
      2
      3
      4
      5
      6
  • ② 工具功能描述(向模型说明有哪些工具,如何使用)

    • 可参考 LangChain 中的 tool.description 自动嵌入 Prompt

    • 1. query_tracking
      功能:根据快递单号查询物流状态
      输入:{"tracking_no": "快递单号"}
      输出:返回当前物流状态及时间轨迹
      
      2. estimate_price
      功能:根据起点、终点、省市重量查询运费
      输入:{"origin": "...", "destination": "...", "weight": 1.0}
      
      3. knowledge_search
      功能:搜索公司快递服务相关问答知识库
      输入:{"query": "查询内容"}
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
  • ③ 对话示范(Few-Shot 示例)

    • 举几个典型问答,让模型学习行为风格和工具调用思路

    • 用户:我查一下这个单号 123456 的物流状态
      助手:[使用工具 query_tracking, 输入 {"tracking_no": "123456"}]
      结果:已签收,签收人张三,签收时间为6月3日10:15
      助手:您的快递已于6月3日10:15签收,签收人为张三。
      
      用户:我要投诉,说我快递丢了
      助手:[使用工具 knowledge_search, 输入 {"query": "快递丢失如何投诉"}]
      结果:丢件需提供寄件凭证,申请时间不得超过7日,联系人工客服或提交表单
      助手:您好,您可以通过【提交投诉表单】发起丢件投诉,请确保保留寄件凭证。
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
  • ④ 业务约束说明(行业规范注入)

    • 让模型遵守企业规则,避免幻觉或出错

    • 规则:
      1. 未签收状态的快递不允许发起投诉流程;
      2. 对于物流状态异常,优先建议用户联系人工客服;
      3. 快递价格为预估值,仅供参考;
      4. 投诉流程需提供寄件凭证与签收记录;
      
      1
      2
      3
      4
      5

# 1、实现举例

from langchain.agents import Tool, AgentType, initialize_agent
from langchain.chat_models import ChatOpenAI
from langchain.prompts import MessagesPlaceholder
from langchain.memory import ConversationBufferMemory
from langchain.schema import SystemMessage, HumanMessage

# 模拟工具函数(返回固定值)
def query_tracking_func(tracking_no: str) -> str:
    return f"您的快递单号 {tracking_no} 已于 6月3日10:15 签收,签收人为张三。"

def estimate_price_func(origin: str, destination: str, weight: float) -> str:
    return f"从 {origin} 发往 {destination},重量 {weight}kg 的快递预估价格为 20 元。"

def knowledge_search_func(query: str) -> str:
    return "丢件需提供寄件凭证,申请时间不得超过7日,联系人工客服或提交表单。"

# 注册工具
tools = [
    Tool(
        name="query_tracking",
        func=lambda x: query_tracking_func(x.get("tracking_no", "未知")),
        description="根据快递单号查询物流状态,输入示例:{\"tracking_no\": \"123456\"}"
    ),
    Tool(
        name="estimate_price",
        func=lambda x: estimate_price_func(x.get("origin", ""), x.get("destination", ""), x.get("weight", 1.0)),
        description="运费预估,输入示例:{\"origin\": \"上海\", \"destination\": \"广州\", \"weight\": 2.0}"
    ),
    Tool(
        name="knowledge_search",
        func=lambda x: knowledge_search_func(x.get("query", "")),
        description="从快递服务知识库中检索答案,输入示例:{\"query\": \"快递丢了怎么赔偿\"}"
    )
]

# Prompt 模板内容:系统身份、业务规则、示例行为
system_message = SystemMessage(content="""
你是“智递小助手”,是某快递公司的智能客服助手,擅长以下任务:
1. 查询物流状态
2. 运费预估
3. 投诉流程说明
4. 附近网点查询
5. 丢件理赔引导

你必须遵守以下规则:
1. 未签收状态的快递不允许发起投诉流程;
2. 对于物流异常,请建议用户联系人工客服;
3. 运费为预估值,仅供参考;
4. 投诉需提供寄件凭证与签收记录;

使用工具完成任务,工具描述已嵌入,可直接调用。
示例如下:

用户:查一下123456的物流
助手:[使用工具 query_tracking, 输入 {tracking_no: 123456}]
结果:已签收,签收人为张三
助手:您的快递已于6月3日10:15签收,签收人为张三。

用户:我要投诉,说快递丢了
助手:[使用工具 knowledge_search, 输入 {"query": "快递丢了如何投诉"}]
结果:丢件需提供寄件凭证,申请时间不得超过7日
助手:您好,请保留寄件凭证,可通过【投诉表单】发起理赔流程。
""")

# 创建 memory
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)

# 创建 Agent
llm = ChatOpenAI(
    openai_api_key="xxx",
    openai_api_base="https://api.deepseek.com/v1",  # 修改为你选的厂商地址
    model="deepseek-chat",  # 改成厂商支持的模型名
)

agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.OPENAI_FUNCTIONS,  # 可换为 zero-shot-react-description 等
    memory=memory,
    verbose=True,
    agent_kwargs={
        "system_message": system_message,
        "extra_prompt_messages": [MessagesPlaceholder(variable_name="chat_history")]
    }
)

# 示例调用
agent.run("我想查一下快递单号123456的物流状态")
# agent.run("我要投诉,我的快递丢了")
# agent.run("从上海到广州,2公斤的快递多少钱")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

# 02.行业工具 Tools(定制)

  • Tool 是一种 函数调用能力的封装,让 LLM 在 Reasoning 中可以“决定调用一个函数”

  • 并知道它的名字、要输入什么、返回什么

    • Tool(
          # name:唯一标识符(LLM 会用这个名称)
          name="query_tracking",
          # func:业务函数绑定(真正执行的功能逻辑)
          func=lambda x: query_tracking_func(x.get("tracking_no", "未知")),
          # description:提示用的“自然语言接口文档”
          description="根据快递单号查询物流状态,输入示例:{\"tracking_no\": \"123456\"}"
      )
      
      1
      2
      3
      4
      5
      6
      7
      8
  • 关键点

    • 元素 是否必要 建议
      ✅ 明确功能 必须 “做什么”
      ✅ 输入格式 必须 结构化 JSON 示例
      ✅ 输入字段解释 推荐 “字段含义”
      ✅ 输出说明 推荐 模型能理解返回格式
  • 快递行业常用 Tool 列表 + 建议设计

    • Tool 名称 功能说明 输入参数 返回内容
      query_tracking 查单号物流状态 tracking_no 当前物流状态
      estimate_price 运费预估 origin, destination, weight 预估价格
      search_branch 查附近网点 city, district 网点名称、地址、电话
      report_lost 丢件投诉登记 tracking_no, reason 投诉编号或人工指引
      get_claim_policy 理赔流程说明 claim_type 理赔规则说明
      faq_search 知识库问答(如“丢件流程”) query FAQ 答案

# 03.快递行业知识库(RAG)

详细举例说明 对应快递行业的智能体agent 快递行业知识库(RAG),需要哪些技术,要定制到什么程度才算实现工业需求

写一个完整的 LangChain + BGE + FAISS 快递知识库 demo
提供 FAQ + chunk + 向量化 + 检索 + 模型拼接全流程代码
对接你已有知识文档,帮你构建上线的知识库 Agent
1
2
3
4
5

# 0、RAG 七阶段

阶段 工具/框架建议 工业要求
1.文档解析 unstructured、pdfplumber、OCR 支持结构+非结构+图像
2.分块策略 RecursiveSplitter 粒度合适+上下文保持
3.向量模型 BGE、DeepSeek 中文理解强、商用兼容
4.向量存储 Milvus、Qdrant 快速、高并发、支持过滤+扩展
5.检索器 LangChain Retriever Top-k + Metadata + filter 支持
6.模型接入 DeepSeek、ChatGLM、Qwen 商业模型支持上下文注入
7.增强模块 审计、权限、多模态、回流系统 企业级运维、上线运行可控
  • 七阶段可以规划成四个模块

    阶段 模块组合 是否可合并 上线建议
    文档预处理 解析 + 分块 + 嵌入 ✅ 合并为异步流水线 先上线
    实时查询 向量检索 + Prompt + LLM生成 ✅ 合并为链 核心上线模块
    增强模块 权限、多模态、日志、query增强 ❌ 需拆分 迭代阶段
    回流更新 OCR识别 → 嵌入 → 更新索引 ✅ 合并任务 长期维护

一、文档解析

  • 常见文档类型(快递企业文档)

    • 类型 举例
      PDF 快递服务条款、理赔政策、价格手册
      Word/Excel 内部SOP、价格表、培训资料
      HTML/网页 官网FAQ、客服中心
      图像+OCR 拍照上传的单据(客服问题截图、投投诉截图等)
      问答结构数据 已有FAQ、历史客服对话(.json/.csv/.db)
  • 技术工具

    • PDF/Word/Excel:unstructured, pdfplumber, docx, pandas
    • HTML:BeautifulSoup, Playwright(动态页面抓取)
    • OCR 图像文档:PaddleOCR, Tesseract, Tencent Cloud OCR

二、分块策略

  • 大文档 LLM 无法一次处理;RAG 检索更依赖「粒度适中」的知识片段

  • 分块策略:

    • 按标题层级切(结构化文档)

    • 按固定长度+重叠切(如每 300 tokens,重叠 50)

    • 加入 metadata:文档名、段落标题、页码、来源类型

  • 技术工具

    • LangChain DocumentLoader + RecursiveCharacterTextSplitter

    • 或者 unstructured 的结构化分块能力

三、向量模型

  • 嵌入模型推荐

    • 推荐:LangChain + HuggingFaceEmbeddings 可直接集成上述模型

    • 模型 特点 工业推荐理由
      bge-large-zh 中文语义检索 SoTA 推荐指数 ⭐⭐⭐⭐⭐
      text2vec-large 中文问答场景表现好 开源商用
      deepseek-embedding 兼容英文+中文,速度快 深度搜索类公司出品
      OpenAI text-embedding-3-small 精度高但需翻墙 适合国际部署

四、向量存储

  • 工业推荐:Milvus + Docker/K8s 或 Qdrant + REST

    • 向量库 优点 推荐场景
      FAISS 本地测试快、轻量开源 POC、小规模项目
      Milvus 云原生、亿级别向量、高性能 中大型项目、云部署
      Weaviate 含 REST API、支持 RAG 模式 快速部署、低代码
      Qdrant 支持 metadata、高速检索 多条件检索场景、Docker 轻部署

五、检索器

  • 检索方式:

    • 基于语义 Top-k 最近邻

    • 过滤检索(按 region、type、topic)

    • Hybrid(关键词+向量混合)

  • 检索策略:

    • 用户查询 → 嵌入 → 向量搜索 → 返回前 K 个相关内容

    • 多轮时结合 memory 和 query rewriting

六、模型接入 Prompt 构造 + 生成回复(对接 LLM)

  • Prompt 模板

    • 你是“智递助手”,请结合以下信息回答用户问题:
      {retrieved_docs}
      
      用户问题:{user_query}
      
      1
      2
      3
      4
  • 模型:ChatOpenAI, DeepSeek, glm-4, qwen, chatglm3

七、增强能力(企业级关键点)

能力 描述
自动知识更新 OCR + 定期抓取 PDF,重新嵌入
多模态支持 图像投诉截图 → OCR → 文本搜索
搜索分析审计 每次召回内容 & 模型回答存入日志
安全控制 特定文档分权限、敏感信息脱敏

# 1、文档预处理阶段

  • 文档解析 + 分块 + 向量化 = 一个文档处理流水线

  • LangChain or LLamaIndex 文档加载 + 分块

  • Huggingface + BGE 向量化

  • Milvus/Qdrant 向量存储

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings

# 1. 模拟一个 PDF 提取后的文本
document_text = """
尊敬的用户,您的快递单号为 123456789 的包裹已于 2024年6月1日 10:00 从上海仓库发出,预计3天内送达广州。
如果有疑问,请联系客服电话 400-123-4567。
"""

# 2. 文本分块
splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20)
chunks = splitter.split_text(document_text)

# 3. 向量化处理(使用本地 MiniLM)
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = FAISS.from_texts(chunks, embedding=embeddings)

# 4. 模拟用户问题并检索
query = "我在查快递123456789现在在哪"
docs = vectorstore.similarity_search(query, k=1)

# 打印结果
print("🔍 检索结果:")
print(docs[0].page_content)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 2、实时查询

  • 用户查询 ➜ 向量检索器 + 模型生成
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.chat_models import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import RetrievalQA

# Step 1: 模拟 PDF 文本内容
document_text = """
尊敬的用户,您的快递单号为 123456789 的包裹已于 2024年6月1日 10:00 从上海仓库发出,
预计3天内送达广州。运输途中如有问题,请联系客服电话 400-123-4567。
"""

# Step 2: 文本分块
splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20)
chunks = splitter.split_text(document_text)

# Step 3: 构建向量库
embedding = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = FAISS.from_texts(chunks, embedding=embedding)

# Step 4: 模拟用户查询
query = "我的快递123456789现在到哪了?"

# Step 5: 向量检索 + 模型回答
retriever = vectorstore.as_retriever()

# 使用 DeepSeek 模型(需替换成你实际 key)
llm = ChatOpenAI(
    base_url="https://api.deepseek.com/v1",
    api_key="your-deepseek-key",
    model="deepseek-chat",
    temperature=0
)

# Prompt 模板可选扩展,此处使用 RetrievalQA 默认链
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=retriever,
    return_source_documents=True
)

# Step 6: 执行查询
result = qa_chain.invoke({"query": query})
print("📦 答案:", result["result"])
print("📚 来源片段:", result["source_documents"][0].page_content)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

# 04.Memory 模块(推荐定制)

  • 作用:保持对话上下文、跟踪用户意图、记录历史查询或投诉
  • 推荐用法:
    • 使用 ConversationBufferMemory 或 SummaryMemory
    • 存储对话摘要 + 工具调用记录(如用户刚查过物流状态)
    • 为下一轮问答提供上下文(如“你刚才说物流到了哪里?”)

# 05.Agent/AgentExecutor(可选)

  • 对于业务流程复杂(如多轮投诉流程或多工具调用联动)的情况,建议定制:

  • 用户说“查一下我的快递,顺便看下这单寄丢了怎么办”

  • Agent 要先调用 query_tracking,再结合状态判断是否丢失,再查 赔偿规则(RAG),最后建议投诉 submit_complaint

这就需要 多工具串行调用+条件逻辑判断,Agent 逻辑不能简单依赖 ReAct,需要扩展 Agent 策略或使用 Planner+Executor 架构。

Agent智能体
100.Agent智能体核心梳理

← Agent智能体 100.Agent智能体核心梳理→

最近更新
01
200.AI Agent核心概念
06-04
02
105.Agent智能体梳理
06-04
03
06.Mage平台
05-30
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式