【LangChain系列】第三篇:Agent代理简介及实践

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 【5月更文挑战第17天】LangChain代理利用大型语言模型(LLM)作为推理引擎,结合各种工具和数据库,处理复杂任务和决策。这些代理能理解和生成人类语言,访问外部信息,并结合LLM进行推理。文章介绍了如何通过LangChain构建代理,包括集成DuckDuckGo搜索和维基百科,以及创建Python REPL工具执行编程任务。此外,还展示了如何构建自定义工具,如获取当前日期的示例,强调了LangChain的灵活性和可扩展性,为LLM的应用开辟了新途径。

[toc]


大型语言模型 (LLM) 已成为能够理解和生成类似人类文本的有用 AI 系统。然而,它们的真正潜力在于它们能够充当推理引擎,处理新信息和回答复杂问题。LangChain的代理通过允许LLM与各种工具和数据库进行交互,协助推理和决策任务来释放这种潜力。在这篇博文中,我们将深入探讨LangChain的代理,探索如何使用内置工具配置它们并创建自定义工具来扩展其功能。

一、LLM Agents

1.LLM Agents是什么

LLM 代理的核心是 LLM 和一组工具(如搜索引擎、API 或数据存储)的组合。LLM充当推理引擎,利用这些工具和可用信息来解决复杂的任务。想象一下,拥有一个私人助理,他不仅可以理解您的人类语言指令,还可以访问和处理来自各种来源的信息,以帮助您做出明智的决定。简而言之,这就是 LLM Agents 的强大功能。

2.LLM Agents 的好处

  • 利用 LLM 的自然语言理解和生成能力:LLM 擅长处理和生成类似人类的文本,使其非常适合自然语言交互。

  • 访问和处理来自各种来源的外部信息:通过与搜索引擎、API 和数据库等工具集成,LLM 代理可以检索和处理超出其初始训练数据的信息。

  • 将推理与复杂任务的工具交互相结合:LLM 代理可以对检索到的信息进行推理,并使用它来做出决策、回答问题,甚至通过与集成工具交互来采取行动。

二、通过LangChain 工具 构建Agent

LangChain预装了一系列内置工具,您可以轻松地将其与LLM代理集成。我们来学习两个例子:DuckDuckGo Search 和 Wikipedia。

1.集成 DuckDuckGo 搜索和维基百科

import os
from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())

#!pip install -U wikipedia

from langchain_experimental.agents.agent_toolkits import create_python_agent
from langchain_experimental.tools.python.tool import PythonREPLTool
from langchain.agents import load_tools
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub

prompt = (
    hub.pull("hwchase17/react")
    + " once you have final answer just exit chain do not continue"
)
llm_model = "gpt-3.5-turbo"
llm = ChatOpenAI(temperature=0, model=llm_model)

tools = load_tools(["llm-math", "wikipedia"], llm=llm)

agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    features="html.parser",
    handle_parsing_errors=True,
    verbose=True,
)

在此代码片段中,我们将导入必要的库和依赖项,配置 LLM 和代理设置,并加载 DuckDuckGo 搜索和 Wikipedia 工具。通过集成这些内置工具,我们的 LLM 代理现在可以使用 DuckDuckGo 在网络上搜索信息并检索相关的维基百科文章以帮助回答问题或解决任务。

agent_executor.invoke({
   "input": "How old is stephan hawkings"})
> Entering new AgentExecutor chain...
I need to find out Stephen Hawking's age.
Action: wikipedia
Action Input: Stephen Hawking
Page: Stephen Hawking
Summary: Stephen William Hawking (8 January 1942 – 14 March 2018) was an English theoretical physicist, cosmologist, and author who was director of research at the Centre for Theoretical Cosmology at the University of Cambridge. Between 1979 and 2009, he was the Lucasian Professor of Mathematics at Cambridge, widely viewed as one of the most prestigious academic posts in the world.

...

I now know Stephen Hawking's age.
Final Answer: Stephen Hawking was 76 years old when he died in 2018.

> Finished chain.
{'input': 'How old is stephan hawkings',
 'output': 'Stephen Hawking was 76 years old when he died in 2018.'}

在此示例中,代理使用维基百科工具搜索有关斯蒂芬霍金的信息,检索他的传记并确定他去世时的年龄。

2.Python Agent

LangChain 还提供了一个 Python REPL工具,允许您的 LLM 代理执行 Python 代码并执行各种编程任务。

agent = create_python_agent(llm, tool=PythonREPLTool(), verbose=True)

customer_list = [
    ["Harrison", "Chase"],
    ["Lang", "Chain"],
    ["Dolly", "Too"],
    ["Elle", "Elem"],
    ["Geoff", "Fusion"],
    ["Trance", "Former"],
    ["Jen", "Ayai"],
]

