前言
上周和一位做电商的朋友聊天,他吐槽说公司花大价钱上了AI客服系统,结果用户投诉反而增加了。
我问他什么情况,他给我看了一段真实对话:
用户:“我要退这台笔记本电脑,另外想问一下,换货的话保修怎么算?”
AI客服:“好的,为您办理退货。请提供订单号。”
用户:“???我问的保修呢?”
AI客服:“抱歉,请问您有什么问题需要帮助?”
这种"选择性失忆"的表现,其实不是个例。背后暴露的,是当前主流AI Agent架构的一个根本性问题。
一、监督者模式:看起来很美
如果你接触过LangGraph或类似的Agent框架,应该对"监督者模式"(Supervisor Pattern)不陌生。

这个模式的逻辑非常直观:
设置一个"监督者Agent",像公司的客服主管一样,负责分析用户问题,然后分派给不同的专员处理:
- 退货问题 → 退货Agent
- 账单问题 → 账单Agent
- 技术问题 → 技术支持Agent
每个Agent都有自己的专业领域、系统提示词和工具配置。听起来很合理,对吧?
让我们看看实际代码是怎么实现的:
# 监督者模式的典型实现
from langgraph.prebuilt import create_react_agent
# 定义各个专门的Agent
refund_agent = create_react_agent(
model,
tools=[check_order_status, process_refund],
system_message="你是退货专员,只负责处理退货退款问题。"
)
warranty_agent = create_react_agent(
model,
tools=[query_warranty_info],
system_message="你是售后专员,只负责回答保修相关问题。"
)
# 监督者Agent负责路由
def supervisor(state):
user_input = state["messages"][-1].content
# 分析用户意图,做出路由决策
if "退货" in user_input or "退款" in user_input:
return "refund_agent"
elif "保修" in user_input or "保固" in user_input:
return "warranty_agent"
else:
return "general_agent"
# 构建工作流
workflow = StateGraph(State)
workflow.add_node("supervisor", supervisor)
workflow.add_node("refund_agent", refund_agent)
workflow.add_node("warranty_agent", warranty_agent)
# 根据监督者的决策进行条件路由
workflow.add_conditional_edges("supervisor", lambda x: x)
在问题边界清晰的场景下,这套机制确实运转良好。用户问退货,系统调退货Agent;问账单,系统调账单Agent。一切井然有序。
但问题恰恰出在"边界清晰"这个前提上。
二、真实世界不讲逻辑
回到开头那个例子。用户在一句话里同时问了两件事:退货+保修政策。
监督者Agent会怎么做?它会判断这主要是"退货相关问题",于是路由到退货Agent。
# 监督者的决策过程
user_input = "我要退这台笔记本电脑,另外想问一下,换货的话保修怎么算?"
# 简单的关键词匹配
if "退货" in user_input:
selected_agent = "refund_agent" # 只选择了一个!
# refund_agent 收到请求
# 但它的系统提示词是:"你是退货专员,只负责处理退货退款问题"
# 所以它会忽略保修相关的问题
但退货Agent对保修政策一无所知。
于是就出现了三种常见的尴尬局面:
- 选择性回答:只处理退货,完全忽略保修问题
- 推诿:“抱歉这个我不清楚,请您重新提问”
- 编造答案:AI凭感觉给出保修说明,看似完美实则埋雷
更要命的是,随着对话继续,问题会越来越明显。
用户可能接着问:“那我如果换货,运费谁出?新机器的发票怎么开?”
这时候监督者又懵了——这算退货问题、物流问题还是财务问题?
真实用户的思维从来不按分类走。 他们会混合提问、自由跳转、前后关联,但期望AI能像真人客服一样"懂得上下文"。
这不是某个模型"没训练好",而是路由机制的天然局限:它只能一次选一条路,但人类对话往往是多线程的。
三、换个思路:从"选路"到"配方"
既然问题出在"必须选择唯一路径",那能不能不选?
答案是:可以。
新的解决思路是——不再路由到单一Agent,而是定义一组可动态激活的指导准则(Guidelines)。
什么意思呢?
想象你不是在培训多个专员,而是给同一个客服提供了一本"应对手册",里面全是"如果…那么…"的规则:
# 准则系统的实现方式
from parlant import Agent
agent = Agent(name="customer_service")
# 定义准则1:退货流程
agent.create_guideline(
condition="客户询问退款或退货事宜",
action="先检查订单状态,确认是否符合退款条件,然后说明具体流程",
tools=[check_order_status, process_refund]
)
# 定义准则2:保修政策
agent.create_guideline(
condition="客户询问保修或质保相关问题",
action="查询产品保修信息库,明确说明保修期限、范围和换货后的保修政策",
tools=[query_warranty_info]
)
# 定义准则3:跨主题处理
agent.create_guideline(
condition="客户在同一问题中涉及多个主题",
action="识别所有相关主题,按逻辑顺序组织回答,确保每个问题都得到解答",
priority="high"
)
当用户输入时,系统会:
- 评估所有准则,找出与当前输入相关的部分
- 动态加载相关准则到AI的上下文中
- 让AI基于这些准则生成连贯、准确的回答
# 准则系统的处理流程
def process_with_guidelines(user_input):
# 步骤1: 评估所有准则的相关性
active_guidelines = []
for guideline in agent.guidelines:
relevance_score = evaluate_relevance(guideline.condition, user_input)
if relevance_score > threshold:
active_guidelines.append({
"guideline": guideline,
"score": relevance_score
})
# 步骤2: 按优先级和相关性排序
active_guidelines.sort(key=lambda x: (x["guideline"].priority, x["score"]))
# 步骤3: 构建增强的上下文
enhanced_context = {
"user_input": user_input,
"active_guidelines": [g["guideline"] for g in active_guidelines],
"available_tools": merge_tools(active_guidelines)
}
# 步骤4: 让模型基于多条准则生成回答
response = agent.generate(enhanced_context)
return response
这样一来,当客户同时问"退货"和"保修"时,系统会同时激活两条准则,AI自然就能跨话题处理,而不是被迫"二选一"。
这种方式,让对话从"单线程路由"变成了"多准则协作",更贴近人类思维模式。

