智能体来了:使用简单的 Python 在 30 分钟内从头开始构建您自己的 AI Agent (智能体)

智能体来了:一个专注于AI Agent开发的专业学习与交流社区!

介绍

OpenAI于2022年11月30日发布了ChatGPT,由于其成功,2023年成为AI聊天应用年。我们看到竞争对手提供了类似的产品,甚至开始使用检索增强生成(RAG)构建我们自己的聊天应用程序。现在,随着 2024 年的到来,人们的注意力正在转向AI Agent。这些Agent将为我们做的不仅仅是回答问题。他们将大型语言模型( LLMs )与特定工具(和内存)相结合,使他们能够执行各种任务。可以将其想象为使用螺丝刀或吹叶机;人工智能Agent使用数字工具,例如获取网址、阅读未读的 Gmail 等,来增强其能力并为我们提供帮助。

在这篇文章中,我将指导您使用 OpenAI 模型和 Python 从头开始构建 AI Agent,特别关注 Langchain 库。我们将将此Agent集成到 Slack 应用程序中以实现无缝可用性。接下来,我们将对其进行 docker 化,以确保直接运行和部署。在我们开始添加更多专门设计用于处理一些认知繁重工作的自定义工具之前,此步骤至关重要。这是代码的链接。最好的部分?实现这一目标应该不会超过 30 分钟(前提是您熟悉 Python、Slack 应用程序和 Docker),从而允许您创建自己的个人 AI Agent!

第 1 步:使用 GPT-4 LLM的 Hello World AI

首先,让我们设置一个虚拟环境,以在干净、隔离的设置中管理我们的依赖项。我们需要的主要 Python 库是 OpenAI 和 Langchain。此外,您还需要提供 OpenAI API 密钥才能进行 API 调用。这应该存储在名为OPENAI_API_KEY的环境变量中,Langchain 将自动使用该环境变量。我们将此密钥保存在.env文件中,并使用python-dotenv库为我们的开发环境加载它。

对于核心代码,我们将从名为agent.py的文件开始,并通过对 OpenAI 的 GPT-4 进行简单的 API 调用来启动。代码如下:

# Import all the necessary libraries
from dotenv import load_dotenv
from langchain_community.chat_models import ChatOpenAI

# Load the environment variables
load_dotenv()

# Define which LLM to use
# gpt-4-11-06-preview is the GPT-4 turbo model launched by OpenAI at their Dev day in 2023
llm = ChatOpenAI(model="gpt-4-1106-preview", temperature=0)

output = llm.invoke("What would be the AI equivalent of Hello World?")
print(output)

此时,您应该处于此存储库的首次提交 - https://github.com/gpsandhu23/agent_tutorial/commit/1d88b788a712b307bc1f41d30c3ece7883cc424c

第 2 步:引导基本 AI Agent

现在,让我们使用 Langchain 的Agent实现在agent.py中引导 AI Agent。这涉及几个关键组成部分:

  1. 提示:这定义了Agent的目的和指示。您可以在此处注入个性化,影响您想要的座席的语气或风格。
  2. 工具:您可以在此处指定Agent完成任务可用的工具。最初,我们将从一个空列表开始,逐步添加工具来增强Agent的功能。
  3. LLM (大型语言模型):我们将利用 OpenAI 的 GPT-4 Turbo(撰写本文时最佳可用模型)。
  4. 记忆:此功能使Agent能够回忆过去的交互,从而促进自然的后续问题。

智能体来了:使用简单的 Python 在 30 分钟内从头开始构建您自己的 AI Agent 智能体(上篇)_人工智能

设置这些元素后,您可以通过创建Agent执行器并使用输入调用它来运行Agent。下面是agent.py在这个阶段的样子:

# Import all the necessary libraries
from dotenv import load_dotenv
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.agents.format_scratchpad import format_to_openai_function_messages
from langchain.agents import AgentExecutor
from langchain.agents.output_parsers import OpenAIFunctionsAgentOutputParser

