当前位置: 首页 > news >正文

构建智能航空客服系统:基于 Agent Guardrail 的相关性检测

构建智能航空客服系统:基于 Agent Guardrail 的相关性检测

在现代人工智能应用中,确保对话系统能够专注于特定领域并提供相关响应至关重要。本文将介绍如何使用 Agent Guardrail 技术构建一个智能航空客服系统,该系统能够自动检测用户输入是否与航空服务相关,并在检测到无关内容时提供适当的引导。

系统架构概述

系统基于以下几个核心组件:

  • Agent 框架:提供智能对话能力
  • Guardrail 机制:实现输入内容的相关性检测
  • 通义千问模型:作为底层大语言模型
  • Pydantic 数据验证:确保数据格式的正确性

环境配置与初始化

首先,我们需要配置系统环境并初始化必要的组件:

from __future__ import annotationsfrom pydantic import BaseModel
import re
import json
from agents import (Agent,GuardrailFunctionOutput,InputGuardrailTripwireTriggered,RunContextWrapper,Runner,TResponseInputItem,input_guardrail,
)from dotenv import load_dotenv
import os
from openai import AsyncOpenAI
from agents import OpenAIChatCompletionsModel, set_tracing_disabled# 加载环境配置
load_dotenv()
QWEN_API_KEY = os.getenv("QWEN_API_KEY")
QWEN_BASE_URL = os.getenv("QWEN_BASE_URL")
QWEN_MODEL_NAME = os.getenv("QWEN_MODEL_NAME")# 初始化通义千问客户端
client = AsyncOpenAI(base_url=QWEN_BASE_URL, api_key=QWEN_API_KEY)
set_tracing_disabled(disabled=True)
qwen_model = OpenAIChatCompletionsModel(model=QWEN_MODEL_NAME, openai_client=client)

环境变量配置

.env 文件中配置以下环境变量:

QWEN_API_KEY=你的通义千问API密钥
QWEN_BASE_URL=通义千问API基础地址
QWEN_MODEL_NAME=使用的模型名称

核心组件详解

1. 数据模型定义

我们使用 Pydantic 定义相关性检测的输出格式:

class RelevanceOutput(BaseModel):"""用于相关性守护规则判定的模式。"""reasoning: stris_relevant: bool

这个数据模型包含两个字段:

  • reasoning:模型对相关性判断的分析过程
  • is_relevant:布尔值,表示输入是否与航空服务相关

2. 相关性检测 Agent

核心的相关性检测逻辑封装在专门的 Agent 中:

	class RelevanceOutput(BaseModel):"""用于相关性守护规则判定的模式。"""reasoning: stris_relevant: boolguardrail_agent = Agent(name="相关性守护规则",instructions="""判断用户的消息是否与常见的航空公司客服对话(如机票、预订、行李、值机、航班状态、政策、会员计划等)高度无关。重要:你只需评估最新的一条用户消息,不要考虑聊天历史中的任何先前消息。对于类似“Hi”“OK”这类具有对话性质的简单消息是可以的;但如果该消息不是对话性质,则它应当与航空旅行有所关联。请返回一个 JSON 对象,其中包含:- 'reasoning':你对该消息是否与航空客服相关的分析- 'is_relevant':一个布尔值,表示该消息是否相关示例输出:```json{"reasoning": "用户正在询问即将出行的机票预订选项,这与航空公司服务直接相关。","is_relevant": true}```""",model=qwen_model)@input_guardrail(name="相关性守护规则")async def relevance_guardrail(context: RunContextWrapper[None], agent: Agent, input: str | list[TResponseInputItem]) -> GuardrailFunctionOutput:"""用于检查输入是否与航空主题相关的守护规则。"""result = await Runner.run(guardrail_agent, input, context=context.context)print(result.final_output)cleaned_json_str = re.sub(r"```(json)?", "", result.final_output).strip()final_output = json.loads(cleaned_json_str)return GuardrailFunctionOutput(output_info=final_output,tripwire_triggered=not final_output["is_relevant"],)

关键处理步骤:

  1. 运行检测 Agent:使用 Runner.run() 执行相关性分析
  2. 清理 JSON 响应:移除可能存在的代码块标记
  3. 解析 JSON 结果:将字符串响应转换为结构化数据
  4. 触发条件判断:当 is_relevant 为 False 时触发防护机制

