Day31 - Agent 机制,ReAct 模式

一、模型调用

前置文件:

  • models.py
  • .env

1. 引入依赖

from models import get_chat
from langchain_core.messages import SystemMessage
from langchain_core.messages import HumanMessage
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.prompts import HumanMessagePromptTemplate
from langchain_core.prompts import ChatPromptTemplate
model = get_chat()

 

2. 模型调用

# 标准写法
messages = [HumanMessage(content="你是谁?")]
# 简写
messages = [("system","你是我的男友,你喜欢用温柔宠溺的语气说话,请使用这种风格跟我聊天。"),
    ("user","你是谁?")]

model.invoke(input=messages)

3. 提问

messages = [HumanMessage(content="新中国成立多少年?")]

 

 可见模型无法获取当前时间进行推算。

接下来我们绑上时间函数的工具,看看结果如何

from datetime import datetime
def get_current_datetime():
    """
        获取当前的日期和时间
    """
    now = datetime.now()
    formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
    return formatted_date
model_with_tools = model.bind_tools(tools=[get_current_datetime])

加上获取时间的工具后,模型仍然无法直接推算出多少年。可见模型本身是不能调工具的。

 

二、大语言模型

大语言模型的本质

  • 输入一句话,输出一句话

模型可以调用外部工具(函数)吗?

  • 不能!

模型很聪明,虽然它自己不能调用函数,但是它能很好的判断是否需要调函数。

  • 调用哪个函数?
  • 需要什么参数?

如果需要调用函数,获取相关结果,则需要使用代理模式。

  • 动作代理
  • Agent
from langgraph.prebuilt import create_react_agent

agent = create_react_agent(model=model,tools=[get_current_datetime])

results = agent.invoke(input={"messages":messages})

for msg in results["messages"]:
    msg.pretty_print()

Agent 的技术本质 

人工智能的本质 y = F(x)

agent  做的事都不应该是大模型做的事。

agent 是个工程调度问题,我们把很多的外部能力封装成 tool ,交给大模型参考。

大模型站在大脑的视角,可以灵活调度这些外部工具。

大模型只负责判断什么时候该调用什么工具,以及参数是什么。具体的调用是通过外部代理实现。

大模型不负责具体的调用,动作代理负责配合大模型来调用。

动作代理接收大模型的调用指示,完成调用动作,并把结果返给大模型。

ReAct:Reason + Action 

  • 推理 + 执行 :先思考,再执行
  • 反复推理 + 执行,直至完成

Step By Step 一步一步解决问题

CoT : Chain of Thought 思维链,思考的过程

让大模型参考用户提供的工具来回答问题

def get_apple_price(model):
    """
        查询苹果手机的价格,
        入参:model 为型号,是一个字符串。取值为:‘7s’,‘xs‘,’13pro‘,’14pro‘,’15pro‘等
        返参:单位为美元
    """
    if model == "7s":
        return 999
    elif model == "xs":
        return 1499
    elif mode == "13pro":
        return 2000


def money_exchange(amount):
    """
        实现美元兑换人民币功能
        请注意:
            1. 入参是一个浮点数,单位是美元。
            2. 返参也是一个浮点数,是转换后的人民币
    """
    return amount * 7.32
agent = create_react_agent(model=model, 
                           tools=[get_apple_price, get_current_datetime,money_exchange])


results = agent.invoke(input={"messages":[("user","7s多少人民币?")]})

 

agent 绑定的工具,是优先于自己内部的知识

注意事项

在 doc string 中写明:

  • 函数的功能是什么?
  • 入参是什么?类型?距离?
  • 返参是什么?类型?单位?
  • 可以写的长一点,清晰一些,无歧义,善用举例。

定义工具函数的名称,要见名知意,让大模型一看名称就知道要实现什么功能

LangGraph ,也叫 workflow(工作流),其实也是以前的 State Machine(状态机)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值