LangChain之Agent代理(上)

Agent代理

概述

Agent代理的核心思想是使用语言模型来选择要采取的一系列动作。在链中,动作序列是硬编码的。在代理中,语言模型用作推理引擎来确定要采取哪些动作以及按什么顺序进行。

因此,在LangChain中,Agent代理就是使用语言模型作为推理引擎,让模型自主判断、调用工具和决定下一步行动。

Agent代理像是一个多功能接口,能够使用多种工具,并根据用户输入决定调用哪些工具,同时能够将一个工具的输出数据作为另一个工具的输入数据。

分类

根据几个维度对所有可用的代理进行分类:

makefile复制代码模型类型:代理适用于那类模型。Chat(接收消息,输出消息)、LLM(接收字符串,输出字符串)

聊天历史: 代理是否支持聊天历史。如果支持,这意味着它可以用作聊天机器人。如果不支持,那么它更适合单一任务。

多输入工具:  代理是否支持具有多个输入的工具。如果一个工具只需要单个输入,那么LLM通常更容易知道如何调用它。

并行函数调用: 让LLM同时调用多个工具可以大大提高代理的效率

所需模型参数: 代理是否需要模型支持任何其他参数。某些代理类型利用了OpenAI 函数调用等功能,这些功能需要其他模型参数。如果不需要,则意味着一切都通过提示完成
代理名称模型类型聊天历史多输入工具并行函数调用所需模型参数描述Agent
OpenAI toolsChattoolsOpenAI将调用单个函数的能力称为 函数,将调用一个或多个函数的能力称为工具。create_openai_tools_agent
OpenAI functionsChatxfunctions使用Op0nAl函数集合的代理。已弃用转而使用OpenAI toolscreate_openai_functions_agent
XML AgentLLMxx某些语言模型(例如 Anthropic 的 Claude)特别擅长推理/编写 XML。create_xml_agent
Structured chatChatx使用结构化工具集的代理create_structured_chat_agent
JSON Chat AgentChatxx代理使用 JSON 来格式化其输出,旨在支持聊天模型。create_json_chat_agent
ReActLLMxx推理和执行,推理后决定调用工具或者根据工具返回结果确定完成任务create_react_agent
Self-ask with searchLLMxxx通过追问和中间答案,引导发现最终答案create_self_ask_with_search_agent

Agent的基本使用

构建一个具有两种工具的代理:一种用于在线查找,另一种用于查找加载到索引中的特定数据。

准备操作

在LangChain中有一个内置的工具,可以方便地使用Tavily搜索引擎作为工具。

访问Tavily(用于在线搜索)注册账号并登录,获取API 密钥

设置OpenAI和TAVILY的API密钥

python复制代码import os
os.environ["OPENAI_BASE_URL"] = "https://xxx.com/v1"
os.environ["OPENAI_API_KEY"] = "sk-BGFnOL9Q4c99B378Bxxxxxxxxxxxxxxxx13bc437B82c2"
os.environ["TAVILY_API_KEY"] = 'tvly-Scx77cTxxxxxxxxxxxxx3rmxRIM8'

定义工具

首先需要创建想要使用的工具。这里使用两个工具:

复制代码Tavily(用于在线搜索)

创建的本地索引的检索器

1.Tavily在线搜索

python复制代码# 加载所需的库
from langchain_community.tools.tavily_search import TavilySearchResults

# 查询 Tavily 搜索 API 并返回 json 的工具
search = TavilySearchResults()
# 执行查询
res = search.invoke("目前市场上苹果手机15的平均售价是多少?")
print(res)

执行查询结果如下: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.创建检索器

根据上述查询结果中的某个URL中,获取一些数据创建一个检索器。

这里使用一个简单的本地向量库FAISS,使用FAISS的CPU版本,需要安装FAISS库:

python

复制代码pip install faiss-cpu
python复制代码from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 加载HTML内容为一个文档对象
loader = WebBaseLoader("https://www.ithome.com/0/718/713.htm")
docs = loader.load()
# 分割文档
documents = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200).split_documents(docs)
# 向量化
vector = FAISS.from_documents(documents, OpenAIEmbeddings())
# 创建检索器
retriever = vector.as_retriever()
# 测试检索结果
print(retriever.get_relevant_documents("iPhone 15平均销售价格是多少?")[1])

检索结果如下: 在这里插入图片描述

3.得到工具列表

python复制代码from langchain.tools.retriever import create_retriever_tool
# 创建一个工具来检索文档
retriever_tool = create_retriever_tool(
    retriever,
    "iPhone_price_search",
    "搜索有关 iPhone 15 的价格信息。对于iPhone 15的任何问题,您必须使用此工具!",
)

# 创建将在下游使用的工具列表
tools = [search, retriever_tool]

初始化大模型

选择将驱动代理的LLM,为了模型回答更严谨,设置temperature=0

python复制代码from langchain_openai import ChatOpenAI

# 初始化大模型
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

创建Agent

这里使用LangChain中一个叫OpenAI functions的代理,然后得到一个AgentExecutor代理执行器。

