专栏名称: 旺知识
AI技术最新进展、发展趋势、研发经验、从业经验
目录
51好读  ›  专栏  ›  旺知识

Python编写AI智能体入门教程:基本概念、环境搭建、ReAct规划..

旺知识  · 公众号  ·  · 2024-06-09 15:10

正文

这篇文章是关于如何从头开始用Python创建AI智能体的完整指南。文章首先介绍了AI智能体的概念,然后通过一个基本的AI智能体示例来帮助理解AI智能体的基本结构和发展过程。接着,文章将转向一个高级的现实世界示例。

作者: 张长旺,图源: 旺知识


1 - 什么是AI智能体?

如果我们向像ChatGPT这样的AI提问:"learnwithhasan.com的响应时间是多少?" 你可能会认为它不能回答这个问题。

但如果你回答可以,你也是对的!

两个答案都可能被认为是正确的。原因如下:

ChatGPT对这个问题的回答是:

我不能提供特定网站响应时间的实时信息。响应时间可能会因服务器负载、互联网连接速度和地理位置等因素而有所不同。

有趣的是,它没有能够回答这个问题!

但是,看看现在发生了什么:

答案: 自治AI智能体

自治AI智能体将大型语言模型(LLM)与外部功能和增强的提示机制相结合。

为了理解这个概念,让我们看看LLM是如何能够回答我们的问题的。

1- 查询输入:首先,我们将我们的问题发送给LLM。

2- 使用ReAct系统提示进行处理:LLM由一个ReAct系统提示驱动,允许它思考问题以及应该如何回答。我们称之为一个思考。我们将在下一节中更详细地讨论这个问题。

3- 外部功能执行:然后LLM选择并执行一个外部功能,在这个例子中是"get_website_response_time(URL)"。

4- 响应生成:在获取实时数据后,AI根据结果制定并传递响应。

这种无缝集成思考、决策和行动的过程反映了人类的解决问题过程,展示了AI如何绕过传统的限制。

2 - 环境搭建

在本指南中,我们将使用Python从头开始构建AI智能体。让我们通过设置一个新的Python项目开始。你可以选择任何IDE,但在这个指南中,我将使用Visual Studio Code。

创建并激活虚拟环境

  • 打开你的终端。

  • 创建一个新的虚拟环境并激活它。


安装OpenAI包

在这个例子中,我们将使用OpenAI API作为我们的大型语言模型,尽管你也可以使用Anthropic、Gemini或开源模型。

确保你的API密钥已经准备好。在你的项目中创建一个 .env 文件并添加你的密钥:

OPENAI_API_KEY = "sk-XX"

在激活虚拟环境后,安装OpenAI Python包:

pip install openai

完成了吗?太好了。

设置你的项目文件

创建三个Python文件: actions.py prompts.py main.py

你现在应该有类似这样的东西:

使用OpenAI API生成文本

打开 main.py 文件,创建一个简单的函数来使用OpenAI API生成文本。这个函数将为我们的AI智能体提供动力:

以下是代码:

from openai import OpenAIfrom dotenv import load_dotenv
# 加载环境变量load_dotenv()
# 创建一个OpenAI类的实例openai_client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def generate_text_with_conversation(messages, model="gpt-3.5-turbo"): response = openai_client.chat.completions.create( model=model, messages=messages ) return response.choices[0].message.content

这个脚本从 .env 文件中加载你的API密钥,并创建一个 OpenAI 实例来处理请求。

generate_text_with_conversation 函数很简单,它接收两个参数— model messages —来生成一个响应。

测试你的函数

在继续之前,让我们确保一切按预期工作。通过模拟对话来测试这个函数:

# 定义一个消息列表来模拟对话test_messages = [    {"role": "user", "content": "Hello, how are you?"},    {"role": "system", "content": "You are a helpful AI assistant"}]
# 使用测试消息调用函数response = generate_text_with_conversation(test_messages)print("AI Response:", response)

完成了吗?完美!

现在我们的基本设置已经完成,我们准备进入构建我们的智能体的核心部分。

3 - 定义功能

在本指南的这部分中,我们将指定我们的AI智能体可以访问的动作或功能。这使我们的智能体能够在响应用户查询时利用外部功能。

创建基本功能

打开 actions.py 文件。在这里,我们将定义一个简单的函数来模拟不同网站的响应时间:

def get_response_time(url):    if url == "learnwithhasan.com":        return 0.5    if url == "promptappgpt.wangzhishi.net":        return 0.3    if url == "openai.com":        return 0.4

这个虚拟函数根据提供的URL返回固定的响应时间。它作为一个基本示例帮助我们理解智能体如何利用外部功能。

理解设置

通过定义这些函数,我们建立了一个框架,AI智能体在需要时可以参考。

这种方法对于将现实世界的功能集成到我们的智能体中至关重要,我们将在后续部分更全面地探索。

接下来,我们将进入AI智能体的另一个重要组成部分: ReAct系统提示

这将增强智能体以动态和上下文感知的方式思考和响应的能力。

