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

Agent相关面试题

你做的多 agent 之间是怎么进行通讯的?中央 agent 是怎么给下面的子 agent 分配任务的?串行?并行?

一、多 Agent 通讯与任务分配机制

1. 通讯架构:异步消息总线 (MessageBus)

Agent 之间通过MessageBus进行异步消息通信(第 822-903 行):

class MessageBus: def __init__(self): # 每个Agent独立队列,避免全局锁竞争 self._agent_queues: Dict[str, asyncio.Queue] = {} self._subscribers: Dict[str, List[Callable]] = defaultdict(list)

核心特点:

  • 每个 Agent 有独立队列- 减少锁竞争,提高并发性能

  • 支持点对点通信- 通过receiver字段指定目标 Agent

  • 支持广播-receiver=None时广播给所有 Agent(除发送者外)

  • 消息优先级- 支持 1-10 的优先级设置

  • 消息持久化- 记录消息历史用于追溯

2. 任务分配方式:串行主任务 + 并行 QC

中央 Agent 的任务调度逻辑(第 4965-4994 行):

async def _dispatch_to_agents(self, correlation_id, query, classification): agents_to_invoke = [classification.primary_agent] + classification.supporting_agents # 串行发送任务给主 Agent await self.send_message( receiver=classification.primary_agent, message_type=MessageType.TASK_ASSIGN, payload={"query": query, "classification": asdict(classification)}, correlation_id=correlation_id, requires_response=True )

分配策略:

维度实现方式
主任务执行串行- 由一个主 Agent(primary_agent)执行任务
辅助 Agent串行- 主 Agent 可调用辅助 Agent,但通常也是串行协作
QC 审核并行(非阻塞)- 主 Agent 返回结果后,后台异步提交 QC 审核(第 5034-5036 行)

非阻塞 QC 机制:

# 并行提交QC审核(不阻塞结果返回) if workflow.get("requires_qc", False): asyncio.create_task(self._submit_to_qc_async(message, correlation_id)) ​ # 直接整合并返回结果(不等待QC) final_result = await self._integrate_results(correlation_id)

你是怎么做的agent 回答质量检测的功能?怎么识别敏感输出?

二、Agent 回答质量检测与敏感输出识别

1. 质量检测:QualityControlAgent (Agent5)

审核维度(第 6855-7258 行):

class QualityControlAgent(BaseAgent): async def _handle_qc_review_request(self, message: AgentMessage): # 执行四维审核 fact_check = await self._check_facts(output) # 事实核查 citation_check = await self._verify_citations(citations) # 引用验证 logic_check = await self._check_logic(output) # 逻辑一致性 safety_check = await self._check_safety(output) # 安全合规

具体检测内容:

检测项方法实现方式
事实核查_check_facts()提取科学声明 → RAG 检索验证 → 计算准确性分数
引用验证_verify_citations()检查引用格式完整性(标题、年份、作者)
逻辑一致性_check_logic()使用 LLM 检查自相矛盾、推理合理性
安全合规_check_safety()调用 SafetyGuard 进行多维度安全检查

QC 报告生成:

class QCReport: overall_score: float # 总体质量分数 0-1 factual_accuracy: float # 事实准确性 citation_quality: float # 引用质量 logical_consistency: float # 逻辑一致性 safety_compliance: float # 安全合规性 issues: List[Dict] # 发现的问题列表 corrections: List[Dict] # 建议的修正 approved: bool # 是否通过审核

2. 敏感输出识别:SafetyGuard

多维度敏感内容检测(第 3715-4337 行):

class SafetyGuard: # 检测维度 POLITICAL_PATTERNS = {...} # 政治敏感内容(三级分类) CHEMICAL_WEAPON_PATTERNS = {...} # 化学武器/危险品滥用 PROMPT_INJECTION_PATTERNS = [...] # 提示词注入攻击 PRIVACY_PATTERNS = {...} # 隐私数据泄露 LAB_SAFETY_PATTERNS = {...} # 实验安全违规 HATE_VIOLENCE_PATTERNS = [...] # 仇恨/暴力内容

检测机制:

风险类别检测方法风险等级
政治敏感三级正则匹配(critical/high/medium)CRITICAL/HIGH/MEDIUM
化学武器滥用关键词 + 上下文模式匹配CRITICAL
爆炸物/毒品特定化合物名称 + 制备动词CRITICAL
提示词注入角色绕过、指令覆盖、分割攻击模式HIGH
隐私泄露身份证、手机号、邮箱、银行卡号正则MEDIUM
实验安全违规无防护操作、危险处置方式CRITICAL/HIGH