AgentExecutor是代理执行器,它实际上调用代理,执行其选择的操作,将操作输出传回代理,然后重复。

python复制代码from langchain import hub

# 获取要使用的提示
prompt = hub.pull("hwchase17/openai-functions-agent")
# 打印Prompt
print(prompt)

# 使用OpenAI functions代理
from langchain.agents import create_openai_functions_agent

# 构建OpenAI函数代理:使用 LLM、提示模板和工具来初始化代理
agent = create_openai_functions_agent(llm, tools, prompt)

from langchain.agents import AgentExecutor
# 将代理与AgentExecutor工具结合起来
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

运行Agent

注意:目前这些都是无状态查询

python复制代码# 执行代理
agent_executor.invoke({"input": "目前市场上苹果手机15的平均售价是多少?如果我在此基础上加价5%卖出,应该如何定价??"})

执行部分日志记录如下:

python复制代码> Entering new AgentExecutor chain...

Invoking: `iPhone_price_search` with `{'query': 'iPhone 15 average selling price'}`


苹果 iPhone 15/Pro系列国行价格出炉,5999 元起 - IT之家





根据搜索结果,苹果 iPhone 15 系列的国行价格从 5999 元起售。如果您想在此基础上加价5%,您可以按照以下方式定价:

- iPhone 155999+ 5% = 6298.95- iPhone 15 Plus:6999+ 5% = 7348.95- iPhone 15 Pro:7999+ 5% = 8398.95- iPhone 15 Pro Max:9999+ 5% = 10498.95 元

您可以根据以上价格定价出售您的苹果手机 15 系列产品。希望这可以帮助到您!

> Finished chain.

添加记忆

目前代理是无状态的,这意味着它不记得以前的交互。为了给它记忆,需要传入chat_history

注意:

chat_history是正在使用提示符中的一个变量,因此需要调用它。如果使用不同的提示,可能需要更改变量名称

具体Prompt提示模板内容如下: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 记忆测试:

python复制代码# 加载所需的库
from langchain_community.tools.tavily_search import TavilySearchResults

# 查询 Tavily 搜索 API 并返回 json 的工具
search = TavilySearchResults()

# 创建将在下游使用的工具列表
tools = [search]

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

from langchain import hub

# 获取要使用的提示
prompt = hub.pull("hwchase17/openai-functions-agent")

# 使用OpenAI functions代理
from langchain.agents import create_openai_functions_agent

# 创建使用 OpenAI 函数调用的代理
agent = create_openai_functions_agent(llm, tools, prompt)

from langchain.agents import AgentExecutor

# 得到代理工具执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 执行代理
# 传入一个空的消息列表给chat_history,因为它是聊天中的第一条消息
res = agent_executor.invoke({"input": "hi! my name is bob", "chat_history": []})
print(res)

from langchain_core.messages import AIMessage, HumanMessage

agent_executor.invoke(
    {
        "chat_history": [
            HumanMessage(content=res['input']),
            AIMessage(content=res['output']),
        ],
        "input": "what's my name?",
    }
)

执行日志如下,代理明显有了记忆

python复制代码> Entering new AgentExecutor chain...
Hello Bob! How can I assist you today?

> Finished chain.
{'input': 'hi! my name is bob', 'chat_history': [], 'output': 'Hello Bob! How can I assist you today?'}


> Entering new AgentExecutor chain...
Your name is Bob! How can I assist you today, Bob?

> Finished chain.

自动跟踪这些消息,可以将其包装在RunnableWithMessageHistory中

python复制代码from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory

message_history = ChatMessageHistory()

agent_with_chat_history = RunnableWithMessageHistory(
    agent_executor,
    lambda session_id: message_history,
    input_messages_key="input",
    history_messages_key="chat_history",
)

agent_with_chat_history.invoke(
    {"input": "hi! I'm bob"},
    config={"configurable": {"session_id": "<foo>"}},
)

agent_with_chat_history.invoke(
    {"input": "what's my name?"},
    config={"configurable": {"session_id": "<foo>"}},
)

执行日志如下:

python复制代码> Entering new AgentExecutor chain...
Hello Bob! How can I assist you today?

> Finished chain.


> Entering new AgentExecutor chain...
Your name is Bob! How can I assist you, Bob?

> Finished chain.

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的zi yuan得到学习提升
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些P DF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.2.1 什么是Prompt
    • L2.2.2 Prompt框架应用现状
    • L2.2.3 基于GPTAS的Prompt框架
    • L2.2.4 Prompt框架与Thought
    • L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
    • L2.3.1 流水线工程的概念
    • L2.3.2 流水线工程的优点
    • L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
    • L3.1.1 Agent模型框架的设计理念
    • L3.1.2 Agent模型框架的核心组件
    • L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
    • L3.2.1 MetaGPT的基本概念
    • L3.2.2 MetaGPT的工作原理
    • L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
    • L3.3.1 ChatGLM的特点
    • L3.3.2 ChatGLM的开发环境
    • L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
    • L3.4.1 LLAMA的特点
    • L3.4.2 LLAMA的开发环境
    • L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习zhi nan已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值