关键知识点

一、核心定义与运作原理解析
1、概念溯源:从泛化到特指的术语分化

在计算机科学领域,“Agent”(代理)是一个具有多重含义的术语。它既可以指代网络通信中的代理服务器,也能表示分布式系统中的自治实体。**而 “AI Agent”(智能体)则是人工智能领域的专有概念,特指具备感知、决策、行动能力的智能系统。**这种术语的分化,反映了计算机技术从工具属性向智能属性的演进路径。

2、计算机术语中的"Agent"

根据 IEEE 标准,Agent 是"代表用户或其他程序,以持续、自主的方式执行特定任务的软件实体"。其核心特征是代理性(代表第三方执行操作)和自主性(无需持续人工干预)。

3、AI领域的"Agent"

国际智能体基金会(FIPA)将 AI Agent 定义为 “能够通过传感器感知环境,并通过效应器作用于环境的自治系统”。其核心特征是智能性(基于算法的决策能力)和社会性(与人类或其他 Agent 交互)。

4、大模型时代:AI Agent定义
  1. 大语言模型可以接受输入,可以分析&推理、可以输出文字、代码、媒体。然而,其无法像人类一样,拥有规划思考能力、运用各种工具与物理世界互动,以及拥有人类的记忆能力。
  2. Al Agents是基于LLM的能够自主理解、自主规划决策、执行复杂任务的智能体。
  3. Agent的设计目的是为了处理那些简单的语言模型可能无法直接解决的问题,尤其是当这些任务涉及到多个步骤或者需要外部数据源的情况。
  4. LLM:接受输入、思考、输出
  5. AI Agent:LLM(接受输入、思考、输出) + 记忆 + 工具 + 规划
5、减缓大语言模型幻觉策略分析
  1. Prompt:通过精心设计的提示,提高模型输出的准确性。通用基础问题
  2. RAG:通过检索增强生成(RAG),将外部信息集成到生成过程中。知识密集型问题
  3. Agent:使用智能代理管理和协调模型任务以减少幻觉。垂直场景任务型
二、任务拆解|反思改进
步骤家庭成员具体描述智能家具展示内容
感知 (Perception)我感觉有点冷,能不能把温度调高一些?智能家居系统通过语音识别和情感分析“感知”到用户觉得房间温度太低,需要提高温度。
规划 (Planning)\系统根据用户的需求,规划出下一步的行动,决定如何调节房间温度。系统可能会制定以下计划: 1. 检查当前的室内温度。 2. 根据用户的偏好和当前温度决定升高几度合适。 3. 调整温度设置,并告知用户。
行动 (Action)\系统执行计划的行动,首先检查当前温度,例如发现室温是20°C。根据用户的偏好,将温度调高到23°C.并通过语音助手反馈给用户:“我已经将温度调高到23°C,请您稍等,温度将逐渐上升。”
观察 (Observation)现在温度刚刚好!系统观察房间温度的变化,以及用户的反馈。如果用户在几分钟后再次说“现在温度刚刚好”,系统会感知到环境调节成功。如果用户还觉得冷,系统可能会调整计划,进一步调高温度。

1、任务拆解:思维链COT,自洽性,思维树TOT

2、反思改进:ReAct,Plan-and-Execute

三、AI Agent应用开发框架
框架代理模式特性架构设计核心功能技术生态企业****级支持
LangChain单代理可通过组合链模拟多代理模块化设计(链、代理、记忆、工具)链(Chains)代理(Agents)工具集成(Tools)记忆(Memory)文档加载器广泛集成向量数据库兼容社区插件丰富社区驱动(开源) 商业支持有限
LangGraph单代理+复杂状态流支持多步骤决策有向图结构(节点=任务步骤,边=流程逻辑)循环/分支控制状态管理并行节点执行与LangChain互补需自行扩展业务逻辑开源
Semantic Kernel单代理通过插件扩展功能插件化架构(Skills=功能模块,Planner=任务规划)任务自动分解(Planner)语义函数 微软生态插件(Teams, Office等)紧密绑定Azure.NET/C#生态优先微软官方支持企业级SLA
AutoGen多代理多角色协作设计多智能体协同(Agent=独立角色,GroupChat=协作环境)多角色Agent定义自主对话协商任务自动分配多Agent模式独特依赖OpenAI模型微软研究院维护学术导向
CrewAI多代理角色分工协作角色分工(Agent=团队成员,Task=目标,Process=流程)角色与目标定义流程可视化工具集成新兴框架,生态逐步扩展兼容常见工具(如搜索引擎、API)开源
四、AI Agent实践
1、The First Agent
import os

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain_community.agent_toolkits.load_tools import load_tools

