大模型应用开发工程师培训材料#

面向对象:备考"AI大模型应用开发工程师"认证的学员 材料特点:理论+实操,覆盖大纲全部11个模块,每章包含知识要点、代码示例和考试要点 更新日期:2026年7月


目录#

  1. 大模型前沿技术发展与实践
  2. 大模型部署与应用
  3. TokenHub
  4. RAG原理与企业知识库建设基础
  5. Dify进阶Agent系统开发
  6. VibeCoding工具使用
  7. 大模型开发工具链实战(LangChain)
  8. 大模型开发工具链实战(LangGraph与DeepAgent)
  9. MCP与Skills开发实战
  10. 企业级数字员工开发基础实操
  11. 进阶实操-多智能体数字员工运维场景

第一章 大模型前沿技术发展与实践#

1.1 大模型发展历程与里程碑#

1.1.1 技术演进时间线#

时间里程碑事件意义
2017Google发表Transformer论文奠定大模型架构基础
2018OpenAI发布GPT-1预训练+微调范式确立
2020GPT-3发布(1750亿参数)规模化突破,涌现能力显现
2022ChatGPT发布生成式AI大众化,全球引爆
2023GPT-4发布多模态能力,推理显著提升
2024Claude 3、Gemini 1.5发布超长上下文(200K-1M token)
2025DeepSeek-R1、Claude Code发布推理模型和Agent范式成熟
2026GPT-5.6、Claude Sonnet 5发布开源追平闭源,Agent规模化商用

1.1.2 范式跃迁:从ChatBot到Agent#

阶段核心特征代表产品用户日Token消耗
ChatBot(2023)你问我答,知识库ChatGPT10万-100万
Copilot(2024)代码补全,单文件辅助GitHub Copilot100万-500万
Agent(2025-2026)自主规划,全链路执行Claude Code、OpenClaw1000万-1亿

1.1.3 成本革命#

GPT-4级别的模型每百万Token价格从2022年末的20美元跌至2025年12月的0.40美元,36个月内下降至五十分之一。开源模型成本更低,DeepSeek V4在特定任务上成本仅为闭源竞品的1/40。

1.2 主流大模型对比#

1.2.1 国外主流模型#

模型开发者核心优势参数规模上下文窗口
GPT-5.6OpenAI多模态集成,推理最强未公开128K-2M
Claude Sonnet 5Anthropic安全对齐,编程能力突出未公开200K
Gemini 3.1 ProGoogle原生多模态,超长上下文未公开1M-2M
Llama 4Meta开源旗舰,可本地部署405B128K
Grok 4.5xAI实时信息,社交媒体整合未公开128K

1.2.2 国内主流模型#

模型开发者核心优势开源情况
DeepSeek V4深度求索极致性价比,推理能力强完全开源
通义千问 Qwen3阿里巴巴全尺寸开源,多模态开源(7B-110B)
混元 Hy3腾讯中文理解强,企业级部署部分开源
文心 ERNIE 4.5百度知识增强,中文生态部分开源
GLM-5智谱AI学术背景,Agent能力强开源
Kimi K2月之暗面超长文本(200万字)闭源

1.2.3 开源vs闭源格局#

2026年全球开源模型市场份额已从2024年的4.5%飙升至46%。DeepSeek V4 Flash以18.4T Tokens的月调用量登顶全球开源模型第一。开源模型在多数基准测试中已追平GPT-4水平。

1.3 推理模型与思维链#

1.3.1 什么是推理模型#

推理模型(Reasoning Model)在生成回答前先进行内部"思考",通过思维链(Chain-of-Thought)逐步推理,显著提升数学、编程、逻辑等复杂任务的正确率。

类型代表模型特点适用场景
快速模型GPT-4o、Claude Haiku直接输出,速度快日常对话、简单任务
推理模型DeepSeek-R1、o3内部推理链,准确率高数学、编程、逻辑推理
混合模型Claude Sonnet 5可切换思考模式通用场景

1.3.2 思维链提示技术#

# 标准思维链提示
问题:一个电信基站每天消耗200度电,电费每度0.8元。升级AI节能模式后可节省30%电力。
请逐步计算:
1. 升级前每月电费
2. 升级后每月电费  
3. 每年节省金额
请展示完整计算过程。

# ReAct模式(推理+行动)
Thought: 我需要查询数据...
Action: web_search("2026年基站平均功耗")
Observation: 查询结果是...
Thought: 基于结果,我可以计算...
Final Answer: 最终回答

1.4 多模态大模型#

1.4.1 多模态能力矩阵#

能力输入输出代表应用
文本理解与生成文本文本对话、写作、翻译
视觉理解图像文本描述图像描述、OCR、图表分析
图像生成文本/图像图像AI绘图、风格转换
语音交互音频文本/音频语音助手、会议转写
视频理解视频文本视频摘要、内容审核
跨模态生成文本图+文+音多模态内容创作

1.4.2 实践:多模态API调用#

import openai

client = openai.OpenAI(api_key="your-api-key")

# 文本对话
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "解释什么是Transformer架构"}]
)
print(response.choices[0].message.content)

# 图像理解
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "分析这张网络架构图"},
            {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}
        ]
    }]
)
print(response.choices[0].message.content)

考试要点#

  • 理解大模型发展的三个范式阶段(ChatBot→Copilot→Agent)
  • 掌握国内外主流模型的定位和核心优势
  • 理解推理模型与快速模型的区别
  • 掌握思维链(CoT)和ReAct模式的概念
  • 了解多模态大模型的能力边界

第二章 大模型部署与应用#

2.1 部署方案分类#

2.1.1 部署方式对比#

部署方式代表工具适合场景优点缺点
云端APIOpenAI/百度/阿里快速验证、低频使用零部署成本,弹性扩缩数据出域,按量付费
本地轻量部署Ollama、LM Studio个人开发、隐私场景数据不出域,零费用受限于本地硬件
本地高性能部署vLLM、SGLang团队/企业级API服务高并发,OpenAI兼容需GPU服务器
端侧部署llama.cpp移动设备、嵌入式极致轻量模型规模受限
私有云部署Kubernetes+vLLM大型企业可控可扩展运维成本高

2.2 Ollama本地部署#

2.2.1 安装与使用#

# Windows安装(下载安装包或winget)
winget install Ollama.Ollama

# 拉取模型
ollama pull qwen2.5:7b
ollama pull deepseek-r1:7b
ollama pull llama3.1:8b

# 运行模型
ollama run qwen2.5:7b

# 查看已安装模型
ollama list

# 启动API服务(默认11434端口)
ollama serve

2.2.2 Ollama API调用#

import requests

# 调用Ollama的OpenAI兼容API
response = requests.post(
    "http://localhost:11434/v1/chat/completions",
    json={
        "model": "qwen2.5:7b",
        "messages": [{"role": "user", "content": "什么是5G-A?"}],
        "temperature": 0.7
    }
)
print(response.json()["choices"][0]["message"]["content"])

2.2.3 自定义Modelfile#

# Modelfile - 自定义模型配置
FROM qwen2.5:7b

# 系统提示词
SYSTEM """
你是江苏电信的智能助手,专门回答电信业务相关问题。
回答要准确、简洁、专业。
"""

# 参数设置
PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
# 构建自定义模型
ollama create telecom-bot -f Modelfile
# 运行
ollama run telecom-bot

2.3 LM Studio图形化部署#

2.3.1 核心功能#

功能说明
模型市场内置Hugging Face模型搜索和下载
对话界面类ChatGPT的图形界面
API服务一键启动OpenAI兼容API
模型量化支持GGUF格式自动量化
多GPU支持支持GPU加速推理

2.3.2 操作步骤#

  1. 下载安装LM Studio → 搜索模型(如Qwen2.5-7B-Instruct-GGUF)→ 选择量化版本(推荐Q4_K_M)
  2. 下载完成后在Chat页面加载模型 → 开始对话
  3. 启动API服务:Developer → Start Server → 端口默认1234

2.4 vLLM企业级部署#

2.4.1 vLLM核心技术#

技术说明
PagedAttention分页注意力机制,减少KV Cache内存碎片
Continuous Batching动态批处理,提高GPU利用率
Tensor Parallelism张量并行,多GPU协同
量化推理支持AWQ、GPTQ等量化方案
OpenAI兼容API直接替换OpenAI API

2.4.2 vLLM部署实战#

# 安装vLLM
pip install vllm

# 启动API服务(单GPU)
python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen2.5-7B-Instruct \
  --port 8000 \
  --max-model-len 32768

# 多GPU张量并行
python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen2.5-72B-Instruct \
  --tensor-parallel-size 4 \
  --port 8000
# 使用vLLM的Python SDK
from vllm import LLM, SamplingParams

llm = LLM(model="Qwen/Qwen2.5-7B-Instruct")
sampling = SamplingParams(temperature=0.7, max_tokens=500)

prompts = ["解释什么是RAG技术", "用Python写一个快速排序"]
outputs = llm.generate(prompts, sampling)
for output in outputs:
    print(output.outputs[0].text)

2.5 模型量化技术#

2.5.1 量化方案对比#

量化方法精度损失内存节省代表格式适用场景
FP16基准1x原始服务器推理
INT8~1%2xGPTQ, AWQ生产部署
INT4 (Q4)~2-3%4xGGUF Q4_K_M本地部署
INT4 (Q4_0)~3-5%4x+GGUF Q4_0端侧设备

2.5.2 选择建议#

  • 服务器/A100/H100:FP16或INT8,精度优先
  • 消费级GPU(RTX 4090):INT4(AWQ/GPTQ),兼顾速度和精度
  • CPU/边缘设备:GGUF Q4_K_M,最大化压缩

考试要点#

  • 掌握Ollama的安装、模型拉取、API调用
  • 理解vLLM的PagedAttention和Continuous Batching原理
  • 掌握模型量化的概念和常见格式(GGUF、AWQ、GPTQ)
  • 理解不同部署方案的适用场景
  • 能编写Modelfile自定义模型配置

第三章 TokenHub#

3.1 TokenHub概述#

3.1.1 什么是TokenHub#

TokenHub是腾讯云推出的一站式大模型API聚合网关平台。它将多家厂商的大模型(腾讯混元、DeepSeek、智谱GLM、Kimi、MiniMax、通义千问Qwen等)聚合在统一接口下,用户使用一个API Key即可访问所有模型。

3.1.2 核心价值#

价值点说明
统一接入一个API Key访问所有主流模型,无需分别申请
协议兼容同时支持OpenAI Chat Completions API和Anthropic Messages API
成本管控Token级精确计量,支持分账和预算控制
模型切换无需改代码,修改model参数即可切换模型
负载均衡自动故障转移,保障服务可用性

3.1.3 从MaaS到TokenHub的演进#

腾讯云从传统的MaaS(Model as a Service)模式升级为TokenHub,核心变化是从"卖模型"转向"卖Token+工程化能力"。企业比拼的重点从单纯模型能力转向工程化能力——工具调用、上下文管理、工作流设计。

3.2 TokenHub使用方法#

3.2.1 获取API Key#

  1. 注册腾讯云账号并开通TokenHub服务
  2. 进入TokenHub控制台 → API Key管理页面
  3. 点击"创建API Key" → 获取密钥

3.2.2 API调用实践#

import openai

# 使用TokenHub作为网关
client = openai.OpenAI(
    api_key="your-tokenhub-api-key",
    base_url="https://tokenhub.tencentmaas.com/v1"
)

# 调用混元模型
response = client.chat.completions.create(
    model="hy3",  # 腾讯混元Hy3
    messages=[{"role": "user", "content": "解释什么是大模型Agent"}],
    temperature=0.7
)
print(response.choices[0].message.content)

# 切换到DeepSeek模型(只需改model参数)
response = client.chat.completions.create(
    model="deepseek-v3",  # DeepSeek V3
    messages=[{"role": "user", "content": "解释什么是大模型Agent"}],
)
print(response.choices[0].message.content)

# 切换到通义千问
response = client.chat.completions.create(
    model="qwen-max",
    messages=[{"role": "user", "content": "解释什么是大模型Agent"}],
)
print(response.choices[0].message.content)

3.2.3 Anthropic协议兼容#

import anthropic

# 使用Anthropic SDK通过TokenHub调用
client = anthropic.Anthropic(
    api_key="your-tokenhub-api-key",
    base_url="https://tokenhub.tencentmaas.com/anthropic"
)

message = client.messages.create(
    model="hy3",
    max_tokens=1024,
    messages=[{"role": "user", "content": "用Python写一个二分查找"}]
)
print(message.content[0].text)

3.2.4 接入Claude Code#

TokenHub支持将混元等模型接入Claude Code使用:

# 配置环境变量
export ANTHROPIC_API_KEY="your-tokenhub-api-key"
export ANTHROPIC_BASE_URL="https://tokenhub.tencentmaas.com/anthropic"

# 启动Claude Code,使用TokenHub网关的模型
claude --model hy3

3.3 Token管理与成本优化#

3.3.1 Token计量原理#

概念说明示例
Input Token输入消耗的Token用户问题+上下文+系统提示
Output Token输出消耗的Token模型生成的回答
计费单位通常每百万Token如¥1/百万Input Token
上下文累积多轮对话中历史消息累加第5轮对话包含前4轮所有内容

3.3.2 成本优化策略#

策略方法节省效果
模型分级简单任务用小模型,复杂任务用大模型50-80%
上下文裁剪截断或摘要历史对话30-60%
缓存复用对相同问题缓存回答视命中率而定
批量处理使用Batch API(半价)50%
停用词优化精简系统提示词10-20%

3.3.3 Token用量监控#

# 监控每次调用的Token使用量
response = client.chat.completions.create(
    model="deepseek-v3",
    messages=[{"role": "user", "content": "你好"}]
)

# 查看Token使用统计
usage = response.usage
print(f"输入Token: {usage.prompt_tokens}")
print(f"输出Token: {usage.completion_tokens}")
print(f"总Token: {usage.total_tokens}")

考试要点#

  • 理解TokenHub作为API聚合网关的核心价值
  • 掌握通过TokenHub调用不同模型的方法(仅改model参数)
  • 理解Token计量原理(输入Token + 输出Token)
  • 掌握成本优化的常见策略
  • 了解TokenHub同时兼容OpenAI和Anthropic两种API协议

第四章 RAG原理与企业知识库建设基础#

4.1 RAG技术原理#

4.1.1 什么是RAG#

RAG(Retrieval-Augmented Generation,检索增强生成)是一种让大语言模型"先查阅文档再作答"的技术。通过将外部知识检索与LLM生成相结合,突破模型训练数据的局限,生成更准确、更可靠的回答。

4.1.2 RAG工作流程#

用户提问
    │
    ▼
┌─────────────┐     ┌─────────────────┐
│  问题向量化   │────→│  向量数据库检索   │
│ (Embedding)  │     │ (相似度搜索Top-K) │
└─────────────┘     └────────┬────────┘
                             │
                     检索到相关文档块
                             │
                             ▼
┌─────────────────────────────────────┐
│        构造增强Prompt                │
│  "基于以下参考资料回答问题:          │
│   [检索到的文档块]                   │
│   问题:[用户问题]"                   │
└─────────────────────────────────────┘
                             │
                             ▼
                    ┌─────────────┐
                    │  LLM生成回答 │
                    └─────────────┘

4.1.3 RAG的演进路线#

