Автоматты аударма пайдаланылды

"Уау!"немесе неге бұл бәрін өзі жасайтын алғашқы жергілікті AI агенті

Елестетіп көріңіз: сіз тапсырманың бір сипаттамасын енгізесіз, ал жасанды интеллект қажетті кодты толығымен жазады, оны файлға сақтайды, қажетті тәуелділіктерді автоматты түрде орнатады (Егер олар қажет болса) және алынған сценарийді бірден іске қосады!Мұның бәрі жергілікті ортада, сіздің кодыңызды басқа біреудің "бұлтына"жібермей. Егер қате орын алса, AI агенті ненің дұрыс емес екенін түсініп, мәселені шешуге тырысып, модельге сұранысты реттей алады. Бұл шынымен де әсерлі!

Кез-келген эксперименттік технология сияқты, бұл AI агенті идеалдан алыс және қателіктер жіберуі мүмкін:

  • Жалған позитивтер немесе агент қатені дұрыс түзете алмайтын және сұрауды шексіз қайта құратын жағдайлар болуы мүмкін.
  • Агент жасайтын Код кейде сіз күткендей жұмыс істемеуі мүмкін. Кейде логикалық қателер немесе қоршаған ортаға сәйкессіздіктер пайда болуы мүмкін.

Бұл әлі бета екенін және 100% тұрақты өнімділікке кепілдік бермейтінін түсіну маңызды. Кейбір жағдайларда қолмен араласып, нәтижені түзетуге тура келеді. Дегенмен, қазірдің өзінде бұл дамуды автоматтандырудың қаншалықты дамығанын көрсетеді.

  1. Python 3.8+Python бағдарламасының заманауи нұсқасы бар екеніне көз жеткізіңіз. Сіз пәрменмен тексере аласыз: python --version

     2. OLLAMA LLM сервері (немесе жергілікті/қашықтағы LLM серверінің басқа нұсқасы)

  • Мысалда код серверге конфигурацияланған http://localhost:11434/v1.
  • Егер сіз Ollama қолдансаңыз, Ollama серверін жергілікті түрде іске қосыңыз. Ол қажетті портта сұрауларды қабылдайтынына көз жеткізіңіз (әдепкі 11434).
  • Егер сіз басқа LLM қызметін пайдаланғыңыз келсе, мекенжайды ауыстырыңыз http://localhost:11434/v1 сәйкесінше.

     3. qwen_agent (немесе LLM-мен өзара әрекеттесуге арналған ұқсас пакет)

  • PyPI арқылы орнатыңыз: pip install qwen-agent

Бұл кодты файлға сақтаңыз, мысалы, agent.py:

import json
import os
import subprocess
from qwen_agent.llm import get_chat_model

def reformulate_request_agent(user_request, error_description=None):
    """
    Модельге сұранысты қайта құру функциясы.
    Қабылдайды:
    - user_request: пайдаланушының бастапқы сұрау мәтіні.
    - error_description: Егер код іске қосылмаса, қате туралы хабар.
    
    Қайтарады:
    - Кодты қайта құру үшін қайта жасалған сұрау мәтіні.
    """
    llm = get_chat_model({
        'модель': 'qwen2. 5-кодер: 14b', # Модель атауы
        'model_server': 'http://localhost:11434/v1', # Ollama немесе басқа LLM серверінің Мекен-жайы
        'api_key': 'EMPTY', # қажет болса, кілтті көрсетіңіз
    })

    # Жүйе үшін хабарлама қалыптастыру
    base_message = user_request
    if error_description:
        base_message += f " қате туралы хабарлама алынды: {error_description}."

    messages = [
        {
            'role': 'system', 
            'content': (
                "You are an assistant that reformulates user requests to ensure they are suitable "
                "for generating Python code. Your reformulated request should be clear and precise."
            )
        },
        {'role': 'user', 'content': base_message}
    ]

    # Мұнда модель жауап береді (қайта жасалған сұрау).
    responses = []
    for responses in llm.chat(messages=messages, stream=True):
        pass

    # Қорытынды қайта құруды қайтарыңыз
    return responses[0]['content']