agent.invoke(
    f"""Sort these customers by
last name and then first name
and print the output: {customer_list}"""
)
> Entering new AgentExecutor chain...
We can use the `sorted()` function in Python to sort the list of customers based on their last name and then first name.
Action: Python_REPL
Action Input: customers = [['Harrison', 'Chase'], ['Lang', 'Chain'], ['Dolly', 'Too'], ['Elle', 'Elem'], ['Geoff', 'Fusion'], ['Trance', 'Former'], ['Jen', 'Ayai']]
sorted_customers = sorted(customers, key=lambda x: (x[1], x[0]))
print(sorted_customers)
Observation: [['Jen', 'Ayai'], ['Lang', 'Chain'], ['Harrison', 'Chase'], ['Elle', 'Elem'], ['Trance', 'Former'], ['Geoff', 'Fusion'], ['Dolly', 'Too']]

Thought: I now know the final answer
Final Answer: [['Jen', 'Ayai'], ['Lang', 'Chain'], ['Harrison', 'Chase'], ['Elle', 'Elem'], ['Trance', 'Former'], ['Geoff', 'Fusion'], ['Dolly', 'Too']]

> Finished chain.
{'input': "Sort these customers by last name and then first name and print the output: [['Harrison', 'Chase'], ['Lang', 'Chain'], ['Dolly', 'Too'], ['Elle', 'Elem'], ['Geoff', 'Fusion'], ['Trance', 'Former'], ['Jen', 'Ayai']]",
 'output': "[['Jen', 'Ayai'], ['Lang', 'Chain'], ['Harrison', 'Chase'], ['Elle', 'Elem'], ['Trance', 'Former'], ['Geoff', 'Fusion'], ['Dolly', 'Too']]"}

在此示例中,代理使用 Python REPL 工具根据客户的姓氏和名字对客户列表进行排序,执行 Python 代码以实现所需的结果。

三、自定义工具

虽然LangChain提供了一系列内置工具,但真正的力量在于能够创建适合您特定需求的自定义工具。这允许您将 LLM 代理连接到所需的任何数据库、API 或函数。

1.通过LangChain Tool装饰器构建自定义工具

from langchain.agents import tool
from datetime import date

@tool
def time(text: str) -> str:
    """Returns todays date, use this for any
    questions related to knowing todays date.
    The input should always be an empty string,
    and this function will always return todays
    date - any date mathmatics should occur
    outside this function."""
    return str(date.today())

在此代码片段中,我们将使用 LangChain 的工具装饰器创建一个名为 time 的自定义工具。此工具在调用时返回当前日期,其行为在文档字符串中定义。

2.将工具与代理集成

在定义了自定义时间工具后,我们需要将其与我们的 LLM 代理集成。为此,我们在创建 create_react_agent 和 AgentExecutor 时将时间工具添加到工具列表中。

agent = create_react_agent(llm=llm, tools=tools + [time], prompt=prompt)
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools + [time],
    features="html.parser",
    handle_parsing_errors=True,
    verbose=True,
)

现在,我们的 LLM 代理配备了时间工具以及我们之前加载的其他内置工具。要查看我们的自定义工具的运行情况,我们可以向代理询问与当前日期相关的问题:

try:
    agent_executor.invoke({
   "input": "whats the date today?"})
except:
    print("exception on external access")
> Entering new AgentExecutor chain...
Action: time
Action Input: ""
2024-05-11
Final Answer: 2024-05-11

> Finished chain.

如您所见,代理认识到它需要使用时间工具来检索当前日期,并且它提供了正确的答案,而无需任何其他提示。这个例子演示了自定义工具在LangChain的代理中的有用性。通过创建自己的工具,您可以将 LLM 代理连接到所需的任何数据源、API 或函数,从而扩展其功能以满足您的特定需求。

小结

LangChain的代理彻底改变了我们对大型语言模型的思考方式。通过将 LLM 与外部工具和数据源相结合,该框架使我们能够处理复杂的推理任务并做出明智的决策。无论您是使用 DuckDuckGo Search 和 Wikipedia 等内置工具,还是根据您的特定需求创建自定义工具,LangChain 的代理都提供了灵活且可扩展的解决方案,用于将 LLM 集成到您的应用程序中。