阶段名称特点局限
Naive RAG朴素RAG切片→向量化→检索→生成检索质量不稳定
Advanced RAG高级RAG增加查询重写、重排序、混合检索架构复杂
Modular RAG模块化RAG检索模块可插拔,支持多路召回工程门槛高
Agentic RAG智能体RAGAgent自主决策检索策略成本较高
GraphRAG图增强RAG构建知识图谱,跨文档关联构建成本高

4.2 Embedding与向量数据库#

4.2.1 Embedding模型#

Embedding(嵌入)将文本转换为高维向量,使语义相近的文本在向量空间中距离更近。

from langchain_openai import OpenAIEmbeddings

# 使用Embedding模型
embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",
    api_key="your-api-key"
)

# 将文本转为向量
vector = embeddings.embed_query("5G-A技术有什么特点?")
print(f"向量维度: {len(vector)}")  # 通常1536维

# 批量嵌入
texts = ["5G-A介绍", "6G展望", "光纤通信"]
vectors = embeddings.embed_documents(texts)

4.2.2 主流向量数据库对比#

数据库类型优点缺点适用场景
Chroma轻量级安装简单,Python原生不适合大规模原型开发
FAISSMeta开源,速度快无持久化,无API研究实验
Milvus分布式支持亿级向量,高可用部署复杂企业生产
QdrantRust高性能,支持过滤生态较小中型项目
Pinecone云服务全托管,零运维按量付费,数据出境快速上线
Weaviate全功能内置多模态,GraphQL资源占用大复杂场景

4.2.3 Chroma向量库实践#

import chromadb

# 创建Chroma客户端
client = chromadb.PersistentClient(path="./vector_db")

# 创建集合
collection = client.create_collection(
    name="telecom_kb",
    metadata={"hnsw:space": "cosine"}  # 使用余弦相似度
)

# 添加文档
collection.add(
    documents=[
        "5G-A是5G的增强版,下行峰值速率可达10Gbps",
        "5G-A新增了通感一体能力,可实现低空通信",
        "千兆宽带套餐月费128元,包含500分钟通话"
    ],
    metadatas=[
        {"source": "5ga-brochure.pdf", "page": 1},
        {"source": "5ga-brochure.pdf", "page": 3},
        {"source": "broadband-pricing.xlsx", "page": 1}
    ],
    ids=["doc1", "doc2", "doc3"]
)

# 查询
results = collection.query(
    query_texts=["5G-A的速率是多少"],
    n_results=2
)
print(results["documents"])

4.3 文档处理与分块策略#

4.3.1 文档加载#

from langchain_community.document_loaders import (
    PyPDFLoader, TextLoader, Docx2txtLoader, CSVLoader
)

# 加载PDF
pdf_loader = PyPDFLoader("product_manual.pdf")
pdf_docs = pdf_loader.load()

# 加载Word
docx_loader = Docx2txtLoader("report.docx")
docx_docs = docx_loader.load()

# 加载CSV
csv_loader = CSVLoader("data.csv")
csv_docs = csv_loader.load()

# 合并所有文档
all_docs = pdf_docs + docx_docs + csv_docs
print(f"总文档数: {len(all_docs)}")

4.3.2 文本分块策略#

策略说明适用场景
固定长度按字符数切分通用场景
递归字符按段落→句子→字符层级切分大多数文档
语义分块按语义边界切分高质量要求
Markdown分块按标题层级切分Markdown文档
代码分块按函数/类切分代码文件
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 递归字符分块
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,        # 每块最大500字符
    chunk_overlap=50,      # 块间重叠50字符(保持上下文)
    separators=["\n\n", "\n", "。", "!", "?", ",", " ", ""]  # 中文优先
)

chunks = splitter.split_documents(all_docs)
print(f"分块数: {len(chunks)}")
print(f"第一块内容: {chunks[0].page_content[:100]}")

4.3.3 分块参数调优#

参数推荐值说明
chunk_size300-800太小丢失上下文,太大检索不精确
chunk_overlap50-150保证块间语义连续性
分隔符优先级句号>换行>空格中文场景优先按句分割

4.4 企业知识库建设实战#

4.4.1 完整RAG系统构建#

from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import PyPDFLoader
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate

# 第一步:加载文档
loader = PyPDFLoader("telecom_products.pdf")
docs = loader.load()

# 第二步:文本分块
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500, chunk_overlap=50
)
chunks = splitter.split_documents(docs)

# 第三步:向量化并存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="./chroma_db"
)

# 第四步:创建检索器
retriever = vectorstore.as_retriever(
    search_type="similarity",
    search_kwargs={"k": 4}  # 检索Top-4相关块
)

# 第五步:构造RAG链
prompt_template = """
你是一个电信业务知识助手。请基于以下参考资料回答用户问题。
如果参考资料中没有相关信息,请说"根据现有资料无法回答该问题"。

参考资料:
{context}

用户问题:{question}

回答:
"""
PROMPT = PromptTemplate(
    template=prompt_template,
    input_variables=["context", "question"]
)

llm = ChatOpenAI(model="gpt-4o", temperature=0.3)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever,
    chain_type_kwargs={"prompt": PROMPT},
    return_source_documents=True
)

# 第六步:问答
result = qa_chain({"query": "5G-A套餐有哪些?"})
print(f"回答: {result['result']}")
print(f"引用来源: {[doc.metadata for doc in result['source_documents']]}")

4.4.2 RAG质量优化技巧#

优化方向方法效果
查询重写LLM将用户问题改写为更易检索的形式提高召回率
混合检索向量检索+关键词检索(BM25)结合兼顾语义和精确匹配
重排序对检索结果用Cross-Encoder重新排序提高精确率
元数据过滤按来源/时间/类型过滤检索范围减少噪声
多查询融合生成多个查询变体,合并检索结果提高覆盖率

4.4.3 查询重写示例#

from langchain.retrievers import MultiQueryRetriever

# 多查询检索器:自动生成多个查询变体
multi_retriever = MultiQueryRetriever.from_llm(
    retriever=vectorstore.as_retriever(),
    llm=llm
)
# 用户提问"5G-A快吗" → 自动生成:
# "5G-A的传输速率是多少"
# "5G-A相比5G速度提升多少"
# "5G-A峰值速率"
# 分别检索后合并去重

考试要点#

  • 理解RAG的核心流程:加载→分块→向量化→检索→生成
  • 掌握Embedding的概念和作用
  • 了解主流向量数据库的选型
  • 掌握文本分块策略和参数调优
  • 能用LangChain构建完整的RAG系统
  • 了解RAG质量优化的常见方法(查询重写、混合检索、重排序)

第五章 Dify进阶Agent系统开发#

5.1 Dify平台概述#

5.1.1 什么是Dify#

Dify是一个开源的大模型应用开发平台(LLMOps),名字来源于"Do It For You"。它将"接大模型、写提示词、挂工具、配知识库、发布成API"这些工作可视化,开发者只需拖拽连线,无需写框架代码即可构建AI应用。

5.1.2 四类应用类型#

类型说明适用场景
聊天助手多轮对话机器人客服、问答
文本生成单次输入→输出翻译、摘要、文案
工作流(Workflow)可视化流程编排复杂任务自动化
智能体(Agent)自主规划+工具调用多步骤复杂任务

5.1.3 Dify Agent与普通聊天机器人的区别#

维度普通聊天机器人Dify Agent
工作模式被动回答自主规划执行
工具使用不能可调用搜索、API、代码等
任务拆解不能自动拆解多步骤任务
记忆能力有限短期+长期记忆
推理范式ReAct/CoT等推理模式

5.2 Dify安装部署#

5.2.1 Docker部署#

# 克隆Dify仓库
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 复制环境变量
cp .env.example .env

# 启动Docker Compose
docker compose up -d

# 访问 http://localhost:80

5.2.2 配置模型提供商#

在Dify后台 → 设置 → 模型供应商:

  • OpenAI:填入API Key
  • 通义千问:填入DashScope API Key
  • DeepSeek:填入DeepSeek API Key
  • Ollama本地模型:填入本地Ollama地址 http://host.docker.internal:11434

5.3 Agent智能体开发#

5.3.1 创建Agent#

  1. 进入Dify → 创建应用 → 选择"Agent"
  2. 填写应用名称和描述
  3. 配置以下核心要素

5.3.2 Agent核心配置#

系统提示词设计#

你是江苏电信的智能客服助手。

## 能力范围
1. 解答套餐、宽带、5G相关业务问题
2. 处理用户报障和投诉
3. 推荐适合的套餐和增值业务

## 工作规范
1. 回答基于知识库内容,不编造信息
2. 无法回答时引导用户转人工(拨10000号)
3. 保持礼貌专业的语气
4. 涉及费用的问题,提醒以实际账单为准

## 回答格式
- 简单问题:直接回答
- 复杂问题:分步骤说明
- 办理类问题:给出具体操作步骤

工具配置#

工具类型说明实例
知识库上传业务文档供检索FAQ文档、产品手册
搜索引擎联网搜索最新信息DuckDuckGo、Google
计算器数学计算套餐费用计算
代码执行运行Python代码数据处理、格式转换
自定义API调用外部接口查询用户信息、工单系统
DALL·E图像生成生成宣传图(如需)

Agent推理模式#

模式说明适用场景
ReAct推理+行动交替执行通用场景(推荐)
Function Calling模型原生函数调用支持FC的模型
自定义自定义推理逻辑特殊需求

5.3.3 工作流(Workflow)开发#

工作流是可视化的任务流水线,适合处理确定性流程:

[开始节点]
    ↓
[LLM节点:理解用户意图]
    ↓
[条件分支]
    ├── 套餐咨询 → [知识库检索] → [LLM生成回答] → [输出]
    ├── 故障报修 → [创建工单API] → [LLM生成确认] → [输出]
    └── 投诉建议 → [记录到数据库] → [LLM安抚回复] → [输出]

工作流节点类型#

节点功能配置要点
开始接收输入定义输入参数
LLM大模型推理选择模型、设计Prompt
知识库检索文档选择知识库、设置Top-K
代码执行Python/JS注意安全沙箱限制
条件分支if-else逻辑设置判断条件
HTTP请求调用外部API配置URL、Header、Body
模板转换变量替换Jinja2模板语法
变量赋值存储中间结果定义变量类型
循环遍历列表设置循环体
参数提取从文本提取结构化数据定义提取字段

5.3.4 实战:搭建电信客服Agent#

步骤1:创建Agent应用,编写系统提示词

步骤2:上传知识库

  • 上传产品手册PDF → 自动分块向量化
  • 上传FAQ Excel → 结构化知识

步骤3:添加工具

  • 搜索工具:处理超出知识库范围的问题
  • 计算器:套餐费用对比
  • 自定义API:查询用户套餐信息

步骤4:调试与优化

  • 在预览界面测试多轮对话
  • 调整提示词,覆盖边界情况
  • 设置推荐问题引导用户

步骤5:发布应用

  • 发布为Web应用
  • 生成API接口供第三方调用
  • 嵌入到企业微信/飞书

5.4 Dify进阶功能#

5.4.1 多智能体协同#

Dify支持多个Agent协同工作,常见编排模式:

模式说明适用场景
管道模式Agent A→B→C线性执行流水线处理
路由模式根据意图分发到不同Agent智能客服
并行模式多个Agent同时执行多角度分析
协商模式Agent间相互校验质量控制
层级模式主Agent管理子Agent复杂任务
竞争模式多个Agent给出方案,择优创意生成
反馈模式Agent输出→另一个Agent评审迭代优化

5.4.2 知识库高级配置#

配置项说明推荐值
分段方式自动/自定义自定义(更精确)
分段长度每块字符数300-500
分段重叠块间重叠字符50-100
Top-K检索返回数量3-5
Score阈值相似度过滤阈值0.5-0.7
重排序启用Cross-Encoder开启(提升精度)

考试要点#

  • 掌握Dify四种应用类型的区别
  • 理解Agent与普通聊天机器人的区别
  • 能设计系统提示词并配置工具
  • 掌握工作流节点类型和编排方法
  • 了解多智能体协同的常见模式
  • 能独立搭建一个完整的行业Agent应用

第六章 VibeCoding工具使用#

6.1 VibeCoding概念与起源#

6.1.1 什么是VibeCoding#

VibeCoding(氛围编程/感觉编程)是由Andrej Karpathy(OpenAI联合创始人、前特斯拉AI负责人)于2025年2月提出的AI驱动开发范式。核心思想:开发者用自然语言描述需求,由大模型自动生成代码,人类只负责验收效果和迭代需求

Karpathy原话:“There’s a new kind of coding I call vibe coding, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.”

6.1.2 核心口诀#

“See → Say → Run”

  1. See(看):查看AI生成的代码和运行效果
  2. Say(说):用自然语言描述修改需求
  3. Run(跑):运行并验证结果

6.1.3 VibeCoding vs传统编程#

维度传统编程VibeCoding
编写方式手动编写每一行代码自然语言描述需求
技能要求需要掌握语法和API主要是需求表达和验收
开发速度较慢提升5-10倍
适用人群程序员所有人(包括非技术人员)
代码理解完全理解可能不完全理解(“vibe”)
调试方式断点调试、日志自然语言描述问题

6.2 主流VibeCoding工具#

6.2.1 工具对比#

工具类型特点价格
CursorAI原生IDE最强VibeCoding体验$20/月
Claude Code终端Agent全库理解,自主执行按API计费
TRAEAI IDE(字节)国内首款,中文友好基础版免费
WindsurfAI IDECascade多文件编辑$15/月
GitHub CopilotIDE插件代码补全为主$10/月
bolt.new网页工具浏览器中全栈开发免费/付费
v0.dev网页工具Vercel出品,专注前端免费/付费

6.2.2 Cursor使用指南#

基本操作#

# Cursor核心功能
1. Cmd+K (Ctrl+K)          → 行内代码生成
2. Cmd+L (Ctrl+L)          → 打开AI对话侧栏
3. Cmd+I (Ctrl+I)          → Composer多文件编辑
4. @file / @folder / @web   → 引用上下文
5. @docs                    → 引用文档

VibeCoding实践流程#

步骤1:创建项目
"创建一个React + Tailwind的电信套餐对比页面"

步骤2:迭代需求
"把对比表格改为卡片式布局,每个套餐一张卡片"
"在卡片右上角加一个'推荐'标签,仅推荐套餐显示"

步骤3:修复问题
"页面在手机上显示错位,请修复响应式布局"

步骤4:添加功能
"加一个筛选器,用户可以按月费范围筛选套餐"

6.2.3 Claude Code VibeCoding#

# 在项目目录启动Claude Code
claude

# VibeCoding对话
> 帮我创建一个Express.js API,提供以下接口:
  - GET /api/users 获取用户列表
  - POST /api/users 创建用户
  - GET /api/users/:id 获取用户详情
  - PUT /api/users/:id 更新用户
  - DELETE /api/users/:id 删除用户
  使用SQLite,包含输入验证和错误处理

# Claude Code会自动:
# 1. 规划文件结构
# 2. 创建所有代码文件
# 3. 安装依赖
# 4. 运行测试
# 5. 生成README

6.3 VibeCoding工程化最佳实践#

6.3.1 五步标准化流程#

阿里云开发者社区总结的Vibe Coding五步法,可提升开发效率42%:

