打造你的专属代理:从头开始教程

2024年09月27日 由 alex 发表 61 0

近几个月来,我们都听说过代理和多代理框架。这些人工智能代理已成为自动化和决策领域的无名英雄。


虽然 AutoGen 和 CrewAI 等预建框架提供了诱人的捷径,但从头开始构建自己的代理却能带来无与伦比的快感和深度理解。


这就像在速食拉面和制作美食之间做出选择--当然,前者很快,但后者呢?这才是真正神奇的地方。


今天,我们将卷起袖子,深入探讨创建我们自己的人工智能助手 AgentPro 的细节。在本文结束时,你将对人工智能代理的工作原理有一个基础性的了解,并能很好地创建一个能按需生成和执行代码的数字伴侣。


注意:这段代码不一定在所有情况下都有效,但可以帮助你入门 + 代码中可能会出现缩进错误


构建模块:AgentPro 路线图

在深入学习代码之前,让我们先概述一下我们将要构建的关键组件:


13


  1. 初始化: 设置代理的 "大脑
  2. 代码生成:教代理编写 Python 脚本
  3. 库管理:让我们的代理能够安装必要的工具
  4. 代码执行:让我们的代理能够运行其生成的代码
  5. 命令中心: 创建一个中心枢纽来管理所有这些功能


现在,让我们逐一分解这些步骤,看看它们是如何组合成我们的人工智能助手的。


第1步:初始化--让我们的机器人迸发出生命的第一束火花

每一段伟大的旅程都始于一个步骤,在人工智能代理的世界里,这个步骤就是初始化。在这里,我们要建立代理的基本结构,并将其连接到主要的智能源,在本例中就是 OpenAI API。


from openai import OpenAI
import os
from google.colab import userdata
import base64
import requests
from PIL import Image
from io import BytesIO
import subprocess
import tempfile
import re
import importlib
import sys
os.environ["OPENAI_API_KEY"] = userdata.get('OPENAI_API_KEY')
class AgentPro:
    def __init__(self):
        # Future initialization code can go here
        pass


该代码段相当于赋予我们的人工智能助手生命。我们导入必要的库,设置 OpenAI API 密钥,并创建 AgentPro 类的骨架。这就像是为我们的人工智能提供了一个躯壳--它本身用处不大,但对接下来的一切都至关重要。


第2步:代码生成--教我们的代理编写 Python 语言

现在,我们的代理有了 “身体”,让我们赋予它思考的能力--或者在本例中,生成代码的能力。


def generate_code(self, prompt):
    client = OpenAI()
    response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
      {"role": "system", "content": "You are a Python code generator. Respond only with executable Python code, no explanations or comments except for required pip installations at the top."},
      {"role": "user", "content": f"Generate Python code to {prompt}. If you need to use any external libraries, include a comment at the top of the code listing the required pip installations."}
    ],
    max_tokens=4000,
    temperature=0.7,
    top_p=1,
    frequency_penalty=0,
    presence_penalty=0
    )
    code = re.sub(r'^```python\n|^```\n|```$', '', response.choices[0].message.content, flags=re.MULTILINE)
    code_lines = code.split('\n')
    while code_lines and not (code_lines[0].startswith('import') or code_lines[0].startswith('from') or code_lines[0].startswith('#')):
        code_lines.pop(0)
    return '\n'.join(code_lines)


这种方法是我们的代理功能中的瑰宝。它使用 OpenAI API 根据给定的提示生成 Python 代码。


可以认为,它赋予了我们的代理头脑风暴和即时编写代码的能力。我们还做了一些清理工作,以确保获得干净、可执行的 Python 代码,不含任何标记格式或不必要的注释。


我们使用的参数(如 temperature 和 top_p)允许我们控制生成代码的创造性和随机性。这就像是调整人工智能想象力的 “灵感 ”旋钮!


第3步:库管理--为我们的代理配备正确的工具

每个优秀的程序员都知道拥有合适的程序库的重要性。我们的人工智能助手也不例外。接下来的方法可以让 AgentPro 识别并安装任何必要的 Python 库


def install_libraries(self, code):
    libraries = re.findall(r'#\s*pip install\s+([\w-]+)', code)
    if libraries:
        print("Installing required libraries...")
        for lib in libraries:
            try:
                importlib.import_module(lib.replace('-', '_'))
                print(f"{lib} is already installed.")
            except ImportError:
                print(f"Installing {lib}...")
                subprocess.check_call([sys.executable, "-m", "pip", "install", lib])
        print("Libraries installed successfully.")


这种方法就像是让我们的代理在 Python 包索引中疯狂购物。它会扫描生成代码中的 pip install 注释,检查库是否已安装,如果没有,就安装它们。无论我们向代理抛出什么任务,它都能确保代理拥有合适的工具来完成工作。


第4步:代码执行--让代码发挥作用

生成代码固然很好,但执行代码才是关键所在。下一个方法允许我们的代理运行生成的代码:


def execute_code(self, code):
    with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as temp_file:
        temp_file.write(code)
        temp_file_path = temp_file.name
  
    try:
        result = subprocess.run(['python', temp_file_path], capture_output=True, text=True, timeout=30)
        output = result.stdout
        error = result.stderr
    except subprocess.TimeoutExpired:
        output = ""
        error = "Execution timed out after 30 seconds."
    finally:
        os.unlink(temp_file_path)
    return output, error


这种方法才是真正神奇的地方。它接收生成的代码,将其写入临时文件,执行代码,捕获输出(或任何错误),然后自行清理。这就像让我们的代理动手输入代码并运行它,一切都在眨眼之间完成。


第5步:指挥中心--将一切整合在一起

最后,我们需要一种方法来协调所有这些神奇的功能。进入运行方法:


def run(self, prompt):
    print(f"Generating code for: {prompt}")
    code = self.generate_code(prompt)
    print("Generated code:")
    print(code)
    print("\nExecuting code...")
    output, error = self.execute_code(code)
    if output:
        print("Output:")
        print(output)
    if error:
        print("Error:")
        print(error)


这是我们人工智能助手的指挥中心。它接收提示,生成代码,执行代码,并报告结果或任何错误。它就像一个私人助理,不仅能理解你的要求,还能执行并向你提供完整的报告。


将所有内容整合在一起

现在我们有了所有的组件,让我们来看看如何使用我们新出炉的人工智能助手:


if __name__ == "__main__":
    agent = AgentPro()
    agent.run("""make a detailed deck on the best forms of leadership with at 
least 10 slides and save it to a pptx called leadership.pptx""")


通过这条简单的命令,我们要求代理创建一个关于领导风格的完整演示文稿,至少包含 10 张幻灯片,并将其保存为 PowerPoint 文件。


我们的代理将生成必要的 Python 代码(可能会使用 python-pptx 这样的库),安装任何必要的库,执行代码以创建演示文稿,然后报告结果或遇到的任何错误。


我们刚刚为一个能够按需生成和执行 Python 代码的强大人工智能代理奠定了基础。从使用 OpenAI API 设置其 “大脑”,到赋予其编写和运行代码的能力,再到为其配备安装必要工具的能力,我们已经创建了一个多功能的数字助理。

文章来源:https://towardsdatascience.com/build-your-agents-from-scratch-forget-autogen-or-crewai-part-a-a114cd1e785f
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消