4 - ReAct提示

ReAct提示使我们的AI智能体能够模仿人类行为。

这个系统提示引导模型通过思考、行动和响应的循环,允许它有效地处理用户查询。

简单来说,ReAct提示指示模型思考用户查询,理解它,决定如何回答,如果需要,选择一个动作,然后使用这个动作尽可能好地回答问题。

让我分享提示,然后我会解释。

定义ReAct提示

prompts.py 文件中,添加以下系统提示配置:

system_prompt = """You run in a loop of Thought, Action, PAUSE, Action_Response.At the end of the loop you output an Answer.Use Thought to understand the question you have been asked.Use Action to run one of the actions available to you - then return PAUSE.Action_Response will be the result of running those actions.Your available actions are:get_response_time:e.g. get_response_time: learnwithhasan.comReturns the response time of a websiteExample session:Question: what is the response time for learnwithhasan.com?Thought: I should check the response time for the web page first.Action: {  "function_name": "get_response_time",  "function_parms": {    "url": "learnwithhasan.com"  }}PAUSEYou will be called again with this:Action_Response: 0.5You then output:Answer: The response time for learnwithhasan.com is 0.5 seconds."""

这个系统提示指示LLM在思考、行动和行动响应的循环中运行。

循环结构(思考、行动、暂停、行动响应)引导LLM:

  • 思考 :理解并解释查询。

  • 行动 :从可用动作中选择并执行适当的功能。

  • 行动响应 :使用行动的结果来制定响应。

可用动作

然后,我们告诉LLM有哪些动作可用,通过一个简单的例子,展示参数和简单的描述,以便模型理解功能。

Your available actions are:get_response_time:e.g. get_response_time: learnwithhasan.comReturns the response time of a website

确保将函数名称与你在Python中定义的名称匹配。

示例会话

然后,我们向LLM展示了一个示例,展示它将如何行动以回答一个样本查询。

这里最重要的部分是它将如何 返回动作

Action:{  "function_name": "get_response_time",  "function_parms": {    "url": "learnwithhasan.com"  }}


你可以看到,我指示LLM以 JSON格式 返回动作。

这将帮助我们稍后在最后部分将事情整合起来时,使用函数并按你将要做的方式运行它们。

为什么是循环?

这种循环机制模仿了LLM采取的步骤:理解问题,基于该理解采取行动,并使用行动的结果来响应。

这个过程可能从简单任务的几个循环到更复杂场景的数百个不等。

5 - 系统整合

已经建立了ReAct系统提示并定义了必要的功能,我们现在可以整合这些元素来构建我们的AI智能体。

让我们回到我们的 main.py 脚本来完成设置。

定义可用功能

首先,列出智能体可以利用的函数。在这个例子中,我们只有一个:

available_actions = {    "get_response_time": get_response_time}

在我们的情况下,我们只有一个函数。

这将使智能体能够高效地选择正确的函数。

设置用户和系统提示

定义用户提示和将传递给 generate_text_with_conversation 的消息,这是我们之前创建的函数:

user_prompt = "What is the response time for learnwithhasan.com?"messages = [    {"role": "system", "content": system_prompt},    {"role": "user", "content": user_prompt},]

现在,OpenAI的LLM模型将被指示以思考、行动和行动结果的循环来行动!

创建智能体循环

实现处理用户输入并处理AI响应的循环:

turn_count = 1max_turns = 5while turn_count < max_turns:    print (f"Loop: {turn_count}")    print("----------------------")    turn_count += 1    response = generate_text_with_conversation(messages, model="gpt-4")    print(response)    json_function = extract_json(response)    if json_function:            function_name = json_function[0]['function_name']            function_parms = json_function[0]['function_parms']            if function_name not in available_actions:                raise Exception(f"Unknown action: {function_name}: {function_parms}")            print(f" -- running {function_name} {function_parms}")            action_function = available_actions[function_name]            #call the function            result = action_function(**function_parms)            function_result_message = f"Action_Response: {result}"            messages.append({"role": "user", "content": function_result_message})            print(function_result_message)    else:         break


这个循环反映了ReAct循环,生成响应,提取JSON格式的函数调用,并执行适当的动作。

所以我们生成响应,我们检查LLM是否返回了要执行的函数。

我创建了extract_json方法,以便您可以轻松地从LLM响应中提取任何函数:

json_function = extract_json(response)

我们将检查LLM是否返回了要执行的函数;如果是,它将执行并将结果附加到消息中,以便在下一个回合中,LLM可以使用Action_response来回答用户查询。

测试智能体

要看到这个智能体在行动中,您可以使用下面提供的链接下载完整的代码库:

6 - SEO审计员AI智能体

现在,在您通过我们的基本示例学习了如何从头开始构建AI智能体之后,让我们通过创建SEO审计员AI智能体来进入一个更实际的例子。这个智能体将展示现实世界的效用,并展示我们初始设置的适应性。

定义一个新功能

首先,我们将在actions.py文件中为SEO审计定义一个函数:

from






请到「今天看啥」查看全文