步骤说明实践要点
1.需求结构化将模糊需求转为结构化描述明确功能点、技术栈、约束条件
2.上下文构建提供充分的项目上下文用@file引用现有代码和规范
3.增量生成分步骤生成代码每次聚焦一个功能模块
4.验收测试运行并验证结果描述预期行为,让AI对比
5.迭代优化根据结果反馈调整明确描述问题现象

6.3.2 VibeCoding提示词技巧#

# 差的提示词
"帮我写一个网站"

# 好的提示词
"创建一个电信产品展示网站,技术栈React+Tailwind+Vite。
要求:
1. 首页:Hero区域 + 4个产品卡片(5G套餐、宽带、云存储、智能组网)
2. 每个产品卡片包含:图标、名称、简介、价格、'了解更多'按钮
3. 响应式设计,手机端卡片单列,桌面端四列
4. 配色方案:主色#0066CC(电信蓝),背景白色
5. 添加导航栏和页脚"

6.3.3 常见问题与解决#

问题原因解决方案
生成代码不符合项目规范缺少上下文用@file引用规范文件和现有代码
大量代码一次性生成出错任务太大拆分为小步骤,增量生成
AI修改了不该改的文件缺少约束明确指定"只修改xxx文件"
生成代码有依赖冲突未检查环境先让AI检查package.json
前端样式与设计稿不符描述不够具体提供精确的颜色值、尺寸、间距

6.4 VibeCoding + 智能体融合#

2026年,VibeCoding与AI智能体深度融合,形成完整的AI开发闭环:

用户口头描述需求
    ↓
[Agent智能体] → 需求拆解 → 架构设计
    ↓
[VibeCoding] → 代码生成 → 自动调试
    ↓
[Agent智能体] → 测试部署 → 迭代运维

考试要点#

  • 理解VibeCoding的概念和核心口诀(See→Say→Run)
  • 了解主流VibeCoding工具及其特点
  • 掌握VibeCoding五步标准化流程
  • 理解VibeCoding与传统编程的区别
  • 掌握VibeCoding提示词技巧

第七章 大模型开发工具链实战(LangChain)#

7.1 LangChain框架概述#

7.1.1 什么是LangChain#

LangChain是一个用于构建大语言模型应用的开源框架,由Harrison Chase团队开发。它将复杂的LLM应用开发标准化,提供模块化组件,让开发者能快速搭建问答系统、文档分析工具、智能Agent等应用。

LangChain是90%大模型应用开发岗位要求掌握的框架。

7.1.2 核心架构(三层)#

┌─────────────────────────────────────────┐
│              应用层                      │
│  (QA系统、聊天机器人、Agent应用)          │
├─────────────────────────────────────────┤
│              编排层                      │
│  (Chain、Agent、Memory、Callback)        │
├─────────────────────────────────────────┤
│              集成层                      │
│  (LLM接口、文档加载器、向量库、工具)       │
└─────────────────────────────────────────┘

7.1.3 核心组件#

组件功能常用类
LLM/ChatModel大模型接口OpenAI, ChatOpenAI
Prompt Template提示词模板PromptTemplate, ChatPromptTemplate
Output Parser输出解析StrOutputParser, JsonOutputParser
Chain链式调用LLMChain, SequentialChain
Memory对话记忆ConversationBufferMemory
Retriever检索器VectorStoreRetriever
Agent智能体AgentExecutor
Tool工具Tool, @tool装饰器

7.2 LangChain基础实战#

7.2.1 环境搭建#

pip install langchain langchain-openai langchain-community
pip install chromadb pypdf docx2txt  # 文档处理和向量库

7.2.2 LLM调用#

from langchain_openai import ChatOpenAI

# 初始化模型
llm = ChatOpenAI(
    model="gpt-4o",
    temperature=0.7,
    api_key="your-api-key"
)

# 基本调用
response = llm.invoke("什么是大模型?")
print(response.content)

# 流式输出
for chunk in llm.stream("讲一个关于AI的笑话"):
    print(chunk.content, end="", flush=True)

7.2.3 Prompt模板#

from langchain.prompts import ChatPromptTemplate

# 创建提示词模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个{role},请用{style}的风格回答问题。"),
    ("human", "{question}")
])

# 格式化
messages = prompt.invoke({
    "role": "电信技术专家",
    "style": "通俗易懂",
    "question": "什么是5G网络切片?"
})
response = llm.invoke(messages)
print(response.content)

7.2.4 Output Parser#

from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field

# 定义输出结构
class ProductInfo(BaseModel):
    name: str = Field(description="产品名称")
    price: float = Field(description="月费(元)")
    features: list = Field(description="主要特性")

# 创建解析器
parser = PydanticOutputParser(pydantic_object=ProductInfo)

# 在提示词中使用
prompt = ChatPromptTemplate.from_messages([
    ("system", "根据用户描述提取产品信息。\n{format_instructions}"),
    ("human", "{product_description}")
]).partial(format_instructions=parser.get_format_instructions())

chain = prompt | llm | parser
result = chain.invoke({
    "product_description": "5G尊享套餐,月费199元,包含100GB流量、1000分钟通话、千兆宽带"
})
print(f"产品: {result.name}, 价格: {result.price}, 特性: {result.features}")

7.3 Chain(链式调用)#

7.3.1 LCEL表达式语法#

LangChain使用LCEL(LangChain Expression Language)语法,通过管道符 | 连接组件:

# 基础链:Prompt → LLM → Parser
chain = prompt | llm | StrOutputParser()
result = chain.invoke({"question": "什么是RAG?"})

7.3.2 顺序链#

from langchain.chains import LLMChain

# 链1:生成技术概念解释
prompt1 = ChatPromptTemplate.from_template(
    "简要解释什么是{concept},50字以内。"
)
chain1 = prompt1 | llm | StrOutputParser()

# 链2:基于解释生成示例
prompt2 = ChatPromptTemplate.from_template(
    "基于以下解释,给出一个{concept}的实际应用示例:\n{explanation}"
)
chain2 = prompt2 | llm | StrOutputParser()

# 组合成顺序链
from langchain.chains import SimpleSequentialChain
overall_chain = SimpleSequentialChain(
    chains=[chain1, chain2],
    verbose=True
)
# 注意:SimpleSequentialChain是旧版API,新版推荐用LCEL

7.3.3 LCEL方式实现顺序链#

# 新版LCEL方式
from langchain_core.runnables import RunnablePassthrough

concept_chain = (
    {"explanation": prompt1 | llm | StrOutputParser(),
     "concept": RunnablePassthrough()}
    | prompt2
    | llm
    | StrOutputParser()
)

result = concept_chain.invoke("网络切片")
print(result)

7.4 Memory(对话记忆)#

7.4.1 记忆类型#

类型说明适用场景
Buffer Memory保存全部对话历史短对话
Buffer Window Memory只保留最近N轮长对话,控制Token
Summary Memory自动摘要历史超长对话
Summary Buffer Memory混合模式(缓冲+摘要)最佳实践
Token Buffer Memory按Token数限制精确控制成本
Entity Memory提取实体关系记忆需要记住用户信息

7.4.2 使用记忆#

from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferWindowMemory

# 创建带记忆的对话链
memory = ConversationBufferWindowMemory(k=5)  # 保留最近5轮
conversation = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=True
)

# 多轮对话
print(conversation.predict(input="我叫张三,我是电信工程师"))
print(conversation.predict(input="我负责5G基站的维护"))
print(conversation.predict(input="我刚才说我是做什么的?"))  # 能回忆起

7.5 Tool与Agent#

7.5.1 定义工具#

from langchain.tools import tool

@tool
def search_telecom_info(query: str) -> str:
    """搜索电信业务信息。输入搜索关键词。"""
    # 实际实现调用搜索API
    return f"搜索结果:关于'{query}'的电信信息..."

@tool
def calculate_plan_cost(monthly_fee: float, months: int) -> str:
    """计算套餐总费用。输入月费和月数。"""
    total = monthly_fee * months
    return f"套餐{monthly_fee}元/月,{months}个月总费用:{total}元"

@tool
def create_trouble_ticket(issue: str, phone: str) -> str:
    """创建故障工单。输入问题描述和联系电话。"""
    return f"工单已创建,问题描述:{issue},联系电话:{phone},工单号:T20260723001"

tools = [search_telecom_info, calculate_plan_cost, create_trouble_ticket]

7.5.2 创建Agent#

from langchain.agents import create_tool_calling_agent, AgentExecutor

# 创建Agent
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是电信客服助手,使用提供的工具帮助用户解决问题。"),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}")
])

agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 运行Agent
result = agent_executor.invoke({
    "input": "199元套餐用一年多少钱?另外我家里宽带断了,帮我报修,电话13800138000"
})
print(result["output"])

7.5.3 RAG + Agent组合#

from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# RAG检索工具
@tool
def search_knowledge_base(query: str) -> str:
    """从电信知识库中检索信息。输入问题关键词。"""
    docs = retriever.invoke(query)
    return "\n".join([doc.page_content for doc in docs])

# 组合RAG + 其他工具的Agent
all_tools = [search_knowledge_base, calculate_plan_cost, create_trouble_ticket]
rag_agent = create_tool_calling_agent(llm, all_tools, prompt)

考试要点#

  • 掌握LangChain三层架构和核心组件
  • 能使用LCEL语法构建Chain(prompt | llm | parser)
  • 掌握Prompt模板和Output Parser的使用
  • 理解不同Memory类型的适用场景
  • 能定义自定义Tool并创建Agent
  • 能将RAG检索与Agent工具组合使用

第八章 大模型开发工具链实战(LangGraph与DeepAgent)#

8.1 LangGraph概述#

8.1.1 从LangChain到LangGraph#

8.1.1 从LangChain到LangGraph#

维度LangChain AgentLangGraph
流程模型线性链有向图(支持循环)
状态管理隐式、分散显式、集中(State对象)
流程控制固定顺序条件分支、循环、停顿
人工干预困难内置Human-in-the-loop
持久化不支持内置Checkpoint
适用复杂度简单任务复杂多步骤任务

8.1.2 LangGraph核心概念#

概念说明类比
State(状态)在图中流转的全局数据函数参数
Node(节点)执行具体逻辑的函数函数体
Edge(边)节点间的连接和流转条件函数调用
Conditional Edge条件分支边if-else
Checkpoint状态快照(持久化)存档
Subgraph子图(嵌套图)子函数

8.1.3 技术演进路线#

LangChain(基础框架) 
    → LangGraph(图编排引擎)
        → DeepAgent(企业级Agent脚手架)

8.2 LangGraph实战#

8.2.1 基础示例:ReAct Agent#

from langgraph.graph import StateGraph, END
from langgraph.prebuilt import ToolNode
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph.message import add_messages

# 定义状态
class AgentState(TypedDict):
    messages: Annotated[list, add_messages]

# 定义工具
@tool
def search_web(query: str) -> str:
    """搜索网络信息"""
    return f"搜索结果:{query}的相关信息..."

@tool
def calculate(expression: str) -> str:
    """数学计算"""
    try:
        return str(eval(expression))
    except:
        return "计算失败"

tools = [search_web, calculate]
llm = ChatOpenAI(model="gpt-4o").bind_tools(tools)

# 定义节点函数
def agent_node(state: AgentState):
    """Agent决策节点:决定下一步做什么"""
    response = llm.invoke(state["messages"])
    return {"messages": [response]}

def should_continue(state: AgentState):
    """条件判断:是否调用工具"""
    last_message = state["messages"][-1]
    if last_message.tool_calls:
        return "tools"
    return END

# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("agent", agent_node)
workflow.add_node("tools", ToolNode(tools))

# 设置边
workflow.set_entry_point("agent")
workflow.add_conditional_edges("agent", should_continue)
workflow.add_edge("tools", "agent")  # 工具执行后回到Agent

# 编译并运行
app = workflow.compile()

# 调用
result = app.invoke({
    "messages": [("user", "搜索5G-A的速度,然后计算10Gbps等于多少Mbps")]
})
for msg in result["messages"]:
    print(f"{msg.type}: {msg.content}")

8.2.2 多Agent协作示例#

from langgraph.graph import StateGraph, END

class TeamState(TypedDict):
    task: str
    research_result: str
    analysis_result: str
    report: str
    next: str

# 研究Agent
def research_agent(state: TeamState):
    """负责信息收集和研究"""
    result = llm.invoke(f"作为研究员,请收集关于'{state['task']}'的信息")
    return {"research_result": result.content, "next": "analyst"}

# 分析Agent
def analysis_agent(state: TeamState):
    """负责数据分析和洞察"""
    result = llm.invoke(
        f"作为分析师,请分析以下研究内容并给出洞察:\n{state['research_result']}"
    )
    return {"analysis_result": result.content, "next": "writer"}

# 报告Agent
def writer_agent(state: TeamState):
    """负责生成最终报告"""
    result = llm.invoke(
        f"作为报告撰写者,基于以下研究和分析,撰写一份报告:\n"
        f"研究:{state['research_result']}\n"
        f"分析:{state['analysis_result']}"
    )
    return {"report": result.content, "next": END}

# 构建多Agent图
workflow = StateGraph(TeamState)
workflow.add_node("researcher", research_agent)
workflow.add_node("analyst", analysis_agent)
workflow.add_node("writer", writer_agent)

workflow.set_entry_point("researcher")
workflow.add_edge("researcher", "analyst")
workflow.add_edge("analyst", "writer")
workflow.add_edge("writer", END)

team_app = workflow.compile()
result = team_app.invoke({"task": "2026年AI对电信行业的影响"})
print(result["report"])

8.2.3 Human-in-the-Loop(人工干预)#

# 在关键决策点加入人工审核
from langgraph.checkpoint.memory import MemorySaver

def human_review(state: AgentState):
    """人工审核节点 - 暂停等待人工确认"""
    pass  # 实际执行时会暂停

workflow = StateGraph(AgentState)
workflow.add_node("agent", agent_node)
workflow.add_node("review", human_review)
workflow.add_node("tools", ToolNode(tools))

workflow.set_entry_point("agent")
workflow.add_edge("agent", "review")  # Agent决策后审核
workflow.add_conditional_edges("review", lambda x: "tools" if x.get("approve") else "agent")
workflow.add_edge("tools", "agent")

# 编译时启用中断
app = workflow.compile(
    checkpointer=MemorySaver(),
    interrupt_before=["review"]  # 在review前暂停
)

8.2.4 状态持久化与断点续跑#

from langgraph.checkpoint.sqlite import SqliteSaver

# 使用SQLite持久化状态
config = {"configurable": {"thread_id": "conversation-1"}}
app_with_checkpoint = workflow.compile(
    checkpointer=SqliteSaver.from_conn_string("checkpoints.db")
)

# 第一次执行(可能中断)
result = app_with_checkpoint.invoke(
    {"messages": [("user", "帮我分析网络故障")]},
    config=config
)

# 恢复执行(从断点继续)
result = app_with_checkpoint.invoke(
    {"messages": [("user", "继续")]},
    config=config  # 相同thread_id恢复状态
)

8.3 DeepAgent框架#

8.3.1 什么是DeepAgent#

DeepAgent是2026年初LangChain团队推出的基于LangGraph的企业级Agent脚手架。它自带规划、文件上下文、子Agent、长期记忆等能力,开箱即用做长任务。

8.3.2 DeepAgent核心能力#

