技术实现对比
开放环架构实现
class OpenLoopAgent:
def __init__(self):
self.static_planner = StaticTaskPlanner()
self.rule_engine = RuleBasedEngine()
self.knowledge_base = StaticKnowledgeBase()
self.executor = SequentialExecutor()
self.validator = RuleBasedValidator()
async def execute(self, task: Task) -> ExecutionResult:
# 1. 静态任务规划
plan = await self.static_planner.create_plan(task)
# 2. 基于规则的工具选择
tools = self.rule_engine.select_tools(plan)
# 3. 知识预检索
knowledge = await self.knowledge_base.retrieve(task)
# 4. 一次性执行
context = {'plan': plan, 'tools': tools, 'knowledge': knowledge}
result = await self.executor.execute(context)
# 5. 静态质量验证
validation = await self.validator.validate(result)
if validation.is_valid:
return ExecutionResult(success=True, data=result)
else:
# 开放环架构通常在此处失败,不进行重试
return ExecutionResult(
success=False,
error=validation.errors,
fallback_result=result # 返回部分有效结果
)
class StaticTaskPlanner:
async def create_plan(self, task: Task) -> ExecutionPlan:
# 基于任务类型的静态规划
task_type = self.classify_task(task)
if task_type == TaskType.QUERY:
return self._create_query_plan(task)
elif task_type == TaskType.GENERATION:
return self._create_generation_plan(task)
elif task_type == TaskType.TRANSFORMATION:
return self._create_transformation_plan(task)
def _create_query_plan(self, task: Task) -> ExecutionPlan:
return ExecutionPlan(steps=[
Step(type='RETRIEVE', tool='knowledge_search'),
Step(type='PROCESS', tool='text_analysis'),
Step(type='FORMAT', tool='response_formatter')
])闭环架构实现
class ClosedLoopAgent:
def __init__(self):
self.dynamic_planner = AdaptiveTaskPlanner()
self.execution_monitor = ExecutionMonitor()
self.feedback_processor = FeedbackProcessor()
self.strategy_adjuster = StrategyAdjuster()
self.quality_evaluator = QualityEvaluator()
async def execute(self, task: Task, max_iterations: int = 5) -> ExecutionResult:
current_context = ExecutionContext(task=task)
for iteration in range(max_iterations):
# 1. 动态规划调整
plan = await self.dynamic_planner.adaptive_plan(current_context)
# 2. 执行计划步骤
execution_result = await self._execute_iteration(plan, current_context)
# 3. 实时监控执行
execution_metrics = await self.execution_monitor.analyze(execution_result)
# 4. 多维度质量评估
quality_score = await self.quality_evaluator.evaluate(
execution_result, task, current_context
)
# 5. 反馈收集与处理
feedback = await self._collect_feedback(execution_metrics, quality_score)
# 6. 策略调整决策
if quality_score.is_satisfactory:
break
# 7. 基于反馈调整策略
adjustments = await self.feedback_processor.process(feedback)
current_context = await self.strategy_adjuster.adjust(
current_context, adjustments
)
return execution_result
async def _execute_iteration(self, plan: ExecutionPlan, context: ExecutionContext):
execution_context = context.copy()
for step in plan.steps:
# 动态工具选择
tool = await self._select_adaptive_tool(step, execution_context)
# 实时状态更新
step_result = await tool.execute(step, execution_context)
execution_context.update_state(step_result)
# 中间结果质量检查
intermediate_quality = await self._check_intermediate_quality(step_result)
if intermediate_quality.needs_intervention:
execution_context.add_intervention(intermediate_quality.recommendation)
return execution_context.get_result()
class FeedbackProcessor:
async def process(self, feedback_list: List[Feedback]) -> StrategyAdjustments:
adjustments = StrategyAdjustments()
for feedback in feedback_list:
if feedback.type == FeedbackType.QUALITY_DEGRADATION:
# 质量下降,调整策略
adjustments.add_quality_enhancement(feedback.details)
elif feedback.type == FeedbackType.TOOL_FAILURE:
# 工具失败,尝试备选
adjustments.add_tool_alternative(feedback.tool_id, feedback.alternatives)
elif feedback.type == FeedbackType.CONTEXT_INSUFFICIENT:
# 上下文不足,增加检索
adjustments.add_knowledge_enrichment(feedback.missing_context)
else:
adjustments.add_note(f"Unhandled feedback type: {feedback.type}")
return adjustments架构部署模式
在LLM Agent的实际落地过程中,架构部署模式的选择直接影响系统的性能、可扩展性、维护成本以及安全性。本节将从三个维度深入分析LLM Agent的架构部署模式:功能增强方式、编排协作方式,以及流程控制方式。
1. 功能增强模式:纯LLM vs. RAG增强 vs. 符号/规则融合
1.1 纯LLM模式
纯LLM模式是最基础的部署方式,Agent仅依靠大语言模型本身的能力来处理任务,不依赖外部工具或知识库。
架构特征:
用户输入 → LLM处理 → 直接响应适用场景:
- 创意写作和内容生成
- 简单的对话和问答
- 文本翻译和改写
- 基础逻辑推理
实现示例:
class PureLLMAgent:
def __init__(self, model_name="gpt-3.5-turbo"):
self.client = OpenAI(api_key=api_key)
self.model = model_name
def process(self, user_input, context=None):
messages = []
if context:
messages.extend(context)
messages.append({"role": "user", "content": user_input})
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
temperature=0.7,
max_tokens=1000
)
return response.choices[0].message.content优势:
- 部署简单,成本低
- 响应速度快
- 维护和监控相对容易
劣势:
- 知识截止时间限制
- 幻觉问题严重
- 无法访问实时信息
- 缺乏专业领域知识
1.2 RAG增强模式
RAG(Retrieval-Augmented Generation)模式通过引入外部知识库来增强LLM的能力,是目前最常用的企业级部署模式。
架构特征:
用户输入 → 意图理解 → 知识检索 → 上下文增强 → LLM生成 → 响应核心组件:
class RAGEnhancedAgent:
def __init__(self, vector_store, embedding_model, llm_model):
self.vector_store = vector_store
self.embedding_model = embedding_model
self.llm_model = llm_model
self.knowledge_base = KnowledgeBase(vector_store)
def process(self, user_input, session_context=None):
# 1. 检索相关文档
query_embedding = self.embedding_model.encode(user_input)
relevant_docs = self.vector_store.similarity_search(
query_embedding,
top_k=5,
filter=self._build_filter()
)
# 2. 构建增强上下文
context = self._build_context(relevant_docs, session_context)
# 3. 生成响应
messages = [
{"role": "system", "content": self._get_system_prompt()},
{"role": "user", "content": f"用户问题:{user_input}\n\n相关上下文:{context}"}
]
return self.llm_model.generate(messages)
def _build_context(self, docs, session_context):
context_parts = []
for doc in docs:
context_parts.append(f"[来源:{doc.metadata['title']}]\n{doc.content}")
if session_context:
context_parts.append(f"对话历史:{session_context}")
return "\n\n".join(context_parts)检索策略优化:
class HybridRAGAgent(RAGEnhancedAgent):
def __init__(self, vector_store, bm25_index, *args, **kwargs):
super().__init__(*args, **kwargs)
self.bm25_index = bm25_index
self.reranker = CrossEncoderReranker()
def retrieve_with_hybrid_search(self, query, query_type="auto"):
# 1. 向量检索
vector_results = self.vector_store.similarity_search(
self.embedding_model.encode(query), top_k=20
)
# 2. 关键词检索
keyword_results = self.bm25_index.search(query, top_k=20)
# 3. 结果融合和重排序
combined_results = self._merge_results(vector_results, keyword_results)
reranked_results = self.reranker.rerank(query, combined_results)
return reranked_results[:5]优势:
- 知识时效性强
- 降低幻觉率
- 支持专业领域知识
- 可追溯和引用
劣势:
- 系统复杂度增加
- 需要维护知识库
- 检索质量直接影响效果
- 成本相对较高
1.3 符号/规则融合模式
符号/规则融合模式将LLM与传统的规则引擎、工作流系统结合,提供更好的可控性和可解释性。
架构特征:
用户输入 → 意图解析 → 规则匹配 → LLM处理 → 结果验证 → 响应规则引擎集成:
class SymbolicLLMAgent:
def __init__(self, llm_model, rule_engine, workflow_engine):
self.llm_model = llm_model
self.rule_engine = rule_engine
self.workflow_engine = workflow_engine
self.tools_registry = ToolsRegistry()
def process(self, user_input):
# 1. 规则匹配和工具选择
rule_matches = self.rule_engine.match(user_input)
if rule_matches:
# 2. 执行业务规则
workflow_result = self._execute_workflow(rule_matches, user_input)
return workflow_result
# 3. LLM处理非结构化请求
return self._handle_with_llm(user_input)
def _execute_workflow(self, rules, user_input):
execution_plan = self.workflow_engine.create_plan(rules)
results = []
for step in execution_plan:
if step.type == "tool_call":
result = self.tools_registry.call_tool(
step.tool_name,
step.parameters,
user_input
)
results.append(result)
elif step.type == "llm_inference":
result = self.llm_model.generate(
step.prompt,
context=results
)
results.append(result)
return self._validate_and_format(results)工作流定义示例:
# workflow_definition.yaml
name: customer_service_workflow
states:
- name: intent_classification
type: llm
model: "gpt-4"
prompt: |
分析用户意图并分类为:投诉、咨询、建议、其他
输入:{user_input}
输出格式:{"intent": "...", "confidence": 0.95}
- name: knowledge_retrieval
type: tool
tool: knowledge_search
condition: "intent in ['咨询', '投诉']"
parameters:
query: "{user_input}"
top_k: 3
- name: policy_check
type: rule
rule_set: "customer_service_policies"
condition: "intent == '投诉'"
- name: response_generation
type: llm
model: "gpt-3.5-turbo"
prompt: |
基于以下信息生成回复:
用户意图:{intent}
检索知识:{knowledge_results}
政策检查:{policy_result}
用户输入:{user_input}优势:
- 强可控性和可预测性
- 支持关键业务流程
- 便于审计和合规
- 可以处理复杂业务逻辑
劣势:
- 规则维护成本高
- 灵活性相对较低
- 需要专业领域知识