主程序实现

主程序集成了所有组件,提供完整的对话体验:

async def main():agent = Agent(name="客服代理",instructions="你是一名客服代理。你将帮助客户解决他们的问题。",input_guardrails=[relevance_guardrail],model=qwen_model)input_data: list[TResponseInputItem] = []while True:user_input = input("请输入消息:")if user_input == "exit":breakinput_data.append({"role": "user","content": user_input,})try:result = await Runner.run(agent, input_data)print(result.final_output)input_data = result.to_input_list()except InputGuardrailTripwireTriggered:message = "抱歉,我无法帮助处理该问题。请提问与航空旅行相关的内容。"print(message)input_data.append({"role": "assistant","content": message,})if __name__ == "__main__":import asyncioasyncio.run(main())

系统工作流程

正常对话流程

  1. 用户输入消息
  2. 系统通过 Guardrail 检测相关性
  3. 如果相关,客服 Agent 正常回复
  4. 对话历史更新,继续下一轮对话

防护触发流程

  1. 用户输入无关消息
  2. Guardrail 检测到 is_relevant: false
  3. 抛出 InputGuardrailTripwireTriggered 异常
  4. 系统返回预设的引导消息
  5. 引导消息加入对话历史,保持上下文连贯

实际应用场景

相关对话示例

用户:我想查询明天从北京到上海的航班
系统:找到以下航班信息...
(正常处理)用户:行李限额是多少?
系统:经济舱旅客可携带...
(正常处理)

无关对话处理

用户:你能帮我解一道数学题吗?
系统:抱歉,我无法帮助处理该问题。请提问与航空旅行相关的内容。用户:今天天气怎么样?
系统:抱歉,我无法帮助处理该问题。请提问与航空旅行相关的内容。

操作示例

在这里插入图片描述

总结

本文介绍的基于 Agent Guardrail 的航空客服系统展示了如何将大语言模型与业务规则相结合,构建既智能又可控的对话系统。通过相关性检测机制,系统能够确保专注于专业领域,提供高质量的服务体验。

这种架构模式可以轻松适配到其他垂直领域,如金融客服、医疗咨询、法律助手等,为构建专业级AI对话系统提供了可靠的技术方案。

参考链接:https://github.com/openai/openai-cs-agents-demo

http://www.dtcms.com/a/431780.html

相关文章:

  • C/C++核心知识点详解教程
  • 保定网站建设方案咨询网站开发工程师 课程大纲
  • react打包优化和配置优化都有哪些?
  • AI行业应用:金融、医疗、教育、制造业的落地实践与技术创新
  • 岱山县网站建设网站建设 点指成名
  • 使用CommandLineRunner应该注意什么
  • 网站过度优化的表现word可以做网页吗
  • 网站建设客户需求分析国内做会展比较好的公司
  • 延安网站建设费用html编程教程
  • 十一 第一修联想M7400
  • 用Python打造专属本地贾维斯:声纹识别+离线交互,隐私安全不依赖云端
  • 智能体长记忆解决方案Mem0和Memobase
  • 健康网站模板正规电商平台
  • 网站布局内容tomcat wordpress
  • LeetCode 刷题【94. 二叉树的中序遍历、95. 不同的二叉搜索树 II】
  • 【代码随想录day 31】 力扣 738.单调递增的数字
  • 上海网站设计 企业有赞微商城入口
  • 【Leetcode高效算法】用双指针策略打破有效三角形的个数
  • 浏览器为什么打不开网站wordpress搭建多人博客
  • 牛客算法刷题noob57 凯撒加密
  • 计算机类毕业设计开题报告注意事项
  • Qt QML创建多线程(示例存读数据库)
  • 2026届计算机毕业设计选题推荐
  • 邹城市网站建设长春网站建设方案外包
  • 合肥建公司网站万户信息 做网站怎么样
  • 第十篇:告别new和delete:RAII机制与智能指针导论
  • 做搜狗pc网站优化快速深圳企业模板建站
  • 深度学习第十章 循环神经网络
  • 设计一个外贸网站需要多少钱wordpress 博客地址更改
  • ASP网站建设实训报告总结大德通众包做网站怎么样