能力说明对比普通Agent
自主规划自动拆解复杂任务为子步骤需手动设计流程
文件上下文维护文件状态作为工作记忆通常只有对话记忆
子Agent调度自动创建和管理子Agent需手动编排
长期记忆跨会话保持上下文通常会话结束即丢失
断点续跑任务中断后可恢复通常需要从头开始
人工协作关键节点可暂停等待人工需额外实现

8.3.3 DeepAgent使用示例#

from deepagents import DeepAgent
from langchain_openai import ChatOpenAI

# 创建DeepAgent
agent = DeepAgent(
    llm=ChatOpenAI(model="gpt-4o"),
    tools=[search_web, calculate, create_trouble_ticket],
    system_prompt="""
    你是电信运维智能助手。你可以:
    1. 查询网络设备状态
    2. 分析告警日志
    3. 创建和管理工单
    4. 生成运维报告
    
    对于复杂任务,请先制定计划,然后逐步执行。
    """,
    max_steps=20,           # 最大执行步数
    enable_memory=True,      # 启用长期记忆
    enable_file_context=True # 启用文件上下文
)

# 执行复杂任务
result = agent.run(
    "检查昨晚所有5G基站的告警,分析根因,为重大告警创建工单,"
    "最后生成运维分析报告"
)
print(result.output)
print(f"执行步骤: {result.steps}")
print(f"使用工具: {result.tools_used}")

8.3.4 LangGraph + DeepAgent选择指南#

场景推荐方案理由
简单工具调用AgentLangChain Agent快速上手,代码少
多步骤工作流LangGraph精确控制流程
多Agent协作LangGraph图结构编排
需要断点续跑LangGraph + Checkpoint持久化支持
长任务自治执行DeepAgent开箱即用
企业生产部署DeepAgent + LangGraph完整工程能力

考试要点#

  • 理解LangGraph与LangChain Agent的核心区别(图vs链、状态管理)
  • 掌握State、Node、Edge三个核心概念
  • 能用LangGraph构建ReAct Agent
  • 理解多Agent协作的编排方法
  • 了解Human-in-the-Loop和断点续跑的概念
  • 理解DeepAgent的企业级能力(规划、记忆、子Agent)
  • 能根据场景选择合适的开发方案> AI生成

AI生成


第九章 MCP与Skills开发实战#

9.1 MCP(Model Context Protocol)协议概述#

9.1.1 什么是MCP#

MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于2024年11月开源的一套标准化协议,旨在统一大模型与外部世界的交互方式。可以将其理解为**“AI世界的USB-C接口”**——只要AI应用支持MCP,就能像插U盘一样一键接入任何MCP Server提供的能力。

特性说明
提出者Anthropic(2024年11月)
协议基础JSON-RPC 2.0
传输方式stdio(本地)、Streamable HTTP(远程)
行业支持OpenAI、Google、Microsoft、AWS全部官宣支持(2026年)
核心价值解决N×M集成地狱,一次开发处处可用

9.1.2 为什么需要MCP#

传统方式的痛点

# 没有MCP之前:N个模型 × M个工具 = N×M个适配器
模型A → 适配器 → 数据库
模型A → 适配器 → 文件系统
模型A → 适配器 → API服务
模型B → 适配器 → 数据库    # 重复开发!
模型B → 适配器 → 文件系统  # 重复开发!
...

# 有MCP之后:N个模型 + M个MCP Server = N+M个组件
模型A ─┐
模型B ─┤── MCP协议 ──→ MCP Server(数据库)
模型C ─┘              MCP Server(文件系统)
                      MCP Server(API服务)

9.1.3 MCP核心架构#

┌─────────────────────────────────────────────────┐
│                  MCP架构                         │
│                                                  │
│  ┌──────────┐    MCP协议     ┌──────────────┐   │
│  │   MCP    │  (JSON-RPC)   │   MCP Server  │  │
│  │  Client  │ ←───────────→ │               │  │
│  │ (Claude/ │               │  - Tools      │  │
│  │  Cursor/ │               │  - Resources  │  │
│  │  Agent)  │               │  - Prompts    │  │
│  └──────────┘               └──────────────┘  │
│       │                            │            │
│       ▼                            ▼            │
│   大模型决策                   外部系统          │
│                              (DB/FS/API)       │
└─────────────────────────────────────────────────┘

9.1.4 MCP三大核心抽象#

抽象说明类比示例
Tools可被模型调用的函数函数调用查询数据库、发送邮件
Resources可被模型读取的数据源文件系统配置文件、日志文件
Prompts预定义的提示词模板代码模板代码审查模板、分析模板

9.2 MCP Server开发实战#

9.2.1 环境准备#

# 安装FastMCP(2025-2026年最流行的MCP开发框架)
pip install fastmcp

# FastMCP理念类似FastAPI
# 自动分析Python函数的类型注解和文档字符串
# 编译为大模型可识别的JSON Schema

9.2.2 使用FastMCP创建第一个MCP Server#

from fastmcp import FastMCP

# 创建MCP Server实例
mcp = FastMCP("电信运维助手")

# 使用装饰器注册Tool
@mcp.tool()
def query_alarm(device_id: str, hours: int = 24) -> dict:
    """查询指定设备的告警信息
    
    Args:
        device_id: 设备ID,如"SW-001"
        hours: 查询最近多少小时的告警,默认24小时
    
    Returns:
        包含告警列表的字典
    """
    # 模拟查询告警
    alarms = [
        {"time": "2026-07-22 08:30", "level": "critical", "msg": "光功率异常"},
        {"time": "2026-07-22 09:15", "level": "warning", "msg": "CPU使用率>80%"},
    ]
    return {"device_id": device_id, "count": len(alarms), "alarms": alarms}

# 注册Resource
@mcp.resource("config://device/{device_id}")
def get_device_config(device_id: str) -> str:
    """获取设备配置文件"""
    return f"# 设备 {device_id} 配置\ninterface eth0\n  ip address 192.168.1.1/24"

# 注册Prompt模板
@mcp.prompt()
def alarm_analysis_prompt(device_id: str) -> str:
    """生成告警分析提示词"""
    return f"""请分析设备 {device_id} 的告警信息:
1. 查询最近24小时的告警
2. 按严重程度排序
3. 分析可能的根因
4. 给出处理建议"""

# 启动Server
if __name__ == "__main__":
    mcp.run(transport="stdio")  # 本地使用stdio传输

9.2.3 FastMCP工具开发进阶#

from fastmcp import FastMCP
from pydantic import BaseModel, Field
import asyncio

mcp = FastMCP("进阶运维工具")

# 使用Pydantic模型定义复杂参数
class TroubleTicket(BaseModel):
    """工单创建参数"""
    device_id: str = Field(description="故障设备ID")
    alarm_type: str = Field(description="告警类型:critical/warning/info")
    description: str = Field(description="故障描述")
    priority: int = Field(default=3, ge=1, le=5, description="优先级1-5")

@mcp.tool()
async def create_trouble_ticket(ticket: TroubleTicket) -> dict:
    """创建运维工单
    
    根据告警信息自动创建工单,并通知相关负责人。
    """
    ticket_id = f"TKT-{ticket.device_id}-{hash(ticket.description) % 10000:04d}"
    return {
        "ticket_id": ticket_id,
        "status": "created",
        "priority": ticket.priority,
        "message": f"工单已创建,优先级{ticket.priority}"
    }

@mcp.tool()
async def batch_check_devices(device_ids: list[str]) -> dict:
    """批量检查设备状态
    
    Args:
        device_ids: 设备ID列表
    """
    results = {}
    for did in device_ids:
        await asyncio.sleep(0.1)
        results[did] = {"status": "online", "latency_ms": 12}
    return {"total": len(device_ids), "results": results}

# 远程传输模式(生产环境推荐)
if __name__ == "__main__":
    mcp.run(transport="streamable-http", host="0.0.0.0", port=8080)

9.2.4 MCP Server配置与注册#

Claude Desktop配置claude_desktop_config.json):

{
  "mcpServers": {
    "telecom-ops": {
      "command": "python",
      "args": ["path/to/telecom_mcp_server.py"],
      "env": {
        "DB_HOST": "192.168.1.100",
        "DB_PORT": "5432"
      }
    },
    "web-search": {
      "command": "npx",
      "args": ["-y", "@anthropic/mcp-web-search"]
    }
  }
}

Cursor / VS Code配置.mcp.json):

{
  "mcpServers": {
    "telecom-ops": {
      "url": "http://localhost:8080/mcp",
      "transport": "http"
    }
  }
}

9.2.5 常用MCP Server一览#

MCP Server功能安装方式
filesystem文件系统读写npx @anthropic/mcp-filesystem
sqliteSQLite数据库操作npx @anthropic/mcp-sqlite
postgresPostgreSQL数据库npx @anthropic/mcp-postgres
web-search网页搜索npx @anthropic/mcp-web-search
gitGit版本控制npx @anthropic/mcp-git
fetchURL内容抓取npx @anthropic/mcp-fetch
puppeteer浏览器自动化npx @anthropic/mcp-puppeteer

9.3 MCP Client集成#

9.3.1 Python中调用MCP Server#

from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
import asyncio

async def main():
    # 配置MCP Server连接
    server_params = StdioServerParameters(
        command="python",
        args=["telecom_mcp_server.py"],
        env={"DB_HOST": "192.168.1.100"}
    )
    
    # 建立连接
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            # 初始化连接
            await session.initialize()
            
            # 列出可用工具
            tools = await session.list_tools()
            print("可用工具:", [t.name for t in tools.tools])
            
            # 调用工具
            result = await session.call_tool(
                "query_alarm",
                arguments={"device_id": "SW-001", "hours": 48}
            )
            print("查询结果:", result.content)
            
            # 读取资源
            resource = await session.read_resource("config://device/SW-001")
            print("设备配置:", resource.contents[0].text)
            
            # 获取提示词模板
            prompt = await session.get_prompt(
                "alarm_analysis_prompt",
                arguments={"device_id": "SW-001"}
            )
            print("分析提示词:", prompt.messages)

asyncio.run(main())

9.3.2 在LangChain中集成MCP#

from langchain_mcp_adapters import create_mcp_tools
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent
import asyncio

async def create_agent_with_mcp():
    # 从MCP Server加载工具
    tools = await create_mcp_tools(
        command="python",
        args=["telecom_mcp_server.py"]
    )
    
    # 创建Agent
    llm = ChatOpenAI(model="gpt-4o", temperature=0)
    agent = create_tool_calling_agent(llm, tools, 
        system_prompt="你是电信运维助手,可以查询设备告警和管理工单。")
    
    # 执行任务
    result = await agent.ainvoke(
        "查询设备SW-001最近24小时的告警,如果有关键告警请创建工单"
    )
    print(result)
    return result

asyncio.run(create_agent_with_mcp())

AI生成

9.4 Agent Skills开发#

9.4.1 什么是Agent Skills#

Agent Skills是Anthropic于2025年10月正式发布的能力扩展系统,2025年12月18日发布为开放标准。Skills本质上是文件夹形式的指令、脚本和资源集合,让大模型能够像"刚入职的专家"一样,不仅拥有通用智能,还预装了特定业务场景的专项知识与操作规范。

特性说明
发布时间2025年10月(Anthropic),12月开放标准
本质可复用的指令包(文件夹形式)
核心文件SKILL.md(技能定义)
加载方式渐进式加载(按需读取)
设计原则可组合、可移植、渐进式

9.4.2 Skills的文件结构#

my-skill/
├── SKILL.md              # 核心技能定义文件(必须)
├── scripts/              # 辅助脚本
│   ├── analyze.py        # 分析脚本
│   └── report.py         # 报告生成脚本
├── resources/            # 资源文件
│   ├── template.xlsx     # 模板文件
│   └── config.json       # 配置文件
├── references/           # 参考文档
│   └── api_spec.md       # API规范
└── examples/             # 示例
    └── example_output.md # 输出示例

9.4.3 SKILL.md结构详解#

---
name: telecom-ops-analyst
version: 1.0.0
description: 电信运维分析技能,支持告警分析、故障诊断和工单管理
author: Telecom Team
tags: [telecom, ops, alarm, troubleshooting]
tools:
  - query_alarm
  - create_trouble_ticket
  - get_device_config
---

# 电信运维分析技能

## 概述
本技能提供电信网络运维分析能力,包括告警查询、故障根因分析、
工单创建和运维报告生成。

## 使用场景
- 设备告警批量分析
- 故障根因定位
- 自动化工单创建
- 运维报告生成

## 工作流程

### 步骤1:告警查询
1. 使用 `query_alarm` 工具查询设备告警
2. 按严重程度排序:critical > warning > info
3. 统计告警数量和类型分布

