一、AI Agents 基础:ReAct 范式
示例代码:简单的ReAct智能体
class ReActAgent:
def __init__(self, environment):
self.environment = environment # 初始化环境
def perceive(self):
return self.environment.get_state() # 感知环境状态
def reason(self, state):
if state == 'goal_state':
return 'achieve_goal' # 如果状态是目标状态,则采取实现目标的行动
else:
return 'take_action' # 否则,采取行动改变状态
def act(self, action):
if action == 'achieve_goal':
self.environment.goal_achieved = True # 实现目标
else:
self.environment.change_state() # 改变环境状态
class Environment:
def __init__(self):
self.state = 'initial_state' # 初始状态
self.goal_achieved = False # 目标未实现
def get_state(self):
return self.state # 获取当前状态
def change_state(self):
self.state = 'goal_state' # 改变状态为目标状态
# 创建环境和智能体
env = Environment()
agent = ReActAgent(env)
# 智能体感知、推理和行动的循环
while not env.goal_achieved:
state = agent.perceive()
action = agent.reason(state)
agent.act(action)
二、LangChain Agent: 构建复杂应用的代理系统
示例代码:LangChain Agent基础
from langchain import LangChainAgent, LLM
class CustomLangChainAgent(LangChainAgent):
def __init__(self, llm):
self.llm = llm # 初始化语言模型
def decide_action(self, context):
prompt = f"Given the context: {context}, what should be the next action?" # 根据上下文生成提示
return self.llm.generate_response(prompt) # 使用LLM生成响应
# 创建语言模型和智能体
llm = LLM()
agent = CustomLangChainAgent(llm)
# 决策下一步行动
context = "current_task_status"
action = agent.decide_action(context)
print(f"Next action: {action}")
三、LangChain Agents 设计原理
LangChain Agents的设计原理基于使用LLM来决策和执行一系列动作,以完成特定目标。这种设计提高了系统的灵活性和适应性,能够处理更多复杂的任务和情景。在智能体的核心思想中,LLM被用作推理引擎,用来决定应该采取哪些动作以及动作的执行顺序。这种方法与传统的链式结构(Chains)有所不同。
1. 链式结构(Chains)
2. 代理(Agents)
示例代码:使用LLM进行动态决策
from langchain import LLM
class DynamicDecisionAgent:
def __init__(self, llm):
self.llm = llm # 初始化语言模型
def decide_and_act(self, context):
prompt = f"Context: {context}. What should be the next action?" # 根据上下文生成提示
action = self.llm.generate_response(prompt) # 使用LLM生成响应
self.execute_action(action) # 执行动作
def execute_action(self, action):
print(f"Executing action: {action}") # 执行并打印动作
# 创建语言模型和智能体
llm = LLM()
agent = DynamicDecisionAgent(llm)
# 决策并执行下一步行动
context = "user_request_analysis"
agent.decide_and_act(context)
四、LangChain Agents Ecosystem
1. 规划(Planning)
提示(Prompt):
LLM多角色赋能:通过设定不同角色,LLM能够在不同情境下进行特定的任务。
给予充分的上下文:例如,从Memory中获取的上下文信息可以帮助LLM进行更准确的推理。
学习策略:例如,思维链(CoT)策略能够帮助LLM更好地理解和分解复杂问题。
代理(Agent):代理的主要职责是决策下一步该做什么,通过推理选择最优行动。
示例代码:规划与提示
from langchain import LLM
class PlanningAgent:
def __init__(self, llm):
self.llm = llm # 初始化语言模型
def plan_action(self, context):
prompt = f"Context: {context}. Plan the next action considering all roles." # 根据上下文生成提示
return self.llm.generate_response(prompt) # 使用LLM生成响应
# 创建语言模型和智能体
llm = LLM()
agent = PlanningAgent(llm)
# 规划下一步行动
context = "data_preprocessing"
action_plan = agent.plan_action(context)
print(f"Action Plan: {action_plan}")
2. 记忆(Memory)
短期(Short-term):存储在内存中的信息,帮助智能体在短期内进行任务决策。
长期(Long-term):存储在向量数据库中的信息,帮助智能体在长期任务中进行更有效的推理和决策。
示例代码:记忆管理
class Memory:
def __init__(self):
self.short_term_memory = {} # 初始化短期记忆
self.long_term_memory = {} # 初始化长期记忆
def store_short_term(self, key, value):
self.short_term_memory[key] = value # 存储短期记忆
def store_long_term(self, key, value):
self.long_term_memory[key] = value # 存储长期记忆
def retrieve_short_term(self, key):
return self.short_term_memory.get(key) # 获取短期记忆
def retrieve_long_term(self, key):
return self.long_term_memory.get(key) # 获取长期记忆
# 创建记忆管理实例
memory = Memory()
memory.store_short_term("session_id", "12345")
memory.store_long_term("user_profile", {"name": "Alice", "preferences": "data_analysis"})
print(f"Short-term Memory: {memory.retrieve_short_term('session_id')}")
print(f"Long-term Memory: {memory.retrieve_long_term('user_profile')}")
3. 工具(Tools)
示例代码:工具调用
from langchain import Tool
class ToolAgent:
def __init__(self):
self.tools = {"external_api": Tool("API_Call", self.call_external_api)} # 初始化工具
def call_external_api(self, params):
# 模拟调用外部API
return {"result": f"Processed {params}"}
def use_tool(self, tool_name, params):
tool = self.tools.get(tool_name)
if tool:
return tool.execute(params) # 使用工具执行任务
return None
# 创建智能体并使用工具
agent = ToolAgent()
result = agent.use_tool("external_api", "sample_data")
print(f"Tool Result: {result}")
4. 智能代理分类
行动代理(Action agents):旨在决定行动序列,通常用于工具使用的场景,例如OpenAI Function Call,ReAct。
模拟代理(Simulation agents):设计用于角色扮演,在模拟环境中进行,例如生成式智能体,CAMEL。
自主智能体(Autonomous agent):旨在独立执行以实现长期目标,例如Auto-GPT,BabyAGI。
示例代码:智能代理分类
class ActionAgent:
def __init__(self, llm):
self.llm = llm # 初始化语言模型
def decide_action(self, context):
prompt = f"Context: {context}. Decide the next action." # 根据上下文生成提示
return self.llm.generate_response(prompt) # 使用LLM生成响应
class SimulationAgent:
def __init__(self, role):
self.role = role # 初始化角色
def simulate(self, scenario):
return f"Simulating {self.role} in {scenario}" # 模拟角色在情景中的行为
class AutonomousAgent:
def __init__(self, goal):
self.goal = goal # 初始化目标
def execute(self):
return f"Executing autonomous actions to achieve {self.goal}" # 执行自主行动以实现目标
# 创建不同类型的智能体
llm = LLM()
action_agent = ActionAgent(llm)
simulation_agent = SimulationAgent("Customer")
autonomous_agent = AutonomousAgent("Long-term Goal")
# 执行不同类型的智能体任务
print(f"Action Agent Decision: {action_agent.decide_action('data_analysis')}")
print(f"Simulation Agent Action: {simulation_agent.simulate('sales_scenario')}")
print(f"Autonomous Agent Execution: {autonomous_agent.execute()}")