一、ai agent是什么?
Ai agent是一个具备自主决策能力的智能系统。根据Open AI的定义,它通过感知->决策->执行->学习的闭环机制,实现对复杂环境的适应性交互。智能体不仅能生成内容,还能通过API接口或物理设备完成实际操作。例如,特斯拉Autopilot通过传感器感知路况,自主规划行驶路径。
目前,我对这个ai agent的认识就是,给ai一个工具箱,ai可以从工具箱中选取合适的工具来使用辅助其生成答案。
二、原理详解
2.1 agent整体原理
agent智能体的四个组成部分,规划、记忆、工具以及执行(行动)。
- 其中规划是其中最核心的部分,它由两个部分组成,一个是任务分解,另一个是决策分析。任务分解负责的是把复杂的任务分解成一系列可执行的步骤。该部分模型使用一种称为PDDL(planning domain definition language)的语言来帮助它定义和解决各种复杂任务。该语言包括两个部分,一个是域模型、一个是问题实例,域模型用于描述任务中可能的所有动作和状态;问题实例用于描述当前任务的初始状态和目标状态。然后根据任务分解后的结果来进行决策分析,以确定最优的执行路径。决策分析包括评估当前状态、选择行动、优化策略和预测结果。
- 记忆主要包括四种记忆类型:背景知识、上下文记忆、外挂记忆以及特定领域的微调。
其中背景知识是指基座大模型就已经训练过的以学习知识。
上下文记忆是指Agent在用户交互过程中得到的信息。
外挂记忆通过集成外部知识库或者数据库来增强Agent的记忆功能–这个感觉就是rag。
特定领域的微调就是利用基座模型对特定领域的相关知识进行再学习、再训练。 - 工具:就是给agent分配工具,
- 执行
2.2 agent的大脑通过思维链能力实现任务分解。
思维链(Chain-of-Thought)已经成为一种标准的提示技术,用于提高模型在复杂任务中的表现。模型被要求“一步一步地思考”,将艰巨的任务分解为更小更简单的步骤。思维链将大任务转化为多个可管理的任务,并帮助人们理解模型的思维过程。换句话说,思维链通过要求模型在输出最终答案之前,显示输出中间逐步的推理步骤,借此来增强大模型在数学,常识和推理方面的能力。
一个完整的包含Cot的Prompt往往由指令(Instruction)、逻辑依据(Rationale)、实例(Example)三部分组成。
指令:用于描述问题并且告知大模型的输出格式。
逻辑依据:指CoT的中间推理过程,可以包含问题的解决方案,中间推理步骤以及与问题相关的任何外部知识。
示例:指以少样本的方式为大模型提供输入输出对的基本格式,每一个示例都包含:问题、推理过程与答案。
实现方式:
提示工程:通过对输入提示的设计,引导模型产生包含思维链的回答。例如,在问题后添加“让我们一步一步来思考这个问题”,鼓励模型生成详细的推理过程。
多步推理训练:专门设计的数据集和训练方法,让模型学习如何从给定的信息出发,经过一系列逻辑步骤,最终达到解决方案。
强化学习:使用强化学习算法奖励模型产生合理的推理路径,惩罚不合理的路径,以此优化其推理能力。
外部知识源:结合外部知识库(如搜索引擎),帮助模型获取额外信息,辅助其完成更复杂的推理任务。
三、代码分解
3.1 创建tools工具
3.1.1 导入langchain中已经定义过的工具
from langchain.agents import load_tools
tools = load_tools([“serpapi"])
3.1.2 自定义tool工具
from langchain.tools import Tool,tool
@tool("weekday")
def weekday(date_str:str) -> str:
"""Convert date to weekday name””" #这里的注解必须要有
date_str = "".join(c for c in date_str if c.isdigit() or c == '-')
print(date_str)
d = parser.parse(date_str)
return calendar.day_name[d.weekday()]
tools += [weekday]
from langchain_core.tools import Tool
#定义查询订单状态的函数
def query_order_status(order_id):
if order_id == "1024":
return "订单 1024 的状态是:已发货,预计送达时间 3-5 个工作日。"
else:
return f"未找到订单{order_id}的信息,请检查订单号是否正确。"
#定义退款政策说明函数
def refund_policy(keyword):
print("keyword = ",keyword)
return "我们的退款政策是:在购买后7天可以申请全额退款,需提供购买凭证。"
tools = [
Tool(
name="queryOrderStatus",
func=query_order_status,
description="根据订单ID查询订单状态",
args={"order_id":"订单的ID"}
),
Tool(
name="refundPolicy",
func=refund_policy,
description="查询退款政策内容",
args={"keyword":"查询退款政策内容"}
),
TavilySearchResults(max_results=1)
]
3.2创建agent代理
#react_agent
from langchain.agents import create_react_agent
agent = create_react_agent(llm,tools,prompt)
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(agent=agent,tools=tools,verbose=True)
agent_executor.invoke({"input":"周杰伦生日是那天 是星期几?"})
#initialize_agent示例
from langchain.agents import initialize_agent
agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.invoke({"input":"目前市场上苹果手机16的售价是多少?如果我在此基础上加价5%卖出,应该如何定价?用中文回答"})
四、案例展示
下面就是一个最简单的ai agent的案例。工具是一个网络搜索接口,利用接口搜索相关答案。
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain.agents import initialize_agent
from langchain.agents import Tool
import os
os.environ['TAVILY_API_KEY'] = ‘****’ #tavily网站的个人api key
# 查询 Tavily 搜索 API 并返回 json 的工具
search = TavilySearchResults(max_results=1)
search_tool = Tool(
name="Search",
func=search.run,
description="Useful when you need to answer questions about current events. You should ask targeted questions."
)
# 创建将在下游使用的工具列表
tools = [search]
#导入ollama本地部署大模型的方法
from langchain_ollama import OllamaLLM
# 导入ollama部署的大模型
llm = OllamaLLM(model = "deepseek-r1:1.5b", streaming=True)
agent_runnable = initialize_agent(tools, llm)
response = agent_runnable("weather in San Francisco")