def save_and_run_code(code, name_file, dependencies=None):
    """
    Функция:
    1. Берілген Python кодын файлға сақтайды.
    2. Тәуелділіктерді орнатады (Егер көрсетілген болса).
    3. Жасалған файлды іске қосады және нәтижені (немесе қатені) қайтарады.

    :param code: Python коды бар жол.
    :param name_file: кодты сақтау үшін Файл атауы.
    :param dependencies: тәуелділіктер тізімі бар жол(бос орын арқылы).
    :қайтару: формат сөздігі {"сәттілік": bool," шығу "немесе" қате": str}
    """
    # Кодты қажетті форматқа келтіріңіз (кенеттен '\n' немесе '\T ' эскап таңбалары келді)
    formatted_code = code.replace("\\n", "\n").replace("\\t", "\t")

    # 1. Кодты файлға сақтаңыз
    with open(name_file, "w", encoding="utf-8") as file:
        file.write(formatted_code)
    print (F"Код файлға сақталды: {name_file}")

    # 2. Тәуелділіктерді орнату (егер бар болса)
    if dependencies:
        print (F " тәуелділіктерді орнату: {dependencies}")
        try:
            # pip install <dependencies>
            subprocess.run(["pip", "install"] + dependencies.split(), check=True, capture_output=True, text=True)
            Print ("тәуелділіктер сәтті орнатылды.")
        except subprocess.CalledProcessError as e:
            error_message = f " тәуелділіктерді орнату қатесі: {e. stderr}"
            print(error_message)
            return {"success": False, "error": error_message}

    # 3. Кодты іске қосу
    try:
        result = subprocess.run(["python", name_file], capture_output=True, text=True)
        if result.returncode != 0:
            # Егер код қатемен оралса (0 ЕМЕС)
            return {"success": False, "error": result.stderr}
        # Егер бәрі жақсы болса, нәтижені қайтарыңыз
        print (f"{name_file}:\N{result файлының орындалу нәтижесі.stdout}")
        return {"success": True, "output": result.stdout}
    except Exception as e:
        print (f "{name_file}: {e} файлын іске қосу кезінде қате")
        return {"success": False, "error": str(e)}


def reformulate_request(error_description):
    """
    Қатені ескере отырып, жаңа сұранысты қалыптастыратын қарапайым функция.
    """
    return f " қатені түзету: {error_description}"


def test():
    """
    Агент жұмысының мысалын көрсететін негізгі функция.

    Қадамдар:
    1. Біз пайдаланушыдан сұрау аламыз (тапсырманың сипаттамасы).
    2. Біз LLM үшін хабарламалар жасаймыз, онда біз дайын Python кодын алғымыз келетінін көрсетеміз.
    3. Модель save_and_run_code функциясын шақыру арқылы код жасауға тырысады.
    4. Егер қате пайда болса, пайдаланушыдан жаңартылған сұрау сұралады (немесе автоматты түрде қайта құрылады).
    5. Біз дұрыс нәтиже алынғанша қайталаймыз.

    Маңызды: агент бета нұсқасында болғандықтан, кейде қатені түзетудің циклдік әрекеттері болуы мүмкін.
    Егер сіз оны ұзақ уақыт анықтай алмайтынын көрсеңіз, орындалуын тоқтатып, кодты қолмен реттеңіз.
    """
    # Модельді қосыңыз (сервер мен модель атауын көрсетіңіз)
    llm = get_chat_model({
        'модель': 'qwen2. 5-кодер: 14b', # Модель атауы
        'model_server': 'http://localhost:11434/v1', # Ollama немесе басқа LLM серверінің Мекен-жайы
        'api_key': 'EMPTY',
    })

    # Мысал сұрау (input орнына жай жолды орнатуға болады)
    req_user = str(input ("код сипаттамасын енгізіңіз:"))
    req_user2 = req_user

    while True:
        # Не жіберіп жатқанымызды көру үшін сұранысты басып шығарыңыз
        print ("модельге ағымдағы сұрау:", req_user)

        # LLM үшін хабарламалар құру
        messages = [
            {
                'role': 'system', 
                'content': (
                    "You are an assistant that generates Python code based on user descriptions. "
                    "In addition to generating the code, you are responsible for providing the file name "
                    "where the code will be saved and a list of dependencies required to execute the code. "
                    "Ensure the output is executable and properly formatted."
                )
            },
            {'role': 'user', 'content': req_user}
        ]

        # Модель шақыра алатын функцияны сипаттаңыз (функция қоңырауы)
        functions = [{
            'name': 'save_and_run_code',
            'description': 'Generates Python code, saves it to a specified file, installs dependencies, and executes it.',
            'parameters': {
                'type': 'object',
                'properties': {
                    'code': {
                        'type': 'string',
                        'description': 'Python code',
                    },
                    'name_file': {
                        'type': 'string',
                        'description': 'file name for saving the code',
                    },
                    'dependencies': {
                        'type': 'string',
                        'description': 'A space-separated list of dependencies to install before running the code',
                    },
                },
                'required': ['code', 'name_file'],
            },
        }]

        # Функция сипаттамасы бар модель сұрауын жіберіңіз
        responses = []
        for responses in llm.chat(messages=messages, functions=functions, stream=True):
            pass

        # Хабарлама тарихына модельдің жауабын қосыңыз
        messages.extend(responses)  
        last_response = messages[-1]

        # Егер модель функцияны (function_call) шақырғысы келсе, оны шақырамыз
        if last_response.get('function_call', None):
            try:
                available_functions = {
                    'save_and_run_code': save_and_run_code,
                }
                function_name = last_response['function_call']['name']
                function_to_call = available_functions[function_name]

                # Функция үшін дәлелдер
                function_args = json.loads(last_response['function_call']['arguments'])

                # Функцияны шақырыңыз (сақтаңыз, тәуелділіктерді орнатыңыз, кодты іске қосыңыз)
                function_response = function_to_call(
                    code=function_args.get('code'),
                    name_file=function_args.get('name_file'),
                    dependencies=function_args.get('dependencies'),
                )

                # Нәтижені тексеру (сәттілік немесе қате)
                if function_response.get("success"):
                    print ("код сәтті орындалды!")
                    print (F"нәтиже: {function_response['output']}")
                    break
                else:
                    error_description = function_response.get("error")
                    print (f"қате анықталды: {error_description}")
                    # Пайдаланушыдан сұрауды автоматты түрде нақтылауды немесе қайта құруды сұрауға болады
                    req_user = reformulate_request_agent(req_user, error_description)

            except:
                # Егер қате орын алса, қайта құруға тырысамыз
                басып шығару('функцияны шақыру процесінде қате.')
                req_user = reformulate_request_agent(req_user)

        else:
            # Модель дұрыс function_call жасай алмады
            print ("Модель функцияны жасай алмады. Сұранысты қайта құруға тырысайық.")
            req_user = reformulate_request_agent (req_user2, " Модель дұрыс сұранысты қалыптастырған жоқ.")