# Load the environment variables
load_dotenv()

# gpt-4-11-06-preview is the GPT-4 turbo model launched by OpenAI at their Dev day in 2023
llm = ChatOpenAI(model="gpt-4-1106-preview", temperature=0)
# Add chat history to the Agent as short term memory
chat_history = []

# Add tools to the Agent to extent capabilities
tools = []

# Define the chat prompt
prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful personal AI assistant named TARS. You have a geeky, clever, sarcastic, and edgy sense of humor."),
    MessagesPlaceholder(variable_name="chat_history"),
    ("user", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad"),
])

# Define the agent
agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_to_openai_function_messages(x["intermediate_steps"]),
        "chat_history": lambda x: x["chat_history"],
    }
    | prompt
    | llm
    | OpenAIFunctionsAgentOutputParser()
)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# Run the agent
user_task = "What would be the AI equivalent of Hello World?"
output = agent_executor.invoke({"input": user_task, "chat_history": chat_history})
print(output['output'])

您可以在此提交中查看此状态下的代码 - https://github.com/gpsandhu23/agent_tutorial/commit/f5d4ff06c75c77b269dc14e499610a20b03598b0

第 3 步:添加 Slack 集成

现在我们已经在终端中运行了一个基本Agent,是时候通过将其与 Slack 集成来使其更易于访问了。考虑到我们中的许多人全天都打开 Slack,将 AI 带入这个熟悉的空间是切合实际的,而不是期望人们适应 AI 交互的新环境。

如果您以前没有创建过 Slack 应用程序,请不要担心,它非常简单。您的 AI Agent需要以下范围才能正常运行:

oauth_config:
  scopes:
    bot:
      - chat:write
      - files:read
      - im:history
      - im:read
      - im:write
settings:
  event_subscriptions:
    bot_events:
      - message.im

设置应用程序后,将以下详细信息添加到您的.env文件中:

SLACK_APP_TOKEN="xapp-..."
SLACK_BOT_TOKEN="xoxb-..."
SLACK_SIGNING_SECRET="..."

接下来,更新您的requirements.txt以包含slack_bolt ,它是构建Slack应用程序的主要SDK。现在,让我们创建一个main.py来处理来自 Slack 的直接消息 (DM) 并调用我们在agent.py中创建的Agent。

您可以在此提交中看到此阶段的代码: https://github.com/gpsandhu23/agent_tutorial/commit/9fa17ff67a42b90b1c31d2dfdf69eaf4a664f321 。

第 4 步:对应用程序进行 Docker 化

下一步是对应用程序进行 Docker 化,这将允许跨各种环境轻松部署,而无需担心执行兼容性。这涉及创建一些关键文件:

  1. Dockerfile :此文件包含 Docker 构建应用程序映像的一组指令。
  2. docker-compose.yml :此 YAML 文件定义了 Docker 容器在生产中的行为方式。
  3. .dockerignore :与.gitignore类似,此文件告诉 Docker 在构建映像时要忽略哪些文件和文件夹。

有了这些组件,您的应用程序就可以进行容器化部署,确保跨不同系统的一致和可靠的操作。

您可以在此提交中查看此开发阶段的代码: https://github.com/gpsandhu23/agent_tutorial/commit/a24bf65966c4602afca99df6d5772ed8b54d03c4 。

第 5 步:发送 DM

Agent现在可以通过 Slack 接收 DM 并做出响应。恭喜!你刚刚构建了自己的人工智能Agent!

智能体来了:使用简单的 Python 在 30 分钟内从头开始构建您自己的 AI Agent 智能体(上篇)_Docker_02

结论

我希望本指南能让您了解什么是人工智能Agent以及如何自己构建人工智能Agent。在接下来的文章中,我将引导您向该Agent添加更多工具,增强其处理更多认知繁重工作的能力。这包括阅读电子邮件、管理 Slack DM、填写文书等任务。请继续关注,将您的人工智能Agent转变为更强大的个人助理,为您处理日常数字杂务!