LangChain是Python和JavaScript/Typescript的功能强大库,可让您快速制作大型语言模型应用程序。它允许您将LLM任务链接在一起(因此名称),甚至允许您快速,轻松地运行自主座位。在此博客文章中,我们将探讨如何创建代理并定义这些代理可以使用的自定义工具。
先决条件
- python 3.9
- 3.10及以上的一些Langchain的模块存在一些问题。
- An OpenAI API Key
入门
我们将创建一个python虚拟环境并以这种方式安装依赖项。
mkdir myproject
cd myproject
# or python3, python3.9, etc depending on your setup
python -m venv env
source env/bin/activate # this will need run every time before using your agent
一旦完成,我们就可以安装依赖项。本教程我们唯一需要的是Langchain和Openai。最后,python-dotenv
将用于将OpenAI API键加载到环境中。
pip install langchain openai python-dotenv requests duckduckgo-search
Langchain是一个非常大的图书馆,因此可能需要几分钟。在下载时,创建一个名为.env
的新文件并粘贴了您的API键。这是一个示例:
OPENAI_API_KEY=Your-api-key-here
一旦完成,我们就可以制作第一个链!
快速概念
-
Agents **********是一种在循环中运行LLM以完成任务的方式。代理的定义以下是:
- Agent Type - 这定义了代理如何对某些事件和输入的作用和反应。对于本教程,我们将重点关注ReAct代理类型。
- LLM - 实际运行您提示的AI。
-
Tools - 这些是Python(或JS/TS)功能,您的经纪人可以呼吁它们与自身外部的世界互动。这些可以像您想要的一样简单或复杂!
- 许多工具制造了Toolkit。 Langchain内置了许多toolkits already available,但是在此示例中,我们将自己制作。
代理商
代理使用LLM(或LLM链)以及工具包的组合,以执行一系列预定的步骤以实现目标。在此示例中,我们将创建一些自定义工具以及Langchain提供的DuckDuckgo搜索工具来创建研究代理。
1。导入必要的库
import requests
from bs4 import BeautifulSoup
from dotenv import load_dotenv
from langchain.tools import Tool, DuckDuckGoSearchResults
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain
from langchain.agents import initialize_agent, AgentType
这是导入的分解:
-
requests
:一个流行的Python库,用于提出HTTP请求。 -
BeautifulSoup
:用于网络刮擦目的的库,将数据从HTML和XML文件中抽出。 -
load_dotenv
:一种从.env
文件加载环境变量的方法。 - Langchain特定的进口:这些特定于Langchain框架,用于定义工具,提示,聊天模型,链条和代理。
2。加载环境变量
load_dotenv()
此行加载来自.env
文件的环境变量。如果您有不想将API键或其他敏感信息进行脚本编码,这将很有用。
3。设置DuckDuckgo搜索工具
ddg_search = DuckDuckGoSearchResults()
这将Langchain提供的DuckDuckgo搜索工具初始化。它允许您使用DuckDuckgo搜索网络并检索结果。
4。定义Web请求的标题
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0'
}
这为我们的Web请求设置了一个用户代理标头。有些网站可能会阻止没有用户代理集的请求,以为它们来自机器人。
5。解析HTML内容
def parse_html(content) -> str:
soup = BeautifulSoup(content, 'html.parser')
text_content_with_links = soup.get_text()
return text_content_with_links
此功能采用HTML内容,使用Beautifutsoup来解析它,然后从中提取所有文本。
6。获取网页内容
def fetch_web_page(url: str) -> str:
response = requests.get(url, headers=HEADERS)
return parse_html(response.content)
此功能使用requests
库获取网页的内容,然后解析HTML以提取文本。
7。创建Web Fetcher工具
web_fetch_tool = Tool.from_function(
func=fetch_web_page,
name="WebFetcher",
description="Fetches the content of a web page"
)
在这里,我们使用Tool.from_function
方法创建了一个新工具。此工具将使用我们的fetch_web_page
函数获取和解析网页。
8。设置摘要
prompt_template = "Summarize the following content: {content}"
llm = ChatOpenAI(model="gpt-3.5-turbo-16k")
llm_chain = LLMChain(
llm=llm,
prompt=PromptTemplate.from_template(prompt_template)
)
summarize_tool = Tool.from_function(
func=llm_chain.run,
name="Summarizer",
description="Summarizes a web page"
)
本节使用Langchain的Chatopenai型号设置了摘要。我们定义一个提示模板进行摘要,使用模型和提示创建链,然后定义用于汇总的工具。我们使用chatgpt 3,5 16k上下文,因为大多数网页将超过chatgpt 3.5的4K上下文。
9。初始化代理
tools = [ddg_search, web_fetch_tool, summarize_tool]
agent = initialize_agent(
tools=tools,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
llm=llm,
verbose=True
)
在这里,我们正在用定义的工具初始化代理。该代理将能够搜索网络,获取网页并总结它们。请注意,我们如何从汇总工具中重新使用LLM。
10。运行代理
prompt = "Research how to use the requests library in Python. Use your tools to search and summarize content into a guide on how to use the requests library."
print(agent.run(prompt))
最后,我们为代理商定义了一个提示并运行它。代理商将搜索网络以获取有关Python请求库的信息,获取内容获取一些内容,然后总结它。
实验
在本节中,我们将探讨如何从博客文章草案中修改代码以使用实验计划和执行代理。计划和执行代理通过首先计划该做什么,然后执行子任务来实现目标。计划几乎总是由LLM完成,而执行通常是由配备工具的单独代理完成的。
首先,安装Langchain实验软件包。
pip install langchain_experimental
然后,您可以从langchain_experimental.plan_and_execute
软件包导入必要的模块:
from langchain_experimental.plan_and_execute import PlanAndExecute, load_agent_executor, load_chat_planner
加载计划者和执行人:
planner = load_chat_planner(llm)
executor = load_agent_executor(llm, tools, verbose=True)
初始化计划和执行代理:
agent = PlanAndExecute(planner=planner, executor=executor, verbose=True)
用提示来运行代理:
result = agent.run("Research how to use the requests library in Python. Use your tools to search and summarize content into a guide on how to use the requests library.")
print(result)
在此示例中,代理将首先计划完成目标所需的步骤,然后使用提供的工具执行子任务。代理商将在Python中搜索有关请求库的信息,获取相关结果的内容,然后将其汇总到指南中。
请注意,计划和执行代理是实验性的,并且在所有情况下都可能无法正常工作。但是,它可以是自动化复杂任务的强大工具,需要多个步骤和与外部工具的交互。
结论
Langchain是一个改变游戏规则的人,对于希望快速原型大型语言模型应用程序的任何人来说。在短短几分钟内,我们浏览了创建代理,定义自定义工具的过程,甚至尝试实验计划和执行代理以自动化复杂任务。
Langchain的力量在于其简单性和灵活性。无论您是经验丰富的开发人员还是刚开始,Langchain的直觉设计都可以利用前所未有的大型语言模型的功能。从生成创意内容到运行自主代理,可能性是无限的。
那为什么要等?今天深入Langchain,并在您的项目中释放AI的潜力。如果您希望将AI集成到现有的工作流程或产品中,则TimeSurge Labs在这里为您提供帮助。我们热情的AI专家团队专门研究AI咨询,开发,内部工具和LLM托管,致力于建立AI的未来,并帮助您在这个快速变化的行业中蓬勃发展。 Contact us今天!