load_dotenv()
"""
产品与API
SERPAPI_API_KEY = "ee37d0eae22dbd837968f7c72b651c2feb2f3c1a3987d3cc51a11655ccbe21d4"
"""

# 定义llm
llm = ChatOpenAI(temperature=0,
                 model="qwen-plus",
                 api_key=os.getenv("DASHSCOPE_API_KEY"),
                 base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")

# 定义工具
tools = load_tools(["serpapi", "llm-math"], llm=llm)

# 初始化agent
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,  # 这里有不同的类型
    verbose=True,  # 是否打印日志
)

result = agent.invoke({"input": "新中国成立的时间?它的年龄的平方是多少? 请用中文告诉我这两个问题的答案"})
print(result)

"""
> Entering new AgentExecutor chain...
我需要查找新中国成立的时间,然后使用计算器计算它的年龄的平方。
Action: Search
Action Input: 新中国成立的时间
Observation: October 1, 1949
Thought:新中国成立于1949年。现在我需要计算从成立到现在的年龄,然后求它的平方。
Thought: 我需要计算1949年到现在的年份差,这可以通过减法得出。接着用计算器计算年龄的平方。
Action: Calculator
Action Input: (2023 - 1949) ** 2
Observation: Answer: 5476
Thought:新中国成立于1949年,到现在(2023年),它的年龄是74岁。年龄的平方是5476。

Final Answer: 新中国成立于1949年,它的年龄的平方是5476。

> Finished chain.
{'input': '新中国成立的时间?它的年龄的平方是多少? 请用中文告诉我这两个问题的答案', 'output': '新中国成立于1949年,它的年龄的平方是5476。'}
"""
2、AI Agent+Tools+Memory
import os

from dotenv import load_dotenv
from langchain.agents import Tool
from langchain.agents import AgentType
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
from langchain_community.utilities import SerpAPIWrapper
from langchain.agents import initialize_agent
from langchain.chains import LLMMathChain
from langchain.prompts import MessagesPlaceholder

load_dotenv()
"""AgentExecutor"""

# llm = ChatOpenAI(
#     temperature=0,
#     model="gpt-4o-mini",
# )

llm = ChatOpenAI(temperature=0,
                 model="qwen-max-latest",
                 api_key=os.getenv("DASHSCOPE_API_KEY"),
                 base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")
# 构建一个搜索工具
search = SerpAPIWrapper()

# 创建一个数学计算工具
llm_math_chain = LLMMathChain(
    llm=llm,
    verbose=True
)

tools = [
    Tool(
        name="Search",
        func=search.run,
        description="useful for when you need to answer questions about current events or the current state of the world"
    ),
    Tool(
        name="Calculator",
        func=llm_math_chain.run,
        description="useful for when you need to answer questions about math"
    ),
]

print(tools)

# 记忆组件
memory = ConversationBufferMemory(
    memory_key="chat_history",
    return_messages=True
)

agent_chain = initialize_agent(
    tools,
    llm,
    agent=AgentType.OPENAI_FUNCTIONS,
    verbose=True,
    handle_parsing_errors=True,  # 处理解析错误
    agent_kwargs={
        "extra_prompt_messages": [MessagesPlaceholder(variable_name="chat_history"),
                                  MessagesPlaceholder(variable_name="agent_scratchpad")],
    },
    memory=memory  # 记忆组件
)

agent_chain.invoke({"input": "你好"})
agent_chain.invoke({"input": "我叫Cat,很高兴见到你"})
agent_chain.invoke({"input": "1+1等于几?"})
agent_chain.invoke({"input": "好厉害,刚才我们都聊了什么?"})

"""
> Entering new AgentExecutor chain...
你好!有什么问题或者需要帮助的吗?

> Finished chain.


> Entering new AgentExecutor chain...
很高兴见到你,Cat!如果你有任何问题或需要帮助,请随时告诉我。无论是寻找信息、计算数学题还是其他任何事情,我都在这里为你提供帮助。

> Finished chain.


> Entering new AgentExecutor chain...
1+1等于2。

> Finished chain.


> Entering new AgentExecutor chain...
当然可以。我们刚才的聊天内容如下:

1. 你向我打招呼并告诉我你的名字是Cat,很高兴见到我。
2. 我回应了你的问候,并表示如果有什么问题或需要帮助,请随时告诉我。
3. 你询问了1+1等于几。
4. 我回答了1+1等于2。

如果你有任何其他问题或需要进一步的帮助,请随时告诉我!

> Finished chain.
"""
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