### 步骤2:根因分析
1. 分析告警关联性
2. 查询设备配置(`get_device_config`3. 结合网络拓扑判断故障范围
4. 参考 `references/troubleshooting_guide.md`

### 步骤3:工单创建
- 仅对critical级别告警创建工单
- 工单优先级规则:
  - 核心网设备故障 → 优先级1
  - 接入网设备故障 → 优先级2
  - 一般告警 → 优先级3

### 步骤4:报告生成
- 使用 `scripts/report.py` 生成运维报告
- 报告模板见 `resources/template.xlsx`
- 包含:告警概览、根因分析、处理建议、工单列表

## 约束
- 不修改任何设备配置
- 仅查询和分析,不执行变更操作
- 工单创建前需确认告警真实性

9.4.4 开发一个完整的Skill#

目录结构

alarm-analysis-skill/
├── SKILL.md
├── scripts/
│   └── analyze_alarms.py
├── references/
│   └── alarm_codes.md
└── examples/
    └── sample_report.md

scripts/analyze_alarms.py

#!/usr/bin/env python3
"""告警分析脚本 - Skills辅助工具"""
import json
from datetime import datetime
from collections import Counter

def analyze_alarm_patterns(alarms: list[dict]) -> dict:
    """分析告警模式"""
    level_dist = Counter(a["level"] for a in alarms)
    hour_dist = Counter(
        datetime.fromisoformat(a["time"]).hour for a in alarms
    )
    type_dist = Counter(a.get("type", "unknown") for a in alarms)
    
    return {
        "total": len(alarms),
        "by_level": dict(level_dist),
        "by_hour": dict(sorted(hour_dist.items())),
        "by_type": dict(type_dist),
        "critical_count": level_dist.get("critical", 0),
        "recommendation": "建议优先处理critical告警"
            if level_dist.get("critical", 0) > 0
            else "当前无关键告警"
    }

def generate_summary(analysis: dict) -> str:
    """生成告警摘要"""
    return f"""
告警分析摘要
============
总告警数: {analysis['total']}
关键告警: {analysis['critical_count']}
告警级别分布: {analysis['by_level']}
建议: {analysis['recommendation']}
"""

if __name__ == "__main__":
    sample_alarms = [
        {"time": "2026-07-22T08:30:00", "level": "critical", "type": "光功率异常"},
        {"time": "2026-07-22T09:15:00", "level": "warning", "type": "CPU高"},
        {"time": "2026-07-22T10:00:00", "level": "warning", "type": "CPU高"},
    ]
    analysis = analyze_alarm_patterns(sample_alarms)
    print(generate_summary(analysis))

9.4.5 在Claude Code中使用Skills#

# 将Skill放入项目目录
mkdir -p .claude/skills/alarm-analysis
cp -r alarm-analysis-skill/* .claude/skills/alarm-analysis/

# Claude Code会自动发现并加载SKILL.md
# 在对话中直接使用:
# "帮我分析SW-001设备的告警"
# Claude会自动加载alarm-analysis技能,按SKILL.md中定义的流程执行

9.5 MCP与Skills对比与协同#

9.5.1 核心区别#

维度MCPSkills
本质通信协议能力模块
角色标准化连接领域知识封装
类比USB-C接口U盘里的软件
提供方MCP ServerSkill文件夹
加载时机运行时连接按需渐进加载
可移植性跨平台协议文件夹可拷贝
开发语言任意(Python/TS等)Markdown + 任意脚本

9.5.2 三层协同架构#

┌──────────────────────────────────────────────┐
│           2026年AI自动化三层架构               │
│                                               │
│  ┌─────────┐    ┌─────────┐    ┌──────────┐ │
│  │  Agent  │───→│   MCP   │───→│  Skills  │ │
│  │ (决策)   │    │ (连接)   │    │ (执行)    │ │
│  └─────────┘    └─────────┘    └──────────┘ │
│                                               │
│  大模型做出      MCP协议连接    Skills提供     │
│  决策和规划      外部工具和      领域知识和     │
│                  数据源          执行脚本      │
└──────────────────────────────────────────────┘

9.5.3 完整协同示例#

"""
场景:电信运维数字员工
- Agent:基于Claude Code的决策大脑
- MCP:连接监控系统、工单系统、配置数据库
- Skills:封装运维分析流程和诊断知识
"""

# 1. MCP Server提供工具能力
from fastmcp import FastMCP

mcp = FastMCP("电信运维")

@mcp.tool()
def query_alarms(area: str, level: str = "all") -> dict:
    """查询区域告警"""
    return {"area": area, "alarms": [...]}

@mcp.tool()
def get_topology(device_id: str) -> dict:
    """获取网络拓扑"""
    return {"device": device_id, "upstream": "...", "downstream": "..."}

@mcp.tool()
def create_ticket(device_id: str, desc: str, priority: int) -> dict:
    """创建工单"""
    return {"ticket_id": "TKT-001", "status": "created"}

# 2. Skills定义工作流程(.claude/skills/ops-diagnosis/SKILL.md)
# SKILL.md中定义:
# - 告警分类规则
# - 根因分析步骤
# - 工单创建标准
# - 报告生成模板

# 3. Agent整体协调
# Claude Code加载Skills -> 连接MCP Server -> 按Skills流程执行
# 用户:"分析北京区域所有critical告警,创建工单并生成报告"
# Agent自动:
#   1. 加载ops-diagnosis技能
#   2. 调用MCP的query_alarms查询告警
#   3. 按Skills定义的分类规则分析
#   4. 调用MCP的create_ticket创建工单
#   5. 按Skills模板生成报告

9.6 实操练习:构建运维MCP Server + Skill#

练习目标#

构建一个完整的"网络设备巡检"系统:

  1. 开发MCP Server提供设备查询、巡检、报告工具
  2. 开发Skill定义巡检流程和判断标准
  3. 在Agent中组合使用

参考实现#

MCP Server(inspect_server.py)

from fastmcp import FastMCP
from datetime import datetime
import random

mcp = FastMCP("设备巡检系统")

DEVICES = {
    "SW-001": {"name": "核心交换机-A", "ip": "10.0.0.1", "area": "北京"},
    "SW-002": {"name": "汇聚交换机-B", "ip": "10.0.0.2", "area": "北京"},
    "RT-001": {"name": "核心路由器-A", "ip": "10.0.1.1", "area": "上海"},
}

@mcp.tool()
def list_devices(area: str = "all") -> list[dict]:
    """列出所有设备或指定区域的设备"""
    if area == "all":
        return [{"id": k, **v} for k, v in DEVICES.items()]
    return [{"id": k, **v} for k, v in DEVICES.items() if v["area"] == area]

@mcp.tool()
def inspect_device(device_id: str) -> dict:
    """巡检指定设备,返回设备健康状态"""
    if device_id not in DEVICES:
        return {"error": f"设备{device_id}不存在"}
    return {
        "device_id": device_id,
        "timestamp": datetime.now().isoformat(),
        "cpu_usage": random.uniform(10, 85),
        "memory_usage": random.uniform(20, 90),
        "interfaces": {
            "eth0": {"status": "up", "traffic_in": random.randint(100, 1000)},
            "eth1": {"status": "up", "traffic_in": random.randint(100, 1000)},
            "eth2": {"status": "down", "traffic_in": 0},
        },
        "temperature": random.uniform(25, 55),
    }

@mcp.tool()
def check_connectivity(source: str, target: str) -> dict:
    """检查两台设备之间的连通性"""
    return {
        "source": source,
        "target": target,
        "reachable": random.choice([True, True, False]),
        "latency_ms": random.randint(1, 100),
        "packet_loss": random.uniform(0, 5),
    }

@mcp.tool()
def generate_inspection_report(results: list[dict]) -> str:
    """生成巡检报告(Markdown格式)"""
    report = f"# 设备巡检报告\n\n"
    report += f"巡检时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}\n\n"
    report += f"巡检设备数: {len(results)}\n\n"
    report += "| 设备ID | CPU | 内存 | 接口状态 | 温度 | 状态 |\n"
    report += "|--------|-----|------|---------|------|------|\n"
    for r in results:
        cpu = f"{r.get('cpu_usage', 0):.1f}%"
        mem = f"{r.get('memory_usage', 0):.1f}%"
        ifaces = r.get('interfaces', {})
        up_count = sum(1 for v in ifaces.values() if v['status'] == 'up')
        total = len(ifaces)
        temp = f"{r.get('temperature', 0):.1f}C"
        status = "正常" if float(cpu[:-1]) < 80 and float(mem[:-1]) < 85 else "告警"
        report += f"| {r.get('device_id', '?')} | {cpu} | {mem} | {up_count}/{total} | {temp} | {status} |\n"
    return report

if __name__ == "__main__":
    mcp.run(transport="stdio")

Skill定义(SKILL.md)

---
name: device-inspection
version: 1.0.0
description: 网络设备巡检技能
---

# 网络设备巡检

## 工作流程

### 1. 获取设备列表
- 使用 `list_devices` 获取指定区域所有设备
- 记录设备ID、名称、IP地址

### 2. 逐设备巡检
- 对每台设备调用 `inspect_device`
- 判断标准:
  - CPU > 80% → 告警
  - 内存 > 85% → 告警
  - 温度 > 50°C → 告警
  - 接口down → 告警

### 3. 连通性检查
- 对核心设备之间调用 `check_connectivity`
- 丢包率 > 1% → 告警

### 4. 生成报告
- 使用 `generate_inspection_report` 汇总结果
- 报告包含:巡检概览、异常设备列表、处理建议

考试要点#

  • 理解MCP协议的核心概念:统一大模型与外部世界的交互标准
  • 掌握MCP三大抽象:Tools(工具调用)、Resources(数据读取)、Prompts(提示模板)
  • 能用FastMCP框架开发MCP Server,包括工具定义、资源注册、提示模板
  • 理解MCP的传输方式:stdio(本地)和Streamable HTTP(远程)
  • 掌握Agent Skills的概念:文件夹形式的可复用指令包
  • 能编写SKILL.md定义技能流程,使用scripts和resources组织辅助文件
  • 理解MCP与Skills的区别:MCP是通信协议,Skills是能力模块
  • 掌握Agent + MCP + Skills三层协同架构:决策-连接-执行
  • 能构建完整的MCP Server + Skill组合解决方案

AI生成


第十章 企业级数字员工开发基础实操#

10.1 数字员工概述#

10.1.1 什么是数字员工#

数字员工(Digital Employee)是基于大模型和Agent技术构建的AI智能体,能够像人类员工一样自主理解任务目标、制定执行计划、调用工具系统、交付工作成果。2025年被业界称为"Agent爆发元年",2026年超过85%的500强企业已在核心业务流程中部署了数字员工。

特征传统RPA数字员工(AI Agent)
驱动方式流程驱动(固定规则)智能驱动(自主决策)
适应性流程变化需重新编程自然语言理解,自适应
异常处理遇异常即停止自主判断并处理异常
协作方式人操作RPA人机协同,自然语言交互
开发周期数周至数月数天至数周
典型代表UiPath、Blue Prism基于Dify/LangChain构建的Agent

10.1.2 数字员工的核心能力#

┌─────────────────────────────────────────────┐
│            数字员工核心能力模型               │
│                                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ 感知能力  │  │ 认知能力  │  │ 执行能力  │  │
│  │          │  │          │  │          │  │
│  │ ·自然语言│  │ ·任务规划│  │ ·工具调用│  │
│  │  理解    │  │ ·推理判断│  │ ·系统操作│  │
│  │ ·文档识别│  │ ·知识检索│  │ ·数据加工│  │
│  │ ·图像理解│  │ ·记忆学习│  │ ·报告生成│  │
│  └──────────┘  └──────────┘  └──────────┘  │
│                                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ 协作能力  │  │ 安全能力  │  │ 进化能力  │  │
│  │          │  │          │  │          │  │
│  │ ·人机交互│  │ ·权限控制│  │ ·经验积累│  │
│  │ ·多Agent │  │ ·审计日志│  │ ·自我优化│  │
│  │  协作    │  │ ·数据脱敏│  │ ·知识更新│  │
│  └──────────┘  └──────────┘  └──────────┘  │
└─────────────────────────────────────────────┘

10.1.3 企业级数字员工应用场景#

场景描述效率提升典型案例
智能客服7×24小时客户咨询应答70-85%Klarna AI替代700名客服
运维助手告警分析、故障诊断、工单管理60-80%电信网络智能运维
数据分析自动取数、报表生成、趋势洞察80-90%经营分析报告自动化
流程审批智能审核、风险评估、决策建议50-70%财务报销自动审核
知识管理知识库构建、智能问答、文档整理60-75%企业内部知识助手
营销助手内容生成、客户画像、精准推荐70-85%个性化营销方案生成

10.2 数字员工技术架构#

10.2.1 整体架构#

┌──────────────────────────────────────────────────────┐
│                企业级数字员工架构                      │
│                                                       │
│  ┌─────────────────────────────────────────────────┐ │
│  │                  交互层                          │ │
│  │  Web界面 │ API接口 │ 企微/钉钉 │ 语音/邮件      │ │
│  └──────────────────────┬──────────────────────────┘ │
│                          │                            │
│  ┌──────────────────────▼──────────────────────────┐ │
│  │                 Agent编排层                     │ │
│  │  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐  │ │
│  │  │任务规划│ │工具调用│ │记忆管理│ │安全管控│  │ │
│  │  └────────┘ └────────┘ └────────┘ └────────┘  │ │
│  └──────────────────────┬──────────────────────────┘ │
│                          │                            │
│  ┌──────────────────────▼──────────────────────────┐ │
│  │                 能力层                           │ │
│  │  RAG引擎 │ MCP工具 │ 外部API │ 数据库 │ 脚本    │ │
│  └──────────────────────┬──────────────────────────┘ │
│                          │                            │
│  ┌──────────────────────▼──────────────────────────┐ │
│  │                 模型层                           │ │
│  │  GPT-4o │ Claude │ DeepSeek │ Qwen │ 本地模型  │ │
│  └─────────────────────────────────────────────────┘ │
│                                                       │
│  ┌─────────────────────────────────────────────────┐ │
│  │                 基础设施层                       │ │
│  │  向量数据库 │ 对象存储 │ 消息队列 │ 监控告警    │ │
│  └─────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘

10.2.2 ReAct认知循环#

数字员工的"智能"核心来自ReAct(Reason + Act)认知循环:

用户输入: "查询北京区域所有critical告警,创建工单并通知值班人员"

┌──────────────────────────────────────────┐
│            ReAct认知循环                  │
│                                           │
│  Thought: 我需要先查询北京区域的告警      │
│     ↓                                     │
│  Action: query_alarms(area="北京",        │
│          level="critical")                │
│     ↓                                     │
│  Observation: 返回3条critical告警         │
│     ↓                                     │
│  Thought: 有3条关键告警,需要创建工单     │
│     ↓                                     │
│  Action: create_ticket(device_id="SW-001",│
│          desc="光功率异常", priority=1)   │
│     ↓                                     │
│  Observation: 工单TKT-001已创建           │
│     ↓                                     │
│  Thought: 需要通知值班人员                │
│     ↓                                     │
│  Action: send_notification(               │
│          channel="企微",                  │
│          message="3条关键告警已建工单")   │
│     ↓                                     │
│  Observation: 通知已发送                  │
│     ↓                                     │
│  Answer: 已查询到3条关键告警,创建了3张   │
│          工单并通知了值班人员。           │
└──────────────────────────────────────────┘

10.2.3 企业级设计原则#

原则说明实现要点
可靠性产出稳定、结果可信赖工具调用重试机制、结果校验、兜底策略
安全性权限管控、数据保护RBAC角色控制、敏感数据脱敏、操作审计
可观测全链路可追踪调用日志、性能监控、异常告警
可集成融入现有系统标准API、MCP协议、企微/钉钉对接
可进化持续优化能力反馈收集、知识更新、模型迭代

10.3 基于Dify开发数字员工#

10.3.1 Dify数字员工开发流程#

┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐
│ 1.定义角色│→│ 2.配置工具│→│ 3.设计流程│→│ 4.测试部署│
│           │   │           │   │           │   │           │
│ ·角色定位 │   │ ·API工具  │   │ ·工作流   │   │ ·对话测试│
│ ·系统提示词│  │ ·数据库   │   │ ·知识库   │   │ ·压力测试│
│ ·能力边界 │   │ ·外部服务 │   │ ·条件分支 │   │ ·上线发布│
└──────────┘   └──────────┘   └──────────┘   └──────────┘

10.3.2 定义数字员工角色#

在Dify中创建Agent应用,编写系统提示词:

# 数字员工:电信运维助手
name: "运维管家小智"
description: "7x24小时电信网络运维智能助手"

system_prompt: |
  你是"运维管家小智",一位专业的电信网络运维数字员工。
  
  ## 你的职责
  1. 监控网络设备告警,实时响应
  2. 分析告警根因,提供诊断建议
  3. 自动创建和跟踪运维工单
  4. 生成运维分析报告
  5. 协助值班人员进行故障处理
  
  ## 工作规范
  - critical告警:5分钟内响应,立即创建工单并通知
  - warning告警:15分钟内响应,分析原因并记录
  - info告警:汇总分析,定期报告
  - 所有操作需记录日志,确保可追溯
  
  ## 语言风格
  - 专业简洁,使用标准运维术语
  - 重要信息用【】标注
  - 数字数据精确到小数点后1位
  
  ## 安全约束
  - 不执行任何设备配置变更操作
  - 不泄露客户隐私数据
  - 工单创建前需二次确认

tools:
  - query_alarms        # 查询告警
  - analyze_root_cause  # 根因分析
  - create_ticket       # 创建工单
  - send_notification   # 发送通知
  - generate_report     # 生成报告
  - search_kb           # 知识库检索

knowledge_base:
  - "运维知识库"        # 故障处理手册、设备文档
  - "告警代码库"        # 告警代码对照表

10.3.3 配置工具与知识库#

# Dify自定义工具配置示例(通过API扩展)

# 工具1:查询告警
{
    "name": "query_alarms",
    "description": "查询指定区域和级别的网络告警",
    "parameters": {
        "type": "object",
        "properties": {
            "area": {"type": "string", "description": "区域:北京/上海/广州"},
            "level": {"type": "string", "enum": ["critical", "warning", "info", "all"]}
        },
        "required": ["area"]
    },
    "api": {
        "url": "http://monitor-api.internal/alarms",
        "method": "GET",
        "headers": {"Authorization": "Bearer ${API_KEY}"}
    }
}

# 工具2:创建工单
{
    "name": "create_ticket",
    "description": "创建运维工单",
    "parameters": {
        "type": "object",
        "properties": {
            "device_id": {"type": "string"},
            "description": {"type": "string"},
            "priority": {"type": "integer", "minimum": 1, "maximum": 5}
        },
        "required": ["device_id", "description"]
    }
}

10.3.4 Dify工作流编排#

# Dify工作流:告警自动处理流程

[触发器: 告警webhook]
        │
        ▼
[节点1: 告警分类] ──→ LLM判断告警级别
        │
        ├──critical──→ [节点2: 创建工单] ──→ [节点3: 通知值班] ──→ [节点4: 记录日志]
        │
        ├──warning───→ [节点5: 分析原因] ──→ [节点6: 记录日志]
        │
        └──info──────→ [节点7: 汇总统计] ──→ [节点8: 日报生成]

10.4 基于LangChain开发数字员工#

10.4.1 基础Agent数字员工#

from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain.tools import Tool
from langchain.prompts import ChatPromptTemplate

# 1. 定义工具
def query_alarms(area: str, level: str = "all") -> str:
    """查询指定区域的网络告警"""
    # 模拟查询
    return f"区域{area}共有{level}级别告警3条:\n1. [critical] SW-001 光功率异常\n2. [warning] SW-002 CPU>80%\n3. [warning] RT-001 温度偏高"

def create_ticket(device_id: str, description: str, priority: int = 3) -> str:
    """创建运维工单"""
    return f"工单已创建:TKT-{device_id}-{priority},描述:{description},优先级:{priority}"

def search_kb(query: str) -> str:
    """检索运维知识库"""
    return f"知识库匹配结果:光功率异常通常由光纤连接松动或光模块故障引起,建议:1.检查光纤接头 2.更换光模块 3.联系线路维护"

def send_notification(channel: str, message: str) -> str:
    """发送通知"""
    return f"通知已发送至{channel}{message}"

tools = [
    Tool(name="query_alarms", func=lambda **kw: query_alarms(**kw), description="查询网络告警"),
    Tool(name="create_ticket", func=lambda **kw: create_ticket(**kw), description="创建运维工单"),
    Tool(name="search_kb", func=lambda **kw: search_kb(**kw), description="检索知识库"),
    Tool(name="send_notification", func=lambda **kw: send_notification(**kw), description="发送通知"),
]

# 2. 创建Agent
llm = ChatOpenAI(model="gpt-4o", temperature=0)

prompt = ChatPromptTemplate.from_messages([
    ("system", """你是"运维管家小智",电信网络运维数字员工。
    
    工作规范:
    - critical告警:立即创建优先级1的工单并通知值班人员
    - 工单创建前查阅知识库获取处理建议
    - 所有操作简洁专业
    
    可用工具:{tool_names}
    {tools}"""),
    ("human", "{input}"),
    ("assistant", "{agent_scratchpad}"),
])

agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, max_iterations=10)

# 3. 执行任务
result = agent_executor.invoke({
    "input": "查询北京区域所有告警,critical级别的创建工单并通知值班人员"
})
print(result["output"])

10.4.2 添加记忆与个性化#

from langchain.memory import ConversationSummaryMemory
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# 对话记忆(摘要式)
memory = ConversationSummaryMemory(
    llm=llm,
    memory_key="chat_history",
    return_messages=True
)

# 长期记忆(向量检索)
vectorstore = Chroma(
    collection_name="employee_memory",
    embedding_function=OpenAIEmbeddings()
)

# 存储经验
def save_experience(task: str, solution: str, outcome: str):
    """保存处理经验到长期记忆"""
    vectorstore.add_texts([
        f"任务: {task}\n方案: {solution}\n结果: {outcome}"
    ], metadatas=[{"type": "experience", "date": "2026-07-22"}])

# 检索经验
def recall_experience(query: str, k: int = 3) -> str:
    """从长期记忆中检索相关经验"""
    docs = vectorstore.similarity_search(query, k=k)
    return "\n---\n".join(d.page_content for d in docs)

# 将记忆工具加入Agent
memory_tools = tools + [
    Tool(name="recall_experience", func=recall_experience, 
         description="检索过往处理经验"),
    Tool(name="save_experience", func=lambda **kw: (save_experience(**kw), "经验已保存")[1],
         description="保存处理经验")
]

10.4.3 添加安全管控#

from functools import wraps
import logging

# 操作审计日志
audit_logger = logging.getLogger("digital_employee_audit")
audit_logger.setLevel(logging.INFO)
handler = logging.FileHandler("audit.log", encoding="utf-8")
audit_logger.addHandler(handler)

def audit_log(action: str):
    """操作审计装饰器"""
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            audit_logger.info(f"[{action}] 参数: {kwargs}")
            result = func(*args, **kwargs)
            audit_logger.info(f"[{action}] 结果: {result[:100]}")
            return result
        return wrapper
    return decorator

# 权限控制
class PermissionManager:
    def __init__(self):
        self.permissions = {
            "viewer": ["query_alarms", "search_kb", "recall_experience"],
            "operator": ["query_alarms", "search_kb", "create_ticket", "send_notification", "recall_experience"],
            "admin": ["*"]  # 全部权限
        }
    
    def check_permission(self, role: str, action: str) -> bool:
        allowed = self.permissions.get(role, [])
        return "*" in allowed or action in allowed

# 敏感数据脱敏
import re

def mask_sensitive(text: str) -> str:
    """脱敏处理"""
    text = re.sub(r'\b\d{11}\b', '***-****-****', text)  # 手机号
    text = re.sub(r'\b\d{18}\b', '******************', text)  # 身份证
    text = re.sub(r'\b\d{16,19}\b', '****-****-****-****', text)  # 银行卡
    return text

# 应用安全包装
permission_mgr = PermissionManager()

@audit_log("create_ticket")
def secure_create_ticket(device_id: str, description: str, priority: int = 3, 
                          operator_role: str = "operator") -> str:
    if not permission_mgr.check_permission(operator_role, "create_ticket"):
        return "权限不足:当前角色无法创建工单"
    description = mask_sensitive(description)
    return create_ticket(device_id, description, priority)

10.5 数字员工开发实操:运维报告助手#

10.5.1 需求分析#

需求项描述
输入时间范围、区域、设备类型
输出Markdown格式运维报告
功能告警统计、趋势分析、TOP问题、处理建议
部署Dify或LangChain部署,支持企微调用

10.5.2 完整实现#

from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain.tools import Tool
from langchain.prompts import ChatPromptTemplate
from datetime import datetime, timedelta
import json

# ===== 数据层(模拟) =====
MOCK_DATA = {
    "alarms": [
        {"time": "2026-07-22 08:30", "device": "SW-001", "area": "北京", 
         "level": "critical", "type": "光功率异常", "status": "已处理"},
        {"time": "2026-07-22 09:15", "device": "SW-002", "area": "北京", 
         "level": "warning", "type": "CPU高", "status": "处理中"},
        {"time": "2026-07-22 10:00", "device": "RT-001", "area": "上海", 
         "level": "critical", "type": "链路中断", "status": "已处理"},
        {"time": "2026-07-22 14:30", "device": "SW-003", "area": "北京", 
         "level": "warning", "type": "内存高", "status": "已处理"},
        {"time": "2026-07-22 16:00", "device": "RT-002", "area": "广州", 
         "level": "info", "type": "配置变更", "status": "已记录"},
    ]
}

# ===== 工具层 =====
def get_alarm_stats(area: str = "all", days: int = 1) -> str:
    """获取告警统计数据"""
    alarms = [a for a in MOCK_DATA["alarms"] if area == "all" or a["area"] == area]
    stats = {
        "total": len(alarms),
        "critical": sum(1 for a in alarms if a["level"] == "critical"),
        "warning": sum(1 for a in alarms if a["level"] == "warning"),
        "info": sum(1 for a in alarms if a["level"] == "info"),
        "resolved": sum(1 for a in alarms if a["status"] == "已处理"),
        "pending": sum(1 for a in alarms if a["status"] != "已处理"),
    }
    return json.dumps(stats, ensure_ascii=False)

def get_top_issues(area: str = "all", top_n: int = 5) -> str:
    """获取TOP问题列表"""
    alarms = [a for a in MOCK_DATA["alarms"] if area == "all" or a["area"] == area]
    from collections import Counter
    type_counter = Counter(a["type"] for a in alarms)
    top = type_counter.most_common(top_n)
    return json.dumps([{"type": t, "count": c} for t, c in top], ensure_ascii=False)

def get_device_list(area: str = "all") -> str:
    """获取设备列表"""
    devices = list(set(a["device"] for a in MOCK_DATA["alarms"]
                       if area == "all" or a["area"] == area))
    return json.dumps(devices, ensure_ascii=False)

# ===== Agent层 =====
llm = ChatOpenAI(model="gpt-4o", temperature=0)

tools = [
    Tool(name="get_alarm_stats", func=lambda **kw: get_alarm_stats(**kw),
         description="获取告警统计数据,参数:area(区域), days(天数)"),
    Tool(name="get_top_issues", func=lambda **kw: get_top_issues(**kw),
         description="获取TOP问题列表,参数:area(区域), top_n(数量)"),
    Tool(name="get_device_list", func=lambda **kw: get_device_list(**kw),
         description="获取设备列表,参数:area(区域)"),
]

prompt = ChatPromptTemplate.from_messages([
    ("system", """你是运维报告生成助手。请根据查询到的数据,生成规范的运维报告。

报告格式:
# 运维分析报告
## 一、告警概览
(统计表格)
## 二、TOP问题分析
(问题列表和分析)
## 三、处理情况
(已处理/未处理统计)
## 四、改进建议
(针对性建议)

要求:数据准确,分析有深度,建议可操作。使用Markdown格式。"),
    ("human", "{input}"),
    ("assistant", "{agent_scratchpad}"),
])

agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True, max_iterations=10)

# ===== 执行 =====
result = executor.invoke({
    "input": "生成北京区域今天的运维分析报告"
})
print(result["output"])

10.5.3 部署与集成#

# 通过FastAPI部署为Web服务
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI(title="运维数字员工API")

class ReportRequest(BaseModel):
    area: str = "all"
    days: int = 1
    template: str = "standard"

@app.post("/api/report/generate")
async def generate_report(req: ReportRequest):
    result = executor.invoke({
        "input": f"生成{req.area}区域最近{req.days}天的运维报告"
    })
    return {"status": "success", "report": result["output"]}

@app.post("/api/alarm/query")
async def query_alarm_api(area: str = "all", level: str = "all"):
    stats = get_alarm_stats(area=area)
    return {"status": "success", "data": json.loads(stats)}

# 企微/钉钉webhook对接
@app.post("/api/webhook/wechat")
async def wechat_webhook(message: str):
    """企业微信消息回调"""
    result = executor.invoke({"input": message})
    return {"msgtype": "text", "text": {"content": result["output"]}}

考试要点#

  • 理解数字员工的定义:基于大模型和Agent技术的自主AI智能体
  • 掌握数字员工与传统RPA的核心区别(智能驱动vs流程驱动)
  • 理解数字员工六大核心能力(感知、认知、执行、协作、安全、进化)
  • 掌握ReAct认知循环的工作原理(Thought→Action→Observation→Answer)
  • 能用Dify创建数字员工(定义角色、配置工具、编排工作流)
  • 能用LangChain开发数字员工(工具定义、Agent创建、记忆管理)
  • 理解企业级设计原则(可靠性、安全性、可观测、可集成、可进化)
  • 掌握安全管控实现(审计日志、权限控制、数据脱敏)
  • 能开发完整的数字员工应用(需求分析→工具开发→Agent编排→部署上线)

AI生成


第十一章 进阶实操-多智能体数字员工运维场景#

11.1 多智能体系统概述#

11.1.1 为什么需要多智能体#

单个Agent在处理简单任务时表现出色,但面对复杂的企业级运维场景时存在明显局限性:

维度单Agent多Agent系统
任务复杂度适合线性、单步任务适合并行、多领域协作任务
专业性一个Agent处理所有领域每个Agent专注一个领域
可扩展性工具增多时Prompt膨胀按需添加新Agent
容错性单点失败Agent间可互补
执行效率串行执行可并行执行
上下文管理上下文易溢出各Agent独立上下文

11.1.2 多智能体系统的定义#

多智能体系统(Multi-Agent System, MAS)是由多个自主智能体组成的系统,每个智能体具备独立的目标、能力和知识,通过协作、协商或竞争完成单个智能体无法完成的复杂任务。

┌────────────────────────────────────────────────────┐
│              多智能体运维系统                        │
│                                                     │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐         │
│  │ 监控Agent │  │ 诊断Agent │  │ 修复Agent │         │
│  │          │  │          │  │          │         │
│  │·告警监控  │  │·根因分析  │  │·自动修复  │         │
│  │·异常检测  │  │·影响评估  │  │·变更执行  │         │
│  └─────┬────┘  └─────┬────┘  └─────┬────┘         │
│        │             │             │               │
│        └─────────────┼─────────────┘               │
│                      ▼                             │
│              ┌──────────────┐                      │
│              │  协调者Agent  │                      │
│              │              │                      │
│              │ ·任务分发    │                      │
│              │ ·结果汇总    │                      │
│              │ ·冲突调解    │                      │
│              └──────┬───────┘                      │
│                     ▼                              │
│              ┌──────────────┐                      │
│              │  报告Agent    │                      │
│              │ ·分析报告生成 │                      │
│              │ ·趋势预测    │                      │
│              └──────────────┘                      │
└────────────────────────────────────────────────────┘

11.1.3 运维场景中的多智能体价值#

场景涉及Agent价值
网络故障诊断监控+诊断+知识库从发现到定位缩短80%时间
自动巡检巡检+分析+报告7×24无人值守巡检
容量预警监控+预测+规划提前7天预警容量瓶颈
安全审计检测+分析+处置实时威胁发现与阻断
变更审核评估+验证+执行降低变更风险50%+

11.2 多智能体架构模式#

11.2.1 常见编排模式#

模式1:协调者模式(Orchestrator)

         ┌──────────┐
         │ 协调者    │
         │ Agent    │
         └──┬───┬───┘
            │   │
    ┌───────┤   ├───────┐
    ▼       ▼   ▼       ▼
┌──────┐┌──────┐┌──────┐┌──────┐
│Agent1││Agent2││Agent3││Agent4│
└──────┘└──────┘└──────┘└──────┘

# 特点:中心化控制,协调者负责任务分发和结果汇总
# 适用:流程明确的场景

模式2:流水线模式(Pipeline)

┌──────┐    ┌──────┐    ┌──────┐    ┌──────┐
│Agent1│───→│Agent2│───→│Agent3│───→│Agent4│
│监控  │    │诊断  │    │决策  │    │执行  │
└──────┘    └──────┘    └──────┘    └──────┘

# 特点:串行流转,每个Agent处理特定阶段
# 适用:有明确处理流程的场景

模式3:对等协作模式(Peer-to-Peer)

    ┌──────┐
    │Agent1│←──→┌──────┐
    └──┬───┘    │Agent2│
       │        └──┬───┘
       ▼           ▼
    ┌──────┐    ┌──────┐
    │Agent3│←──→│Agent4│
    └──────┘    └──────┘

# 特点:Agent间直接通信,无中心控制
# 适用:需要即时协商的场景

模式4:层级模式(Hierarchical)

            ┌──────────┐
            │ 主管Agent │
            └──┬───┬───┘
               │   │
        ┌──────┘   └──────┐
        ▼                  ▼
  ┌──────────┐      ┌──────────┐
  │ 团队Leader│      │ 团队Leader│
  │  Agent A  │      │  Agent B  │
  └──┬───┬───┘      └──┬───┬───┘
     │   │              │   │
     ▼   ▼              ▼   ▼
  ┌───┐┌───┐        ┌───┐┌───┐
  │A1 ││A2 │        │B1 ││B2 │
  └───┘└───┘        └───┘└───┘

# 特点:分层管理,上级Agent可调度下级
# 适用:大型复杂组织场景

11.2.2 模式选择指南#

场景特征推荐模式理由
流程明确、步骤固定流水线清晰可控
需要统一决策协调者中心化管理
Agent间需即时协商对等协作低延迟通信
大规模、多层级层级模式分而治之
混合场景协调者+流水线灵活组合

11.3 运维场景中的多智能体设计#

11.3.1 网络故障自动诊断系统设计#

┌─────────────────────────────────────────────────────────┐
│           网络故障自动诊断多Agent系统                     │
│                                                          │
│  ┌─────────────┐                                        │
│  │ 监控Agent    │ ← 告警Webhook / 定时轮询              │
│  │              │                                       │
│  │ ·接收告警    │                                       │
│  │ ·初步分类    │                                       │
│  │ ·去重过滤    │                                       │
│  └──────┬───────┘                                       │
│         │                                                │
│         ▼                                                │
│  ┌─────────────┐     ┌─────────────┐                   │
│  │ 诊断Agent A  │     │ 诊断Agent B  │                   │
│  │ (传输专家)    │     │ (设备专家)   │                   │
│  │              │     │              │                   │
│  │ ·光路分析    │     │ ·硬件诊断    │                   │
│  │ ·链路状态    │     │ ·性能分析    │                   │
│  │ ·拓扑排查    │     │ ·日志分析    │                   │
│  └──────┬───────┘     └──────┬───────┘                   │
│         │                     │                          │
│         └──────────┬──────────┘                          │
│                    ▼                                     │
│  ┌─────────────────┐                                    │
│  │ 知识库Agent      │                                    │
│  │                  │                                    │
│  │ ·检索历史案例    │                                    │
│  │ ·匹配处理方案    │                                    │
│  │ ·更新知识库      │                                    │
│  └────────┬────────┘                                    │
│           │                                              │
│           ▼                                              │
│  ┌─────────────────┐     ┌─────────────────┐           │
│  │ 决策Agent        │────→│ 执行Agent        │           │
│  │                  │     │                  │           │
│  │ ·方案选择       │     │ ·工单创建        │           │
│  │ ·风险评估       │     │ ·通知发送        │           │
│  │ ·人工审核请求   │     │ ·自动修复        │           │
│  └─────────────────┘     └─────────────────┘           │
│                                    │                    │
│                                    ▼                    │
│                          ┌─────────────────┐           │
│                          │ 报告Agent        │           │
│                          │                  │           │
│                          │ ·处理报告生成    │           │
│                          │ ·经验存档        │           │
│                          └─────────────────┘           │
└─────────────────────────────────────────────────────────┘

11.3.2 Agent职责定义#

Agent名称职责输入输出可用工具
监控Agent告警接收、分类、去重告警Webhook分类后的告警query_alarm, classify_alarm
诊断Agent-A传输层故障诊断传输相关告警诊断报告check_link, get_topology
诊断Agent-B设备层故障诊断设备相关告警诊断报告check_hardware, get_logs
知识库Agent历史案例检索诊断信息匹配方案search_kb, get_history
决策Agent方案选择与风险评估诊断报告+历史方案执行方案risk_assess
执行Agent方案执行执行方案执行结果create_ticket, auto_fix
报告Agent报告生成与经验存档全流程数据运维报告generate_report, save_case

AI生成

11.4 基于LangGraph的多智能体实现#

11.4.1 状态定义#

from typing import TypedDict, Annotated, Literal
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain.tools import Tool
import operator

class OpsState(TypedDict):
    """运维多Agent系统共享状态"""
    # 输入
    alarm: dict                     # 原始告警信息
    alarm_type: str                 # 告警分类
    
    # 诊断结果
    diag_link: str                  # 传输诊断结果
    diag_device: str                # 设备诊断结果
    
    # 知识库匹配
    similar_cases: str              # 历史相似案例
    recommended_fix: str            # 推荐修复方案
    
    # 决策
    action_plan: str                # 执行方案
    risk_level: str                 # 风险等级
    need_human: bool                # 是否需要人工
    
    # 执行
    execution_result: str           # 执行结果
    
    # 报告
    final_report: str               # 最终报告

11.4.2 各Agent节点实现#

from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

llm = ChatOpenAI(model="gpt-4o", temperature=0)

# ===== 1. 监控Agent =====
def monitor_agent(state: OpsState) -> dict:
    """接收告警,进行分类和去重"""
    alarm = state["alarm"]
    
    prompt = ChatPromptTemplate.from_template("""
    你是网络监控Agent。请对以下告警进行分类:
    
    告警信息:{alarm}
    
    分类标准:
    - "link": 传输链路类(光功率、链路中断、带宽异常等)
    - "device": 设备硬件类(CPU、内存、温度、硬件故障等)
    - "security": 安全类(异常访问、攻击等)
    - "other": 其他
    
    只返回分类结果(link/device/security/other)。
    """)
    
    result = (prompt | llm).invoke({"alarm": str(alarm)})
    return {"alarm_type": result.content.strip()}

# ===== 2. 传输诊断Agent =====
def link_diagnostic_agent(state: OpsState) -> dict:
    """传输层故障诊断"""
    alarm = state["alarm"]
    
    prompt = ChatPromptTemplate.from_template("""
    你是传输网络诊断专家。请分析以下告警:
    
    告警:{alarm}
    
    诊断步骤:
    1. 分析告警特征
    2. 判断可能的故障点(光路、光模块、链路质量)
    3. 给出初步诊断结论
    
    请输出诊断报告(200字内)。
    """)
    
    result = (prompt | llm).invoke({"alarm": str(alarm)})
    return {"diag_link": result.content}

# ===== 3. 设备诊断Agent =====
def device_diagnostic_agent(state: OpsState) -> dict:
    """设备层故障诊断"""
    alarm = state["alarm"]
    
    prompt = ChatPromptTemplate.from_template("""
    你是设备硬件诊断专家。请分析以下告警:
    
    告警:{alarm}
    
    诊断步骤:
    1. 分析设备类型和告警指标
    2. 判断硬件健康状态
    3. 检查性能瓶颈
    4. 给出诊断结论
    
    请输出诊断报告(200字内)。
    """)
    
    result = (prompt | llm).invoke({"alarm": str(alarm)})
    return {"diag_device": result.content}

# ===== 4. 知识库Agent =====
def knowledge_agent(state: OpsState) -> dict:
    """历史案例检索和方案推荐"""
    alarm = state["alarm"]
    diag = state.get("diag_link", "") + "\n" + state.get("diag_device", "")
    
    prompt = ChatPromptTemplate.from_template("""
    你是运维知识库Agent。基于以下信息检索匹配的处理方案:
    
    告警:{alarm}
    诊断结果:{diag}
    
    请模拟检索知识库,提供:
    1. 最可能的2个历史案例
    2. 推荐的处理方案
    3. 预计恢复时间
    """)
    
    result = (prompt | llm).invoke({"alarm": str(alarm), "diag": diag})
    return {
        "similar_cases": result.content,
        "recommended_fix": result.content
    }

# ===== 5. 决策Agent =====
def decision_agent(state: OpsState) -> dict:
    """方案选择与风险评估"""
    prompt = ChatPromptTemplate.from_template("""
    你是运维决策Agent。基于以下信息制定执行方案:
    
    诊断结果-传输:{diag_link}
    诊断结果-设备:{diag_device}
    推荐方案:{recommended_fix}
    
    请制定执行方案:
    1. 选择最优处理方案
    2. 评估风险(low/medium/high)
    3. 是否需要人工介入(true/false)
    4. 具体执行步骤
    
    格式:
    风险等级:[low/medium/high]
    需要人工:[true/false]
    执行方案:...
    """)
    
    result = (prompt | llm).invoke({
        "diag_link": state.get("diag_link", ""),
        "diag_device": state.get("diag_device", ""),
        "recommended_fix": state.get("recommended_fix", "")
    })
    
    content = result.content
    risk = "low"
    need_human = False
    if "high" in content.lower():
        risk = "high"
        need_human = True
    elif "medium" in content.lower():
        risk = "medium"
    
    return {
        "action_plan": content,
        "risk_level": risk,
        "need_human": need_human
    }

# ===== 6. 执行Agent =====
def execution_agent(state: OpsState) -> dict:
    """执行处理方案"""
    plan = state["action_plan"]
    need_human = state.get("need_human", False)
    
    if need_human:
        return {"execution_result": "已通知值班人员,等待人工处理。方案已发送至企微群。"}
    
    prompt = ChatPromptTemplate.from_template("""
    你是执行Agent。请执行以下方案(模拟执行):
    
    方案:{plan}
    
    请模拟执行并返回执行结果,包括:
    1. 创建的工单号
    2. 发送的通知
    3. 执行的操作
    4. 执行结果(成功/失败)
    """)
    
    result = (prompt | llm).invoke({"plan": plan})
    return {"execution_result": result.content}

# ===== 7. 报告Agent =====
def report_agent(state: OpsState) -> dict:
    """生成运维报告"""
    prompt = ChatPromptTemplate.from_template("""
    你是报告Agent。请基于以下信息生成运维处理报告:
    
    原始告警:{alarm}
    诊断结果-传输:{diag_link}
    诊断结果-设备:{diag_device}
    历史案例:{similar_cases}
    执行方案:{action_plan}
    执行结果:{execution_result}
    
    生成Markdown格式报告,包含:
    # 故障处理报告
    ## 一、故障概述
    ## 二、诊断过程
    ## 三、处理方案
    ## 四、执行结果
    ## 五、经验总结
    """)
    
    result = (prompt | llm).invoke({
        "alarm": str(state["alarm"]),
        "diag_link": state.get("diag_link", ""),
        "diag_device": state.get("diag_device", ""),
        "similar_cases": state.get("similar_cases", ""),
        "action_plan": state.get("action_plan", ""),
        "execution_result": state.get("execution_result", "")
    })
    return {"final_report": result.content}

11.4.3 工作流编排#

from langgraph.graph import StateGraph, END

# 构建工作流图
workflow = StateGraph(OpsState)

# 添加所有Agent节点
workflow.add_node("monitor", monitor_agent)
workflow.add_node("diag_link", link_diagnostic_agent)
workflow.add_node("diag_device", device_diagnostic_agent)
workflow.add_node("knowledge", knowledge_agent)
workflow.add_node("decision", decision_agent)
workflow.add_node("execution", execution_agent)
workflow.add_node("report", report_agent)

# 设置入口
workflow.set_entry_point("monitor")

# 监控Agent根据告警类型路由到不同诊断Agent
def route_by_alarm_type(state: OpsState) -> str:
    alarm_type = state.get("alarm_type", "other")
    if alarm_type == "link":
        return "diag_link"
    elif alarm_type == "device":
        return "diag_device"
    else:
        return "diag_link"  # 默认都诊断

workflow.add_conditional_edges(
    "monitor",
    route_by_alarm_type,
    {
        "diag_link": "diag_link",
        "diag_device": "diag_device",
    }
)

# 诊断完成后进入知识库检索
# 注意:两个诊断Agent可能有不同的路由,需要汇聚到knowledge
workflow.add_edge("diag_link", "knowledge")
workflow.add_edge("diag_device", "knowledge")

# 知识库 -> 决策 -> 执行 -> 报告
workflow.add_edge("knowledge", "decision")
workflow.add_edge("decision", "execution")
workflow.add_edge("execution", "report")
workflow.add_edge("report", END)

# 编译
ops_app = workflow.compile()

11.4.4 执行多Agent系统#

# 模拟告警
alarm = {
    "time": "2026-07-22 08:30:00",
    "device_id": "SW-001",
    "area": "北京",
    "level": "critical",
    "type": "光功率异常",
    "value": "-28.5dBm",
    "threshold": "-25.0dBm",
    "description": "核心交换机SW-001光口功率低于阈值"
}

# 执行多Agent工作流
result = ops_app.invoke({"alarm": alarm})

# 输出最终报告
print("=" * 60)
print("多Agent协作执行完成")
print("=" * 60)
print(f"告警类型: {result.get('alarm_type', 'N/A')}")
print(f"风险等级: {result.get('risk_level', 'N/A')}")
print(f"需要人工: {result.get('need_human', 'N/A')}")
print("\n" + "=" * 60)
print("处理报告:")
print("=" * 60)
print(result.get("final_report", "无报告"))

11.4.5 添加Human-in-the-Loop#

from langgraph.checkpoint.memory import MemorySaver

# 在决策节点前暂停,等待人工确认
workflow_with_hitl = StateGraph(OpsState)

# ... 添加所有节点 ...

# 决策后暂停,等待人工审核
workflow_with_hitl.add_edge("decision", "human_review")
workflow_with_hitl.add_node("human_review", lambda state: state)  # 占位
workflow_with_hitl.add_conditional_edges(
    "human_review",
    lambda state: "execution" if not state.get("need_human") or state.get("approved") else END
)

# 编译时启用中断
app_with_hitl = workflow_with_hitl.compile(
    checkpointer=MemorySaver(),
    interrupt_before=["human_review"]
)

# 第一次执行(在human_review前暂停)
config = {"configurable": {"thread_id": "alarm-001"}}
result = app_with_hitl.invoke({"alarm": alarm}, config=config)

# 人工审核结果
print("决策方案:", result.get("action_plan"))
print("风险等级:", result.get("risk_level"))

# 人工确认后继续执行
result = app_with_hitl.invoke(
    {"approved": True},  # 人工批准
    config=config
)
print("最终报告:", result.get("final_report"))

11.5 实操案例:网络故障自动诊断与自愈系统#

11.5.1 系统架构#

┌────────────────────────────────────────────────────────────┐
│          网络故障自动诊断与自愈系统                           │
│                                                             │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ 告警     │→│ 分诊     │→│ 诊断团队  │→│ 决策     │  │
│  │ 接收     │  │ Agent    │  │           │  │ Agent    │  │
│  │ Agent    │  │          │  │ ┌────────┐│  │          │  │
│  │          │  │ ·分类    │  │ │传输诊断││  │ ·方案选择│  │
│  │ ·监听    │  │ ·去重    │  │ │ Agent  ││  │ ·风险评估│  │
│  │ ·解析    │  │ ·升级    │  │ ├────────┤│  │ ·人工请求│  │
│  │          │  │          │  │ │设备诊断││  │          │  │
│  └──────────┘  └──────────┘  │ │ Agent  ││  └────┬─────┘  │
│                              │ ├────────┤│       │        │
│                              │ │知识库  ││       ▼        │
│                              │ │ Agent  ││  ┌──────────┐  │
│                              │ └────────┘│  │ 执行     │  │
│                              └───────────┘  │ Agent    │  │
│                                             │          │  │
│                                             │ ·自动修复│  │
│                                             │ ·工单创建│  │
│                                             │ ·通知发送│  │
│                                             └────┬─────┘  │
│                                                  │        │
│                                                  ▼        │
│                                             ┌──────────┐  │
│                                             │ 报告     │  │
│                                             │ Agent    │  │
│                                             │ ·报告生成│  │
│                                             │ ·经验存档│  │
│                                             └──────────┘  │
└────────────────────────────────────────────────────────────┘

11.5.2 完整实现#

"""
网络故障自动诊断与自愈系统
基于LangGraph的多智能体协作实现
"""
from typing import TypedDict
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.tools import Tool
from langgraph.checkpoint.memory import MemorySaver
import json
import time

# ===== 状态定义 =====
class SelfHealingState(TypedDict):
    alarm: dict
    alarm_type: str
    diagnosis: str
    similar_cases: str
    action_plan: str
    risk_level: str
    need_human: bool
    approved: bool
    execution_result: str
    final_report: str
    steps: list

# ===== 模拟工具 =====
def check_link_status(device_id: str) -> str:
    """检查链路状态"""
    return json.dumps({"device": device_id, "link": "down", "optical_power": "-28.5dBm"})

def check_device_hardware(device_id: str) -> str:
    """检查设备硬件"""
    return json.dumps({"device": device_id, "cpu": "45%", "memory": "62%", "temp": "38C"})

def check_topology(device_id: str) -> str:
    """检查网络拓扑"""
    return json.dumps({"device": device_id, "upstream": "SW-CORE-01", "downstream": ["SW-ACC-01", "SW-ACC-02"]})

def search_history_cases(symptom: str) -> str:
    """搜索历史案例"""
    cases = [
        {"case_id": "CASE-2026-0315", "symptom": "光功率异常", "solution": "更换光模块", "result": "成功"},
        {"case_id": "CASE-2026-0421", "symptom": "光功率异常", "solution": "清洁光纤接头", "result": "成功"},
    ]
    return json.dumps(cases, ensure_ascii=False)

def auto_restart_port(device_id: str, port: str) -> str:
    """自动重启端口(模拟)"""
    return f"设备{device_id}端口{port}已重启,光功率恢复至-20dBm"

def create_ticket(device_id: str, desc: str, priority: int) -> str:
    """创建工单"""
    return f"工单TKT-{device_id}-{int(time.time())%10000}已创建"

def send_notification(channel: str, msg: str) -> str:
    """发送通知"""
    return f"通知已发送至{channel}{msg}"

# ===== LLM =====
llm = ChatOpenAI(model="gpt-4o", temperature=0)

# ===== Agent节点 =====
def triage_agent(state: SelfHealingState) -> dict:
    """分诊Agent:告警分类和去重"""
    alarm = state["alarm"]
    prompt = ChatPromptTemplate.from_template("""
    你是网络告警分诊Agent。分析以下告警并分类:
    告警:{alarm}
    
    分类:link(传输类)/ device(设备类)/ security(安全类)
    只返回分类英文单词。
    """)
    result = (prompt | llm).invoke({"alarm": json.dumps(alarm, ensure_ascii=False)})
    
    steps = state.get("steps", [])
    steps.append(f"[分诊] 告警分类为: {result.content.strip()}")
    
    return {"alarm_type": result.content.strip(), "steps": steps}

def diagnostic_agent(state: SelfHealingState) -> dict:
    """诊断Agent:综合诊断"""
    alarm = state["alarm"]
    alarm_type = state.get("alarm_type", "link")
    
    # 调用工具获取诊断数据
    if alarm_type == "link":
        link_data = check_link_status(alarm["device_id"])
        topo_data = check_topology(alarm["device_id"])
        diag_input = f"链路状态: {link_data}\n拓扑信息: {topo_data}"
    else:
        hw_data = check_device_hardware(alarm["device_id"])
        diag_input = f"硬件状态: {hw_data}"
    
    prompt = ChatPromptTemplate.from_template("""
    你是网络诊断专家。基于以下信息进行诊断:
    
    告警:{alarm}
    诊断数据:{diag_data}
    
    请给出:
    1. 故障定位
    2. 根因分析
    3. 影响范围评估
    """)
    
    result = (prompt | llm).invoke({
        "alarm": json.dumps(alarm, ensure_ascii=False),
        "diag_data": diag_input
    })
    
    steps = state.get("steps", [])
    steps.append(f"[诊断] {result.content[:100]}...")
    
    return {"diagnosis": result.content, "steps": steps}

def knowledge_agent(state: SelfHealingState) -> dict:
    """知识库Agent:检索历史案例"""
    diag = state.get("diagnosis", "")
    cases = search_history_cases(diag[:50])
    
    prompt = ChatPromptTemplate.from_template("""
    你是知识库Agent。基于诊断结果和历史案例,推荐处理方案:
    
    诊断结果:{diag}
    历史案例:{cases}
    
    请输出:
    1. 最匹配的案例
    2. 推荐处理方案
    3. 预计恢复时间
    """)
    
    result = (prompt | llm).invoke({"diag": diag, "cases": cases})
    
    steps = state.get("steps", [])
    steps.append("[知识库] 已匹配历史案例并生成推荐方案")
    
    return {"similar_cases": result.content, "steps": steps}

def decision_agent(state: SelfHealingState) -> dict:
    """决策Agent:方案选择和风险评估"""
    prompt = ChatPromptTemplate.from_template("""
    你是运维决策Agent。基于以下信息制定执行方案:
    
    诊断结果:{diag}
    推荐方案:{cases}
    
    请评估:
    1. 最优处理方案
    2. 风险等级(low/medium/high)
    3. 是否需要人工介入
    
    格式:
    RISK: [low/medium/high]
    HUMAN: [yes/no]
    PLAN: [具体方案]
    """)
    
    result = (prompt | llm).invoke({
        "diag": state.get("diagnosis", ""),
        "cases": state.get("similar_cases", "")
    })
    
    content = result.content
    risk = "high" if "high" in content.lower() else "medium" if "medium" in content.lower() else "low"
    need_human = "yes" in content.lower()
    
    steps = state.get("steps", [])
    steps.append(f"[决策] 风险:{risk}, 需人工:{need_human}")
    
    return {
        "action_plan": content,
        "risk_level": risk,
        "need_human": need_human,
        "steps": steps
    }

def execution_agent(state: SelfHealingState) -> dict:
    """执行Agent:执行处理方案"""
    plan = state.get("action_plan", "")
    alarm = state["alarm"]
    
    if state.get("need_human") and not state.get("approved"):
        ticket = create_ticket(alarm["device_id"], plan[:200], 1)
        notify = send_notification("企微", f"告警需人工处理:{alarm['device_id']} {alarm['type']}")
        result = f"已创建工单({ticket})并通知值班人员({notify})"
    else:
        if "光" in alarm.get("type", "") or "link" in alarm.get("type", "").lower():
            exec_result = auto_restart_port(alarm["device_id"], "eth0")
            result = f"自动修复执行:{exec_result}"
        else:
            ticket = create_ticket(alarm["device_id"], plan[:200], 2)
            result = f"已创建工单:{ticket}"
    
    steps = state.get("steps", [])
    steps.append(f"[执行] {result[:80]}...")
    
    return {"execution_result": result, "steps": steps}

def report_agent(state: SelfHealingState) -> dict:
    """报告Agent:生成报告"""
    prompt = ChatPromptTemplate.from_template("""
    你是报告Agent。生成故障处理报告:
    
    告警:{alarm}
    诊断:{diag}
    方案:{plan}
    执行:{exec}
    
    生成Markdown格式报告。
    """)
    
    result = (prompt | llm).invoke({
        "alarm": json.dumps(state["alarm"], ensure_ascii=False),
        "diag": state.get("diagnosis", ""),
        "plan": state.get("action_plan", ""),
        "exec": state.get("execution_result", "")
    })
    
    steps = state.get("steps", [])
    steps.append("[报告] 报告已生成")
    
    return {"final_report": result.content, "steps": steps}

# ===== 构建工作流 =====
workflow = StateGraph(SelfHealingState)

workflow.add_node("triage", triage_agent)
workflow.add_node("diagnostic", diagnostic_agent)
workflow.add_node("knowledge", knowledge_agent)
workflow.add_node("decision", decision_agent)
workflow.add_node("execution", execution_agent)
workflow.add_node("report", report_agent)

workflow.set_entry_point("triage")
workflow.add_edge("triage", "diagnostic")
workflow.add_edge("diagnostic", "knowledge")
workflow.add_edge("knowledge", "decision")
workflow.add_edge("decision", "execution")
workflow.add_edge("execution", "report")
workflow.add_edge("report", END)

# 编译(可选中断点)
self_healing_app = workflow.compile(
    checkpointer=MemorySaver(),
    interrupt_before=["execution"]  # 执行前暂停确认
)

# ===== 运行系统 =====
if __name__ == "__main__":
    alarm = {
        "time": "2026-07-22 08:30:00",
        "device_id": "SW-001",
        "area": "北京",
        "level": "critical",
        "type": "光功率异常",
        "value": "-28.5dBm",
        "threshold": "-25.0dBm",
        "description": "核心交换机SW-001光口功率低于阈值"
    }
    
    config = {"configurable": {"thread_id": "alarm-001"}}
    
    # 第一次执行(到execution前暂停)
    result = self_healing_app.invoke({"alarm": alarm, "steps": []}, config=config)
    
    print("=== 执行步骤 ===")
    for step in result.get("steps", []):
        print(step)
    
    print(f"\n=== 风险等级: {result.get('risk_level')} ===")
    print(f"=== 需要人工: {result.get('need_human')} ===")
    print(f"\n=== 执行方案 ===")
    print(result.get("action_plan", ""))
    
    # 人工确认后继续
    # result = self_healing_app.invoke({"approved": True}, config=config)
    # print(result.get("final_report", ""))

11.6 生产环境最佳实践#

11.6.1 性能优化#

优化方向策略效果
并行化无依赖的Agent并行执行减少总耗时50%+
缓存相同告警的诊断结果缓存减少LLM调用
模型分级简单分类用小模型,复杂分析用大模型降低成本60%
上下文压缩传递给下游Agent的信息做摘要避免Token溢出
流式输出报告Agent流式生成用户体验提升
# 并行诊断示例
from langgraph.graph import StateGraph

# 在工作流中加入并行节点
workflow = StateGraph(SelfHealingState)

workflow.add_node("triage", triage_agent)
workflow.add_node("diag_link", link_diagnostic_agent)    # 并行
workflow.add_node("diag_device", device_diagnostic_agent) # 并行
workflow.add_node("merge", merge_results_agent)          # 汇聚

workflow.set_entry_point("triage")
# triage后同时分发到两个诊断Agent
workflow.add_edge("triage", "diag_link")
workflow.add_edge("triage", "diag_device")
# 两个诊断完成后汇聚
workflow.add_edge("diag_link", "merge")
workflow.add_edge("diag_device", "merge")

11.6.2 监控与可观测#

import logging
from datetime import datetime

# Agent执行链路追踪
class AgentTracer:
    """多Agent执行链路追踪"""
    
    def __init__(self):
        self.traces = []
    
    def trace(self, agent_name: str, input_data: dict, output_data: dict, duration: float):
        self.traces.append({
            "timestamp": datetime.now().isoformat(),
            "agent": agent_name,
            "input": str(input_data)[:200],
            "output": str(output_data)[:200],
            "duration_sec": duration
        })
    
    def get_trace_report(self) -> str:
        report = "# Agent执行链路\n\n"
        total_time = 0
        for t in self.traces:
            report += f"## {t['agent']} ({t['duration_sec']:.2f}s)\n"
            report += f"  时间: {t['timestamp']}\n"
            report += f"  输入: {t['input'][:100]}...\n"
            report += f"  输出: {t['output'][:100]}...\n\n"
            total_time += t['duration_sec']
        report += f"\n**总耗时: {total_time:.2f}s**\n"
        return report

tracer = AgentTracer()

# 包装Agent节点加入追踪
def traced_agent(name: str, agent_fn):
    """装饰器:为Agent添加执行追踪"""
    def wrapper(state):
        start = time.time()
        result = agent_fn(state)
        duration = time.time() - start
        tracer.trace(name, state, result, duration)
        return result
    return wrapper

# 使用追踪包装
workflow.add_node("triage", traced_agent("分诊Agent", triage_agent))
workflow.add_node("diagnostic", traced_agent("诊断Agent", diagnostic_agent))

11.6.3 生产部署检查清单#

检查项要求状态
Agent超时控制每个Agent设置最大执行时间
重试机制工具调用失败自动重试3次
降级策略LLM不可用时降级到规则引擎
日志审计全链路操作日志可追溯
权限控制不同角色可执行的操作不同
知识库更新每次处理结果自动入库
告警去重相同告警5分钟内不重复处理
人工兜底高风险操作必须人工确认
性能监控P99响应时间 < 60秒
灾备方案Agent服务可快速切换到备用节点

11.6.4 成本控制#

# 多模型分级策略
from langchain_openai import ChatOpenAI

# 简单任务用小模型
fast_llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# 复杂分析用大模型
smart_llm = ChatOpenAI(model="gpt-4o", temperature=0)

# Agent模型分级配置
AGENT_MODEL_MAP = {
    "triage": fast_llm,         # 分类用小模型
    "diagnostic": smart_llm,    # 诊断用大模型
    "knowledge": fast_llm,     # 检索用小模型
    "decision": smart_llm,     # 决策用大模型
    "execution": fast_llm,     # 执行用小模型
    "report": smart_llm,       # 报告用大模型
}

# Token使用统计
class TokenTracker:
    def __init__(self):
        self.usage = {"total_tokens": 0, "by_agent": {}}
    
    def track(self, agent: str, tokens: int):
        self.usage["total_tokens"] += tokens
        self.usage["by_agent"][agent] = \
            self.usage["by_agent"].get(agent, 0) + tokens
    
    def report(self) -> str:
        return json.dumps(self.usage, indent=2, ensure_ascii=False)

考试要点#

  • 理解多智能体系统的定义:多个自主智能体通过协作完成复杂任务
  • 掌握单Agent与多Agent系统的区别和各自适用场景
  • 理解四种编排模式:协调者、流水线、对等协作、层级模式
  • 能根据场景选择合适的编排模式
  • 掌握运维场景中多Agent的角色划分(监控→诊断→知识库→决策→执行→报告)
  • 能用LangGraph构建多Agent工作流(状态定义、节点实现、边编排、条件路由)
  • 理解Human-in-the-Loop在多Agent系统中的应用
  • 掌握网络故障自动诊断与自愈系统的完整架构
  • 了解生产环境最佳实践:性能优化、监控追踪、部署检查、成本控制
  • 能构建端到端的多智能体运维系统

AI生成