四、Parlant:已经在做这件事
这个思路听起来不错,但实现起来容易吗?
好消息是,已经有开源框架在这么干了——Parlant,它的核心特性就是动态准则匹配机制。
Parlant不依赖Agent之间的固定路由,而是在每一轮对话中:
- 评估所有准则
- 挑选与当前输入相关的部分
- 动态加载进上下文
- 让模型据此生成回答
让我们看一个完整的示例:
from parlant import Parlant, Agent
# 初始化Parlant客户端
client = Parlant(api_key="your_key")
# 创建客服Agent
agent = client.agents.create(
name="customer_service",
description="处理客户咨询的智能客服"
)
# 添加退货准则
agent.guidelines.create(
condition="客户询问退货退款",
action="""
1. 首先询问订单号
2. 使用check_order_status工具核实订单状态
3. 确认是否符合退货条件(7天内未使用)
4. 如符合条件,说明退货流程和预计到账时间
5. 如不符合,礼貌说明原因并提供替代方案
""",
tools=["check_order_status", "initiate_refund"]
)
# 添加保修准则
agent.guidelines.create(
condition="客户询问保修政策",
action="""
1. 使用query_warranty工具查询产品保修信息
2. 明确告知保修期限(通常为1年)
3. 说明保修范围和排除条款
4. 如涉及换货,特别说明换货后保修期重新计算
""",
tools=["query_warranty"]
)
# 处理用户输入
response = agent.process(
message="我要退这台笔记本电脑,另外想问一下,换货的话保修怎么算?",
session_id="user_123"
)
print(response.content)
# 输出:好的,我来帮您处理。
#
# 【关于退货】
# 请提供您的订单号,我需要先核实订单状态和退货资格...
#
# 【关于保修政策】
# 如果您选择换货,新机器会获得完整的1年保修期,
# 从您收到新机器当天开始重新计算...
结果就是:即便用户一句话里谈及多个主题,系统依然能保持逻辑连贯、语义准确。
值得一提的是,Parlant和LangGraph不是竞争关系,而是互补的:

- LangGraph:擅长工作流编排和任务自动化,适合需要严格控制执行顺序的场景
- Parlant:擅长自然对话和上下文保持,适合开放交互和多话题切换
两者甚至可以协同工作:
# Parlant + LangGraph 协同架构示例
from parlant import Agent as ParlantAgent
from langgraph.prebuilt import create_react_agent
# Parlant处理对话理解和准则匹配
conversation_agent = ParlantAgent(name="conversation")
# LangGraph处理复杂的后台任务
workflow_agent = create_react_agent(
model,
tools=[complex_search, data_processing, external_api_call]
)
def hybrid_system(user_input):
# 第一步:Parlant理解意图并匹配准则
understanding = conversation_agent.analyze(user_input)
# 第二步:如果需要复杂任务,调用LangGraph
if understanding.requires_workflow:
workflow_result = workflow_agent.invoke({
"task": understanding.extracted_task,
"context": understanding.context
})
understanding.add_data(workflow_result)
# 第三步:Parlant生成自然语言回复
response = conversation_agent.generate_response(understanding)
return response
这样形成"理解+执行"的闭环架构。
五、如果你想自己实现类似机制
也许你会想:能不能在LangGraph里实现同样的准则系统?
理论上可以,但工程代价不小。这里有三个关键挑战:
1. 准则匹配 ≠ 简单的意图分类
意图分类只是识别"退货""保修"这些标签,但准则匹配需要一整套评分和冲突解决机制:
# 准则匹配的复杂性
class GuidelineEvaluator:
def evaluate(self, user_input, guidelines):
results = []
for guideline in guidelines:
# 计算相关性分数
score = self.calculate_relevance(
user_input,
guideline.condition
)
# 检查前置条件
if guideline.prerequisites:
if not self.check_prerequisites(guideline.prerequisites):
continue
# 检查冲突
conflicts = self.check_conflicts(guideline, results)
# 根据优先级和生命周期决定是否激活
if score > threshold and not conflicts:
results.append({
"guideline": guideline,
"score": score,
"lifecycle": guideline.lifecycle # "once", "persistent", "conditional"
})
return self.resolve_and_sort(results)
问题包括:
- 多条准则同时触发时,如何排序?
- 同一准则在对话中是持续有效还是一次性?
- 部分完成后是否需要重新评估?
- 不同优先级的规则冲突了怎么办?
这需要设计结构化的schema、阈值、生命周期规则,复杂度远超简单的节点路由。
2. 必须有验证和修订机制
为了让系统行为可控,你得加入"自检"环节:
# ARQ (Action-Reasoning-Query) 推理循环
def arq_reasoning_loop(user_input, active_guidelines):
max_iterations = 3
for i in range(max_iterations):
# 第一步:结构化推理
reasoning = {
"current_context": analyze_context(user_input),
"active_guidelines": [g.name for g in active_guidelines],
"actions_taken": get_action_history(),
"requires_tools": identify_needed_tools(active_guidelines),
"next_steps": plan_next_steps(active_guidelines)
}
# 第二步:生成候选回复
candidate_response = generate_response(reasoning)
# 第三步:验证回复
validation = validate_response(
candidate_response,
active_guidelines,
constraints=[
"是否违反高优先级规则?",
"是否遗漏用户的某个问题?",
"信息是否都来自可信来源?",
"是否存在幻觉内容?"
]
)
# 第四步:如果通过验证,返回;否则修正后重试
if validation.passed:
return candidate_response
else:
user_input = refine_input_with_feedback(
user_input,
validation.feedback
)
# 超过最大迭代次数,返回保守回复
return generate_fallback_response()
这意味着不能让每个节点只做一次LLM调用就完事,而要建立基于结构化日志的验证与修订循环。
3. 上下文管理是个大问题
动态加载多条准则的代价,是上下文可能迅速膨胀。要保持系统稳定,需要在架构层设计:
# 上下文管理策略
class ContextManager:
def __init__(self, max_tokens=4000):
self.max_tokens = max_tokens
self.priorities = {
"user_input": 1000, # 最高优先级
"active_guidelines": 800, # 当前相关准则
"recent_history": 600, # 近期对话
"global_context": 400 # 全局上下文
}
def build_context(self, session):
context_parts = []
remaining_tokens = self.max_tokens
# 按优先级分配token预算
for part_type, priority_tokens in self.priorities.items():
allocated = min(priority_tokens, remaining_tokens)
if part_type == "active_guidelines":
# 去重并摘要
guidelines = self.deduplicate_guidelines(
session.active_guidelines
)
content = self.summarize_guidelines(
guidelines,
max_tokens=allocated
)
elif part_type == "recent_history":
# 裁剪历史对话
content = self.truncate_history(
session.messages,
max_tokens=allocated
)
# ... 其他部分
context_parts.append(content)
remaining_tokens -= len(tokenize(content))
return merge_context(context_parts)
包括:
- 准则优先级(最近使用的 > 全局通用的)
- 去重和摘要机制
- 每轮对话的token预算硬限制
- 上下文裁剪策略
这部分往往是性能瓶颈所在。
六、ARQ:更精细的推理控制
Parlant框架还有个值得关注的技术:ARQ(Action-Reasoning Query)推理机制。
它的核心思想是:不让模型"自由发挥",而是强制模型先输出结构化的思考过程。
比如用户询问退款时,系统不会直接让AI回答,而是先要求它输出:
{
"current_context": "客户咨询退款资格",
"active_guideline": "退款前务必核实订单",
"action_taken_before": false,
"requires_tool": true,
"tool_name": "check_order_status",
"reasoning": "需要先确认订单状态才能判断是否符合退款条件",
"next_step": "请求用户提供订单号"
}
只有当这个结构化输出通过验证后,系统才会:
- 执行必要的工具调用
- 收集工具返回的数据
- 基于数据生成最终回复
# ARQ推理的完整流程
def arq_process(user_input, guidelines):
# 阶段1: 推理(Reasoning)
reasoning_prompt = f"""
用户输入:{user_input}
激活的准则:
{format_guidelines(guidelines)}
请输出JSON格式的推理过程:
{{
"current_context": "对当前情况的理解",
"active_guideline": "应该应用的准则",
"requires_tool": true/false,
"tool_name": "需要使用的工具名称",
"reasoning": "为什么需要这个工具",
"next_step": "下一步应该做什么"
}}
"""
reasoning_output = llm.generate(reasoning_prompt)
reasoning = json.loads(reasoning_output)
# 阶段2: 行动(Action)
if reasoning["requires_tool"]:
tool_result = execute_tool(
reasoning["tool_name"],
extract_parameters(user_input)
)
else:
tool_result = None
# 阶段3: 查询(Query)- 基于推理和工具结果生成回复
response_prompt = f"""
推理过程:{json.dumps(reasoning, ensure_ascii=False)}
工具结果:{tool_result}
请基于以上信息,生成自然、准确的回复。
"""
final_response = llm.generate(response_prompt)
return final_response
这种方式确保每一步推理都在受控范围内进行,既避免"幻觉回答",又保留了自然语言的灵活性。
相比我们熟悉的CoT(Chain-of-Thought,思维链)或ToT(Tree-of-Thought,思维树),ARQ更强调结构化思考和过程约束,让Agent更稳定可靠。
七、什么场景该用什么方案?
说了这么多,回到实际应用层面。
如果你的场景是这样的:
- 问题类型固定、边界清晰
- 流程导向、步骤明确
- 需要严格控制执行顺序
那么LangGraph的监督者模式依然是最佳选择。 别折腾,够用就好。
# 适合监督者模式的场景示例
# 场景:订单处理流程(步骤固定)
workflow = StateGraph(State)
workflow.add_node("validate_order", validate_order_agent)
workflow.add_node("check_inventory", inventory_agent)
workflow.add_node("process_payment", payment_agent)
workflow.add_node("arrange_shipping", shipping_agent)
# 严格的顺序执行
workflow.add_edge("validate_order", "check_inventory")
workflow.add_edge("check_inventory", "process_payment")
workflow.add_edge("process_payment", "arrange_shipping")
但如果你面对的是:
- 开放式对话,用户问题不可预测
- 多话题混合、频繁跳转
- 对合规性和准确性要求很高(比如电信、金融、医疗客服)
那么基于准则的架构会更适合。 这时候与其在LangGraph里硬改,不如直接考虑Parlant,或者让两者分层协作。
# 适合准则系统的场景示例
# 场景:金融咨询客服(话题不可预测)
agent = ParlantAgent(name="financial_advisor")
# 多条准则可能同时激活
agent.add_guideline(
condition="询问投资建议",
action="必须先评估风险承受能力,不得推荐超出承受范围的产品",
compliance_level="critical"
)
agent.add_guideline(
condition="涉及具体产品",
action="只能引用官方资料库的信息,禁止自行推测收益",
compliance_level="critical"
)
agent.add_guideline(
condition="询问历史收益",
action="必须同时说明'历史收益不代表未来表现'",
compliance_level="required"
)
八、总结
监督者模式让AI Agent"学会了分工",这是进步。
准则系统则让它们"懂得了协同",这是进化。
未来的智能Agent,不应该只会被动接受指令、机械执行路由。它们需要具备自适应的思考准则——能根据上下文动态调整、跨领域协作、保持对话连贯性。
这才是"智能"的真正起点。
回到开头那个朋友的案例。如果他们的系统采用准则架构,那段对话可能会是这样:
用户:“我要退这台笔记本电脑,另外想问一下,换货的话保修怎么算?”
AI客服:“好的,我来帮您处理。关于退货,我需要先核实您的订单信息;关于换货保修,换货后的新机器会获得完整的保修期,从您收到新机器当天开始计算。请提供您的订单号,我为您查询退货资格。”
一句话搞定两个问题,清晰、准确、自然。
这就是准则系统的价值。
最后
为什么要学AI大模型
当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!
DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。

最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
AI大模型系统学习路线
在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。
AI大模型入门到实战的视频教程+项目包
看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

海量AI大模型必读的经典书籍(PDF)
阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。

600+AI大模型报告(实时更新)
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

AI大模型面试真题+答案解析
我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下


这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

被折叠的 条评论
为什么被折叠?



