Agent智能体架构 第二章 单智能体架构
单智能体架构 (Single Agent) 这是最简单的形式,指代的是一个智能体独立完成所有任务。
代表:AutoGPT、BabyAGI 的早期版本。
优点:上下文一致性强,没有协作开销。
缺点:能力受限于单一模型的上下文窗口,难以处理超长链条的复杂任务
1. 单智能体架构的内部结构(比“一个智能体”更复杂)
虽然叫“单智能体”,但其内部依然是模块化设计,否则连简单任务都无法闭环。
典型结构如下:
┌─────────────────────────────────────────┐
│ 单智能体 (Single Agent) │
├─────────────────────────────────────────┤
│ 感知模块 → 规划模块 → 记忆模块 → 执行模块 │
│ ↑ ↓ ↑ ↓ │
│ └──────────┴──────────┴──────────┘ │
│ 循环迭代直到任务完成 │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 智能体执行流程 │
├─────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ 用户指令 │ │
│ └──────┬──────┘ │
│ ↓ │
│ ┌─────────────┐ │
│ │ Agent解析任务│ │
│ └──────┬──────┘ │
│ ↓ │
│ ┌─────────────────┐ │
│ │ 是否需要工具/ │ │
│ │ 多步推理? │ │
│ └────────┬────────┘ │
│ │ │
│ ┌────────┴────────┐ │
│ ↓ ↓ │
│ 是 否 │
│ ↓ ↓ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 调用工具/ │ │ 直接调用 │ │
│ │ 拆分子任务 │ │ Ollama模型 │ │
│ └──────┬──────┘ │ 回复 │ │
│ │ └──────┬──────┘ │
│ ↓ ↓ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 整合工具结果/│ │ 返回最终答案 │ │
│ │ 子任务结果 │ └─────────────┘ │
│ └──────┬──────┘ │
│ ↓ │
│ ┌─────────────┐ │
│ │ 返回最终答案 │ │
│ └─────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 循环:如需多步则重复以上流程 │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────────┘
用户指令 → Agent解析任务 → 是否需要工具/多步推理?
├─ 是 → 调用工具/拆分子任务 → 整合结果 → 返回答案
└─ 否 → 直接调用Ollama模型回复 → 返回答案
关键模块
-
规划模块:负责将用户目标拆解为步骤(如ReAct、CoT、Plan-and-Solve)。
-
记忆模块:
- 短期记忆:当前会话的上下文(受模型窗口限制)。
- 长期记忆:外部向量数据库(如Chroma、Pinecone),存储历史经验或领域知识。
-
执行模块:调用工具(API、代码、浏览器)并解析返回结果。
核心难点:单智能体必须自己完成规划→执行→反思→再规划的闭环,一旦在某个环节陷入死循环(如重复调用同一错误工具),整个任务就会失败。
2. “缺点”背后的技术根源
① 上下文窗口限制
-
表象:当任务步骤超过模型窗口(如128K tokens)时,智能体会“忘记”早期信息。
-
深层问题:即使窗口足够大(如Google Gemini的2M tokens),注意力衰减依然存在——模型对中间步骤的关联能力会下降,导致规划逻辑断裂。
-
当前解法:
- 滑动窗口:只保留最近的k步对话+关键摘要。
- 任务分解:强制智能体在每次行动后生成“阶段性摘要”,压缩历史。
② 难以处理超长链条任务
-
典型失败模式:智能体在20步以上的任务中开始出现“重复行动”“目标漂移”“提前终止”。
-
根本原因:缺乏层级化规划能力。单智能体往往使用扁平规划(步骤1→2→3…),一旦某步失败,缺乏动态重构计划的鲁棒性。
-
改进方案:
- Plan-and-Solve:先生成完整计划图(含依赖关系),再按拓扑顺序执行。
- 反思机制:每N步插入一次“回顾”,让模型自我评估进度并修正计划(类似AutoGPT的“critique”环节)。
3. 单智能体架构的适用场景(并非总是劣势)
在以下场景中,单智能体反而是最优解:
| 场景类型 | 原因 |
|---|---|
| 任务明确、步骤有限(<10步) | 避免多智能体的通信开销和一致性问题 |
| 强依赖用户交互(如Copilot类应用) | 用户本身充当“监督者”,弥补单智能体的弱点 |
| 工具调用链短 | 单次任务只需调用1-3个API,不需要复杂协调 |
| 对成本敏感 | 多智能体意味着多倍token消耗和多次模型调用 |
典型案例:
Cursor的代码生成智能体、Perplexity的搜索智能体,本质上都是单智能体架构
因为它们每次只处理一个明确的子任务,且用户随时可介入纠偏。
4. 单智能体 vs 多智能体的选择标准
在实际架构选型中,可以按以下决策树判断:
任务复杂度高吗?
├─ 否 → 单智能体(足够)
└─ 是
├─ 任务可以明确分解为独立子任务吗?
│ ├─ 否 → 单智能体+强反思机制(如AutoGPT)
│ └─ 是
│ └─ 子任务之间需要协调或并行吗?
│ ├─ 否 → 单智能体+顺序执行
│ └─ 是 → 多智能体架构
5. 技术演进:单智能体架构的“增强”路径
当前单智能体架构并非停滞不前,而是通过以下方式向“准多智能体”能力靠拢:
① 工作记忆增强
- 不再依赖模型原生窗口,而是外挂结构化工作记忆(如JSON对象),智能体每次行动前先读取当前状态,行动后更新状态。
- 代表框架:LangGraph的StateGraph,允许智能体在循环中维护复杂状态机。
② 虚拟多角色
- 单智能体内通过角色提示模拟多智能体协作(如“现在你作为产品经理思考…现在你作为工程师实现…”)。
- 优点:避免多智能体间的通信延迟,缺点:容易产生角色混淆。
③ 自省与重试策略
- 引入异常处理层:当工具调用失败时,不直接报错,而是让模型分析错误原因并尝试替代方案(如换个API参数、改用另一种工具)。
总结
如果要在生产环境中使用单智能体,关键在于:
- 严格控制任务粒度——不要让它处理超过15步的复杂任务。
- 外挂记忆与状态管理——用结构化存储补偿上下文窗口限制。
- 设计强健的循环终止条件——避免无限循环或token浪费。
简单大模型调用实现
#pip install openai
from openai import OpenAI
import os
api_key = "这里输入api-key"
client = OpenAI(
api_key=api_key,
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", #选用的是千问模型地址
)
completion = client.chat.completions.create(
model="qwen-max-latest", #模型型号
messages=[
{"role": "system", "content": "你是一个专业的厨师助手。"}, #设置角色
{"role": "user", "content": "你好,请问如何做红烧牛肉?"} #提出问题
]
)
print("AI 回复:"+completion.choices[0].message.content) #显示内容
#按照需求换成其他大模型 记得更换url 更换api-key【保密】 更换模型名词
#这里直接使用http调用deepseek大模型
import requests
import json
def call_deepseek_api(api_key=''):# DeepSeek API调用示例
url = "https://api.deepseek.com/v1/chat/completions"
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json" }
payload = {
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "你好"}]
}
response = requests.post(url, headers=headers, json=payload) # 发送请求
result = response.json()# 获取JSON响应
print("=====================完整响应:=====================")
print(json.dumps(result, indent=2, ensure_ascii=False))
print("====================分析返回数据====================")
print(f"result 类型: {type(result)} 键: {result.keys()}")
choices = result['choices']
print(f"choices 类型: {type(choices)} 长度: {len(choices)}")
first_choice = choices[0]
print(f"first_choice 键: {first_choice.keys()}")
message = first_choice['message']
print(f"message 键: {message.keys()}")
content = message['content']
print(f"content 对话: {content}")
print("===============================================")
assistant_response = result['choices'][0]['message']['content']
print(f"\n最终提取的内容: {assistant_response}")
print("===============================================")
return assistant_response
if __name__ == "__main__":
mock_response=call_deepseek_api("sk-这里输入你的deepseek-apikey")
简单大模型嵌入向量
要实现RAG(检索增强生成)的第一步 将文本转变成嵌入向量
#在这个.py文件下新建.env文件
#写入API_KEY='sk-...你的千问api密钥...'
from dotenv import load_dotenv
from openai import OpenAI
import os
load_dotenv() #加载.env文件 内容
# 1. 配置客户端
client = OpenAI(
api_key=os.getenv("API_KEY"), # 从环境变量读取API Key
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 千问API基础URL
)
# 2. 调用嵌入API
response = client.embeddings.create(
input=["大模型"], # 输入文本(可以是列表)
model="text-embedding-v3" # 嵌入模型
)
# 3. 获取结果
embedding = response.data[0].embedding # 提取向量
print(f"向量维度: {len(embedding)}")
print(f"向量前10个值: {embedding[:10]}")
#在这个.py文件下新建.env文件
#写入API_KEY='sk-...你的千问api密钥...'
from dotenv import load_dotenv
from openai import OpenAI
import os
load_dotenv() #加载.env文件 内容
client = OpenAI(
api_key=os.getenv("API_KEY"), # 使用.env文件下的阿里云千问API密钥
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 千问API基础URL
)
def get_embeddings(texts, model="text-embedding-v3"):# text-embedding-v3是嵌入模型名称
"""
texts: 是一个包含要获取嵌入表示的文本的列表
model: 用来指定要使用的模型的名称
生成文本的嵌入表示,结果存储在data中。
"""
data = client.embeddings.create(input=texts, model=model).data # 调用千问的嵌入API
return [x.embedding for x in data] # 返回了一个包含所有嵌入表示的列表
test_query = ["大模型"]# 测试查询
vec = get_embeddings(test_query)# 获取嵌入向量
print("向量列表:", vec)
print("第一个文本的嵌入向量:", vec[0])
print("嵌入向量的维度:", len(vec[0]))
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)