赞
踩
大型语言模型 (LLM) 已成为能够理解和生成类似人类文本的有用 AI 系统。然而,它们的真正潜力在于它们能够充当推理引擎,处理新信息和回答复杂问题。LangChain的代理通过允许LLM与各种工具和数据库进行交互,协助推理和决策任务来释放这种潜力。在这篇博文中,我们将深入探讨LangChain的代理,探索如何使用内置工具配置它们并创建自定义工具来扩展其功能。
LLM 代理的核心是 LLM 和一组工具(如搜索引擎、API 或数据存储)的组合。LLM充当推理引擎,利用这些工具和可用信息来解决复杂的任务。想象一下,拥有一个私人助理,他不仅可以理解您的人类语言指令,还可以访问和处理来自各种来源的信息,以帮助您做出明智的决定。简而言之,这就是 LLM Agents 的强大功能。
LangChain预装了一系列内置工具,您可以轻松地将其与LLM代理集成。我们来学习两个例子:DuckDuckGo Search 和 Wikipedia。
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.'}
在此示例中,代理使用维基百科工具搜索有关斯蒂芬霍金的信息,检索他的传记并确定他去世时的年龄。
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 或函数。
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 的自定义工具。此工具在调用时返回当前日期,其行为在文档字符串中定义。
在定义了自定义时间工具后,我们需要将其与我们的 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 集成到您的应用程序中。
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。