if __name__ == '__main__':
    test()

Қалай іске қосу керек: python agent.py

Осыдан кейін консольде шақыру пайда болады: "кодтың сипаттамасын енгізіңіз:".Мысалы, сіз енгізе аласыз: 1-ден 5-ке дейінгі сандарды шығаратын бағдарлама жазыңыз.

Агент кодты жасауға, оны сақтауға, тәуелділіктерді орнатуға (егер көрсетілген болса) және орындауға тырысады.

Көрнекі мысал ретінде біздің AI агентімізден turtle модулін пайдаланып Python-да Серпинский үшбұрышын (көбінесе Пирамида деп аталады) салатын кодты жасауды сұрауға болады. Агент әрқашан Бірінші рет жеңе бермейді: қателер, қателер немесе қате функционалдық қоңыраулар болуы мүмкін. Алайда бірнеше нақтылаудан кейін ол келесі жұмыс кодын ұсынды:

import turtle

def sierpinski(degree, points):
    """
    Серпинский үшбұрышын салатын рекурсивті функция
    degree рекурсиясының тереңдігіне және нүктелік координаттарға байланысты.
    """
    colormap = ['blue', 'red', 'green', 'white', 'yellow', 'violet']
    draw_triangle(points, colormap[degree % 6])

    if degree > 0:
        sierpinski(degree - 1,
                   {
                       'left': get_mid(points['left'], points['top']),
                       'right': get_mid(points['right'], points['top']),
                       'top': points['top']
                   })
        sierpinski(degree - 1,
                   {
                       'left': points['left'],
                       'right': get_mid(points['left'], points['right']),
                       'top': get_mid(points['left'], points['right'])
                   })
        sierpinski(degree - 1,
                   {
                       'left': get_mid(points['right'], points['left']),
                       'right': points['right'],
                       'top': get_mid(points['right'], points['top'])
                   })

def draw_triangle(points, color):
    """
    Нүктелер сөздігінде координаттар бойынша боялған үшбұрышты салады.
    """
    turtle.fillcolor(color)
    turtle.up()
    turtle.goto(points['left'])
    turtle.down()
    turtle.begin_fill()
    turtle.goto(points['right'])
    turtle.goto(points['top'])
    turtle.goto(points['left'])
    turtle.end_fill()

