目录

AI代码工场基于Agent架构的Python程序自动化生成流水线

目录

AI代码工场:基于Agent架构的Python程序自动化生成流水线

实现输入指令让AI生成python代码并执行

导入相关库

import re

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
from langgraph.prebuilt import create_react_agent

from src.utils.models import gpt4o_model

编写工具,实现提取AI返回的内容,并执行代码

@tool
def extract_function_code(s_python, detail=0):
    """
    执行传入的python函数代码
    """

    def extract_code(s_python):
        """
        如果输入的字符串s是一个包含Python代码的Markdown格式字符串,提取出代码部分。
        否则,返回原字符串。

        参数:
        s: 输入的字符串。

        返回:
        提取出的代码部分,或原字符串。
        """
        # 判断字符串是否是Markdown格式
        if '```python' in s_python or 'Python' in s_python or 'PYTHON' in s_python:
            # 找到代码块的开始和结束位置
            code_start = s_python.find('def')
            code_end = s_python.find('```\n', code_start)
            # 提取代码部分
            code = s_python[code_start:code_end]
        else:
            # 如果字符串不是Markdown格式返回原字符串
            code = s_python

        return code

    # 提取代码字符串
    code = extract_code(s_python)

    # 提取函数名称
    match = re.search(r'def (\w+)', code)
    function_name = match.group(1)

    # 将函数写入本地
    with open('%s.py' % function_name, 'w', encoding='utf-8') as f:
        f.write(code)
        print(f"生成的代码:{code}")

    # 执行该函数
    try:
        exec(code, globals())
        print("代码执行成功")
    except Exception as e:
        print("执行代码时发生错误:")
        print(e)

    # 打印函数名称
    if detail == 0:
        print("函数名称是:%s" % function_name)

    if detail == 1:
        with open('%s.py' % function_name, encoding='utf-8') as f:
            content = f.read()
        print(content)

使用 langchain_core 和 langgraph 库创建智能代理,通过 GPT-4 模型生成代码

agent = create_react_agent(
    model=gpt4o_model.bind_tools([extract_function_code]),
    tools=[extract_function_code]
)
chat_template = ChatPromptTemplate.from_messages(
    [
        ("system",
         "你是一个python代码编辑器,你的功能是输出python代码,只输出代码即可,请勿输出任何其他内容,请在函数编写过程中,在函数内部加入中文编写的详细的函数说明文档"),
        ("human", "{user_input},并使用extract_function_code执行"),
    ]
)
result = agent.invoke({"messages": chat_template.format_messages(user_input="输出Hello World")})

我输入【输出Hello World】后,大模型生成一个python脚本,然后extract_function_code提取其中的内容进行执行

生成的代码:def print_hello_world():
    """
    打印'Hello World'这句话。
    """
    print('Hello World')
代码执行成功
函数名称是:print_hello_world

同理可以传入不同的提示词让他生成不同的代码来完成我们的任务