白名单机制(上下文感知):

RESEARCH_WHITELIST = { "core_terms": ["电池", "电解液", "锂离子电池", "电化学", ...], "legitimate_chemicals": ["碳酸乙烯酯", "EC", "DEC", "LiPF6", ...] } ​ def _calculate_total_risk(self, risk_scores, whitelist_analysis): # 如果是明显的研究上下文,降低化学品相关风险分数 if whitelist_analysis["is_likely_research"]: if "chemical_weapons" in risk_scores and whitelist_analysis["chemical_matches"] >= 2: whitelist_discount += 20

风险评分与响应:

RISK_THRESHOLDS = { RiskLevel.CRITICAL: 80, # 严重风险 - 必须阻止 RiskLevel.HIGH: 60, # 高风险 - 强烈建议阻止 RiskLevel.MEDIUM: 40, # 中等风险 - 需要人工审核 RiskLevel.LOW: 20, # 低风险 - 记录日志但允许 }

预编译正则优化:

def _compile_patterns(self): """预编译正则表达式以提高性能""" self._compiled_political = { level: [re.compile(p, re.IGNORECASE) for p in patterns] for level, patterns in self.POLITICAL_PATTERNS.items() }

总结

问题答案
通讯方式基于MessageBus的异步消息队列,每个 Agent 独立队列
任务分配串行执行主任务(单主 Agent),并行后台 QC 审核
质量检测四维检测:事实准确性、引用质量、逻辑一致性、安全合规性
敏感识别基于预编译正则的多级风险检测 + 白名单上下文感知
http://www.jsqmd.com/news/537625/

相关文章:

  • 火星探测器通信系统设计与关键技术解析
  • SDMatte辅助游戏开发:快速生成2D游戏精灵与UI资源
  • SDMatte Web界面用户体验地图:从首次访问到批量导出的全流程触点分析
  • 哔哩下载姬:让B站视频获取与处理效率倍增的全能工具
  • 别再重启节点了!手把手教你用ROS 2参数回调实现PID控制器在线调参(Python/rclpy)
  • TranslucentTB:打造高效个性化Windows任务栏的3大核心价值与实践指南
  • Python工业视觉落地难?3个99%工程师忽略的部署断点及72小时解决方案
  • B站视频转文字:如何让知识获取效率提升300%?
  • MAI-UI-8B快速上手:上传截图+输入指令,3秒获取点击坐标
  • 嵌入式系统的实时性能优化详解
  • 2026年评价高的无锡工业电动推杆/江苏多节电动推杆/大推力电动推杆实力品牌厂家推荐 - 品牌宣传支持者
  • Go语言HTTP服务开发:从标准库到框架
  • 田间气象站 农业气象监测系统
  • Mathematica 教学必备:如何用Rubi规则系统展示积分步骤(附完整安装配置流程)
  • 求职辅导机构哪家强?金融/SDE/咨询领域实力对比(2026版) - 品牌排行榜
  • 校园招聘系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 为什么头部金融科技公司已在2026 Q1全面切换Python AOT?——基于百万行代码仓库的构建耗时、镜像体积、安全扫描通过率真实数据复盘
  • RVC模型计算机组成原理视角:理解AI推理的硬件底层
  • 如何解决E-Hentai Downloader下载旧图库时的资源限制问题
  • 威纶通EasyBuilder Pro安全功能详解:如何防止触摸屏误操作?
  • s2-pro镜像使用:FFmpeg后处理(降噪/均衡/响度标准化)集成方案
  • claude code minimax bat脚本 windows 系统 powershell
  • GPT-4o Copilot 技术解析:从原理到最佳实践
  • OpenClaw飞书办公助手:Qwen3-VL:30B自动化会议纪要生成
  • OpenClaw自动化测试:GLM-4.7-Flash在百次文件重命名任务中的稳定性报告
  • 为什么你的asyncio服务内存永不释放?深入CPython asyncio循环引用链,给出4行补丁级解决方案!
  • 实时手机检测-通用模型教程:如何用Gradio搭建检测界面
  • AgentScope实战:用Qwen大模型打造智能对话系统的避坑指南
  • 虚拟控制器驱动技术突破:释放跨设备控制潜力的实战指南
  • CUDA11.6+PyTorch1.12环境下的OpenMMLab组件安装实录:从mmcv1.6.0到mmdet3d的完整版本链