小编是一名热爱人工智能的专栏作者,致力于分享人工智能领域的最新知识、技术和趋势。这里,你将能够了解到人工智能的最新应用和创新,探讨人工智能对未来社会的影响,以及探索人工智能背后的科学原理和技术实现。欢迎大家点赞,评论,收藏,让我们一起探索人工智能的奥秘,共同见证科技的进步!

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
2月前
|
运维 分布式计算 监控
Dataphin深度评测:企业级数据中台的智能实践利器
Dataphin是一款以全链路治理、智能提效和高兼容性为核心的企业级数据中台工具,特别适用于中大型企业的复杂数据场景。其流批一体能力、资源监控工具及行业化模板库可显著提升数据治理水平并降低运维成本。通过周期补数据功能,历史数据修复效率提升约60%;智能建模功能使建模时间缩短50%。尽管在数据源支持(如SAP HANA、DB2)和用户体验上仍有改进空间,但其强大的功能使其成为构建企业级数据中台的优选工具,尤其适合零售、金融等行业需要高效数据治理与实时分析的企业。
|
6月前
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
本文介绍了阿里云 Java Agent 4.x 版本在基于 OTel Java Agent 二次开发过程中的实践与思考,并重点从功能、性能、稳定性、兼容性四个方面介绍了所做的工作。同时也介绍了阿里云可观测团队积极参与开源建设取得的丰厚成果。
601 38
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
|
2月前
|
机器学习/深度学习 自然语言处理 自动驾驶
如何看待LangChain与智能Agent,二者有什么区别
LangChain是一种专注于自然语言处理的框架,通过链式结构连接多个模型组件,实现复杂任务如问答、对话生成等。其六大核心组件包括模型、检索、代理、链、记忆和回调,帮助开发者快速构建基于大语言模型的应用。智能Agent则是一种能够感知环境、推理决策并采取行动的智能体,涵盖更广泛的智能行为,如自动驾驶、智能家居等。两者分别侧重于语言处理和全面智能行为的技术实现,为不同应用场景提供强大支持。
142 0
|
4月前
|
关系型数据库 OLAP API
非“典型”向量数据库AnalyticDB PostgreSQL及RAG服务实践
本文介绍了非“典型”向量数据库AnalyticDB PostgreSQL及其RAG(检索增强生成)服务的实践应用。 AnalyticDB PostgreSQL不仅具备强大的数据分析能力,还支持向量查询、全文检索和结构化查询的融合,帮助企业高效构建和管理知识库。
249 19
|
5月前
|
人工智能 API 语音技术
TEN Agent:开源的实时多模态 AI 代理框架,支持语音、文本和图像的实时通信交互
TEN Agent 是一个开源的实时多模态 AI 代理框架,集成了 OpenAI Realtime API 和 RTC 技术,支持语音、文本和图像的多模态交互,具备实时通信、模块化设计和多语言支持等功能,适用于智能客服、实时语音助手等多种场景。
432 15
TEN Agent:开源的实时多模态 AI 代理框架,支持语音、文本和图像的实时通信交互
|
5月前
|
人工智能 自然语言处理 JavaScript
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
Agent-E 是一个基于 AutoGen 代理框架构建的智能自动化系统,专注于浏览器内的自动化操作。它能够执行多种复杂任务,如填写表单、搜索和排序电商产品、定位网页内容等,从而提高在线效率,减少重复劳动。本文将详细介绍 Agent-E 的功能、技术原理以及如何运行该系统。
482 5
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
|
5月前
|
数据采集 供应链 搜索推荐
商业案例 I AllData数据中台商业版落地实践
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
5月前
|
人工智能 API 数据库
Qwen-Agent功能调用实践探索
本文详细解析了Qwen-Agent的核心功能——功能调用,涵盖其定义、工作流程、重要性和实际应用,通过实例展示了如何在Qwen-Agent中利用此功能与外部工具和API互动,扩展AI应用范围。
|
6月前
|
JSON 数据可视化 NoSQL
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
本文介绍了LangChain的LLM Graph Transformer框架,探讨了文本到图谱转换的双模式实现机制。基于工具的模式利用结构化输出和函数调用,简化了提示工程并支持属性提取;基于提示的模式则为不支持工具调用的模型提供了备选方案。通过精确定义图谱模式(包括节点类型、关系类型及其约束),显著提升了提取结果的一致性和可靠性。LLM Graph Transformer为非结构化数据的结构化表示提供了可靠的技术方案,支持RAG应用和复杂查询处理。
368 2
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
|
6月前
|
传感器 机器学习/深度学习 自然语言处理
智能代理(Agent)在工具调用与协作中的应用实践
随着人工智能技术的飞速发展,智能代理(Agent)技术已成为解决复杂任务的关键手段。本文深入探讨了如何设计灵活的工具调用机制和构建高效的单/多Agent系统以提升任务执行效率。文章不仅涵盖了相关的理论知识,还提供了丰富的实践案例和代码实现,旨在帮助读者深入理解和应用智能代理技术。
646 2