龙空技术网

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

旺知识 357

前言:

今天大家对“python如何创建虚拟环境openai图片”大约比较着重,朋友们都需要学习一些“python如何创建虚拟环境openai图片”的相关知识。那么小编在网络上搜集了一些有关“python如何创建虚拟环境openai图片””的相关资讯,希望兄弟们能喜欢,看官们一起来学习一下吧!

这篇文章是关于如何从头开始用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 SimplerLLM.tools.rapid_api import RapidAPIClientdef get_seo_page_report(url :str):    api_url = ";    api_params = {        'url': url,    }    api_client = RapidAPIClient()     response = api_client.call_api(api_url, method='GET', params=api_params)    return response

这个函数使用SEO审计API为任何指定的网站或网页生成详细报告,提供有价值的SEO性能洞察。

因此,AI智能体可以使用这份报告来回答与目标网页相关的任何问题。

我在这里使用了SimplerLLM库,它内置了RapidAPIClient,允许我们轻松地调用RapidAPI上的任何API。想象一下,你可以用这个一个函数给你的AI智能体多少功能!

更新系统提示

react_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_seo_page_report:e.g. get_seo_page_report: learnwithhasan.comReturns a full seo report for the web pageExample session:Question: is the heading optimized for the keyword "marketing" in this web page: learnwithhasan.com?Thought: I should generate a full seo report for the web page first.Action: {  "function_name": "get_seo_page_report",  "function_parms": {    "url": "learnwithhasan.com"  }}PAUSEYou will be called again with this:Action_Response: the full SEO reportYou then output:Answer: Yes, the heading is optimized for the keyword "marketing" in this web page since the SEO report shows that the keyword is in the H1 heading.""".strip()
调整主智能体文件

最后,更新main.py

以纳入新的行动:

available_actions = {    "get_seo_page_report": get_seo_page_report}运行SEO审计智能体

现在你看到构建AI智能体有多容易了!

定义功能,更新提示,然后运行!

运行SEO审计员AI智能体的示例:

如果我们现在询问learnwithhasan.com的响应时间

我们会得到一个答案:

The response time of the web page "; is approximately 0.091544 seconds.

现在它是一个真实的数字,它从SEO报告中得到的。

你甚至可以问一个更通用的问题,比如:

“为learnwithhasan.com提供一些SEO优化建议”

我们会得到一个答案:

1. Add alt tags to images: There are 4 images on the website that are missing alt tags. Adding descriptive alt tags to these images can help with accessibility and provide a ranking boost.2. Improve internal linking: The website has 49 total links, but only 13 of them are internal. Adding more internal links can help spread link equity around your website and can boost the SEO of more pages.3. Optimize page headings: There is only one H1 heading. You can consider using more H2, H3, and H4 headings for better content hierarchy and easier readability.4. Increase content length: The website has a total word count of 707. Longer, in-depth content tends to rank better in search engines.5. Implement hreflangs: The website doesn't use hreflangs. If the site has content in multiple languages, hreflangs can help search engines understand the language and geographical targeting of a webpage.

这些基于实际SEO报告的响应展示了智能体提供专家级SEO建议的能力。

希望你喜欢这篇指南。

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

参考资料

标题:How To Create AI Agents With Python From Scratch (Full Guide)

作者:Hasan

链接:learnwithhasan.com/create-ai-agents-with-python/

标签: #python如何创建虚拟环境openai图片