def get_mid(p1, p2):
    """
    Екі нүкте арасындағы ортаңғы координатты қайтарады (p1 және p2).
    """
    return ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2)

# Тасбақа терезесін теңшеңіз
wn = turtle.Screen()
wn.bgcolor('black')

# Үлкен үшбұрыштың үш негізгі нүктесін (төбелерін) анықтаңыз
points = {
    'left': (-300, -150),
    'right': (300, -150),
    'top': (0, 300)
}

# Орақ тереңдігінің үшбұрышын салыңыз 5
sierpinski(5, points)

# Біз "тасбақаны" жасырамыз және терезенің жабылуын күтеміз
turtle.hideturtle()
wn.exitonclick()
  1. Sierpinski негізгі функциясы (degree, points):рекурсияның әр деңгейінде Үшбұрыш салады.Егер degree > 0 болса, Жаңа координаттармен ("кіші үшбұрыштармен") үш рет шақырылады.
  2. Рекурсияның әр деңгейінде Үшбұрыш салады.
  3. Егер degree > 0 болса, Жаңа координаттармен ("кіші үшбұрыштармен") үш рет шақырылады.
  4. Draw_triangle функциясы (points, color):үш координаты бар сөздікті алады ('left', 'right', 'top') және үшбұрышты сәйкес түспен бояйды.
  5. Үш координаты бар сөздікті алады ('left',' right',' top') және үшбұрышты сәйкес түспен бояйды.
  6. Get_mid функциясы (p1, p2): p1 және p2 арасындағы сегменттің ортасынан нүктені қайтарады.
  7. Нүктені қайтарады — p1 мен p2 арасындағы сегменттің ортасы.
  8. Тасбақа терезесін орнату.Экран (), фон түсін таңдау және үлкен үшбұрыш үшін негізгі координаттарды орнату.
  9. Sierpinski қоңырауы (5, points) рекурсияның тереңдігін береді ("кесу" деңгейлерінің саны) — тереңдік неғұрлым терең болса, сурет соғұрлым егжей-тегжейлі болады, бірақ сурет салу ұзағырақ болады.
  • Алдымен агент айнымалылар немесе Функциялар жарияланбаған немесе логиканың маңызды бөліктері жіберілмеген толық емес немесе дұрыс емес кодты жасай алады.
  • Агентке қате туралы хабарланғаннан кейін (немесе ол іске қосу кезінде қатені өзі тапты), ол қайта құрдыөтініш және оның кодын реттеді.
  • Нәтижесінде бірнеше итерациядан кейін жұмыс мысалы алынды.

Бұл AI агентінің бета нұсқасын пайдаланудың оң және теріс жақтарын тамаша көрсетеді:

  • Плюс: агент күнделікті жұмыстың көп бөлігін орындай алады және синтаксисті, эскизді, рекурсияны және т. б. "еске түсіре" алады.
  • Минус: егер қате пайда болса, оны қалай түзетуге болатынын әрдайым бірден түсіне бермейді; кейде мәселені дәл көрсететін адамның араласуы қажет.

Осылайша, біздің AI агентіміз мінсіз болмаса да, қазір уақытты үнемдеуге көмектеседі және кодты жасау процесін жеңілдетеді — тіпті Turtle кітапханасының көмегімен үшбұрыш (немесе пирамида) Серпинский сияқты қызықты фигураларды салу үшін.

  • Толық автоматтандыру: AI агенті жергілікті жерде жұмыс істейді және кодты жасаудан бастап оны іске қосуға дейінгі барлық қадамдарды орындайды.
  • Уақыт пен күш үнемдеу: тәуелділіктерді іздеу үшін код редакторы, терминал және шолғыш арасында ауысудың қажеті жоқ — агент оны қабылдайды.
  • Бета нұсқасы: жүйенің әлі шикі екенін және қателерді дұрыс өңдемейтінін есте ұстаған жөн. Ол кодты түзетуге тырысқанда "ілініп" қалатын жағдай туындауы мүмкін.
  • Кеңейтуге дайын негіз: тексерулерді толықтырғыңыз келе ме, тесттер қосқыңыз келе ме немесе басқа тілдерге қолдау көрсеткіңіз келе ме? Мұның бәрі модель Python функцияларымен өзара әрекеттесетін архитектураның бір бөлігі ретінде мүмкін.

Жақсы пайдалану!

Пікірлер 0

Кіру пікір қалдыру үшін