Галоўная / Артыкулы

Рэакцыя з нуля: думка, дзеянне, пауза, абазаванне без кантрэлі.

Мініяцюрны цыкл ReAct, створаны ручная на Groq: думка, дзеянне, пауза, абазаванне, спачатку ручная обработка, а потым вызовы інструментаў з рэгулярнымі выразамі, таму фрэймворкі агентаў LLM стаюць зрозумелымі.

Выдавец: REACTAPP.TOP6 хв чытання1373 слоў

Крыніцы: The Origins of AI Agents -How ReAct Rewired the Way LLMs Think and Act

Вступ

Запытайце мадэль на простай мове пра цэну Nvidia у рэальны час і пра тое, скількі акцыяў можна купіць за 100 000 долераў. Без спецыяльных засобаў яна выдумвае застарэлыя даныя з матэрыялаў навчання, а потым правельна вырахоўвае рэзультаты на неправільных даных. У яе няма вбудованага механізму, які б значыў «Я не ведаю — трэба паглядзець», таму што пошук інформацыі не ўскладнюецца адзіным працэсам обработкі даных.

Калітэт адпаведзяў паднялася, і мадэлі паказаліся корыстнымі для адгукнення ў адзін момент. Толькі планаванне яшчэ не дае автонаміі. Запытанні, якія візначаюць агентаў, такія: што знаходзіцца за межамі ведомасці мадэлі, якія дзеяння ўможлівяюць ёй яго атрыманне, як практычна даць рэзультат, як перасмотраць план і калі зупыніцца. Працэс «Рашэнь → дзеянне → перакантроль → парадзейнаўкі» — гэта цыкл, а не праўая лінія. Гэты цыкл ёсць вучою савечных штучных інтэлектуальных агентаў. Мадэль ReAct (Рашэнь + Дзеянне) задала такі патэрн. Пачатковыя дамастанты не былі прыкладамі аплікацый LangChain — гэта быў LLM, структураваны запыт і чалавек (або пазней скрыпт), які выкананаў дзеянні і вернуў адзысканыя даныя.

Практычны прыклад ReAct: Рашэнь + Дзеянне

Прыклад з пашаго адгукнення:

from groq import Groq
import re
from dotenv import load_dotenv

_ = load_dotenv()
client = Groq()
message = client.chat.completions.create(
    model="openai/gpt-oss-120b",  # free, fast open-weight model hosted on Groq
    max_tokens=1000,
    messages=[
        {"role": "user", "content": "Hello, GPT!"}
    ],
)
print(message.choices[0].message.content) # Check the client
class Agent:
    def __init__(self, system=""):
        self.system = system
        self.messages = []
        if self.system:
            self.messages.append({"role": "system", "content": system})

    def __call__(self, message):
        self.messages.append({"role": "user", "content": message})
        result = self.execute()
        self.messages.append({"role": "assistant", "content": result})
        return result

    def execute(self):
        response = client.chat.completions.create(
            model="openai/gpt-oss-120b",
            max_tokens=1000,
            messages=self.messages,
        ).choices[0].message.content
        return response
prompt = """
You run in a loop of Thought, Action, PAUSE, Observation.
At the end of the loop you output an Answer
Use Thought to describe your thoughts about the question you have been asked.
Use Action to run one of the actions available to you - then return PAUSE.
Observation will be the result of running those actions.

Your available actions are:

calculate:
e.g. calculate: 4 * 7 / 3
Runs a calculation and returns the number - uses Python so be sure to use floating point syntax if necessary

fish_weight:
e.g. fish_weight: Shark
returns weight of a fish when given the breed

Example session:

Question: How much does a shark weigh?
Thought: I should look the fish weight using fish_weight
Action: fish_weight: Shark
PAUSE

You will be called again with this:

Observation: A Great white shark weights 41000 lbs

You then output:

Answer: A Great white shark weights 41000 lbs
""".strip()
def calculate(expression):
    return eval(expression)

def fish_weight(name):
    if "Shark" in name:
        return("Great white shark weighs 41000 lbs")
    elif "Puffer" in name:
        return("A puffer fish weighs 20 lbs")
    else:
        return("A fish can weight upto 47000 lbs")

known_actions = {
    "calculate": calculate,
    "fish_weight": fish_weight
}
abot = Agent(prompt)
result = abot("How much does a Shark weigh?")
print(result)
result = fish_weight("Shark")
result
next_prompt = "Observation: {}".format(result)
abot(next_prompt)
abot.messages # View the list of messages containing the conversation
# Present a compund query
abot = Agent(prompt)
# New query
question = """I have 2 fishes, a Shark and a puffer fish. \
What is their combined weight"""
abot(question)
next_prompt = "Observation: {}".format(fish_weight("Shark"))
print(next_prompt)
abot(next_prompt)
next_prompt = "Observation: {}".format(fish_weight("Puffer fish"))
print(next_prompt)
abot(next_prompt)
next_prompt = "Observation: {}".format(eval("41000 + 20"))
print(next_prompt)
abot(next_prompt)
## Add loop (automate the reasoning + act process)
action_re = re.compile('^Action: (\w+): (.*)
) # python regular expression to selection action
def query(question, max_turns=5):
    i = 0
    bot = Agent(prompt)
    next_prompt = question
    while i < max_turns:
        i += 1
        result = bot(next_prompt)
        print(result)
        actions = [
            action_re.match(a)
            for a in result.split('\n')
            if action_re.match(a)
        ]
        if actions:
            # There is an action to run
            action, action_input = actions[0].groups()
            if action not in known_actions:
                raise Exception("Unknown action: {}: {}".format(action, action_input))
            print(" -- running {} {}".format(action, action_input))
            observation = known_actions[action](action_input)
            print("Observation:", observation)
            next_prompt = "Observation: {}".format(observation)
        else:
            return
question = """I have 2 fishes, a Shark and a puffer fish. \
What is their combined weight"""
query(question)
  1. Імпортуйце кліента Groq, re для падэння шаблонаў і load_dotenv; запрацавайце файлы з настройкамі сяродовы, каб ключ API не быў заданы як стацыярны код.
  2. Створыце кліента Groq, які чытае значэнне GROQ_API_KEY з сяродовы.
  3. Апрашайце простае паведамленне “Hello” у настаўлены модэль, каб паказаць наявнасць з’ўязку.
  4. Створыце Agent, які зберагае запіты сістэмы і історыю паведамленняў: кожны вызов дадае наступную частку паведамлення ад карыстальніка, апрашае всю історыю, дадае адказ модэля і вяртае гэты тэкст.
  • Запісаце сістэмны прыем, які выкарыстоўвае логіку «Мысль → Дзеянне → Пауза → Абазораванне».
  • Зарэгіструйце інструменты, такія як calculate() для арыметычных вычыслаў і fish_weight() для маленькай табелі даных у known_actions.
  • Створыце агента з выкарыстоўваннем сістэмнага прыему ReAct.
  • Запытайце: «Скількі важыць акула?» Апэктуйце пропанаванае Action: fish_weight: Shark, а не проста чысло.
  • Ручна запрацавайце fish_weight("Shark") і зафіксавайце рэзультат (спачатку у ручным рэжыме).
  • Падаце зворатнае значэнне у фармаце Observation: …, каб агент могаў даць адказ.
  • Пераглянуце abot.messages, каб пазнаць усю транскрыпцыю, якую бачыць мадэль.
  • Створыце новага агента з складным запытам (важары акулы і пуфернай рыбы). 13–15. Ручна задаўце кожнае абазораванне, включаючы сумарную цэль, калі трэба.
  • Калі ўжо ёсць спазырэнняя, нехай агент сустроіць аб’еднаны адказ.
  • Дадзіце рэгулярны выраз, які автаматычна выяўляе Action: name: input.
  • Закрыйце цікл у query(): новы агент, надасце запітанне, выведзіце рэзультат, распакаваце дзеянне, пераканацца ў яго адпаведнасці з known_actions, выконаць, спазырэць, павтарыць да фінальнага адказу чы розмежавання колькасці павтарэнняў.
  • Застосавіце query() да складанага запітання і старожыце працэс Thought → Action → Observation → Answer без ручных крокаў.
  • Вывык

    Агенты начынаюць з ціклу, а не з фрэймворку. Мадэлі, навучаныя методам Chain-of-thought, разумеюць голасна; ReAct структуруець працэс think–act–observe на адпаведнасці з спосабамі работы людзей. Популярныя фрэймворкі агентаў індустрыялізуюць гэю ідэю. Стварэнне ціклу вручную назаўсёды зменяе адчуванне ўжо існуючых фрэймворкаў. Адпаведны артыкул знаходзіцца на https://arxiv.org/abs/2210.03629.

    Промышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якое можна распакаваць, рантайм павінен выконваць толькі дозволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.

    Промышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якое можна распакаваць, рантайм павінен выконваць толькі дозволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.

    Промышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якія можна распакаваць, час адпрацоўкі павінен выкананы толькі дазволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.

    Промышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якія можна распакаваць, час адпрацоўкі павінен выкананы толькі дазволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.

    ) # python regular expression to selection action\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E \u003Cpre\u003E\u003Ccode class=\"language-python\"\u003Edef query(question, max_turns=5):\n i = 0\n bot = Agent(prompt)\n next_prompt = question\n while i < max_turns:\n i += 1\n result = bot(next_prompt)\n print(result)\n actions = [\n action_re.match(a)\n for a in result.split('\\n')\n if action_re.match(a)\n ]\n if actions:\n # There is an action to run\n action, action_input = actions[0].groups()\n if action not in known_actions:\n raise Exception("Unknown action: {}: {}".format(action, action_input))\n print(" -- running {} {}".format(action, action_input))\n observation = known_actions[action](action_input)\n print("Observation:", observation)\n next_prompt = "Observation: {}".format(observation)\n else:\n return\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E \u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Equestion = """I have 2 fishes, a Shark and a puffer fish. \\\nWhat is their combined weight"""\nquery(question)\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E \u003Col\u003E \u003Cli\u003EІмпортуйце кліента Groq, \u003Ccode\u003Ere\u003C\u002Fcode\u003E для падэння шаблонаў і \u003Ccode\u003Eload_dotenv\u003C\u002Fcode\u003E; запрацавайце файлы з настройкамі сяродовы, каб ключ API не быў заданы як стацыярны код.\u003C\u002Fli\u003E \u003Cli\u003EСтворыце кліента Groq, які чытае значэнне \u003Ccode\u003EGROQ_API_KEY\u003C\u002Fcode\u003E з сяродовы.\u003C\u002Fli\u003E \u003Cli\u003EАпрашайце простае паведамленне “Hello” у настаўлены модэль, каб паказаць наявнасць з’ўязку.\u003C\u002Fli\u003E \u003Cli\u003EСтворыце \u003Ccode\u003EAgent\u003C\u002Fcode\u003E, які зберагае запіты сістэмы і історыю паведамленняў: кожны вызов дадае наступную частку паведамлення ад карыстальніка, апрашае всю історыю, дадае адказ модэля і вяртае гэты тэкст.\u003C\u002Fli\u003E \u003C\u002Fol\u003E\u003Cli\u003EЗапісаце сістэмны прыем, які выкарыстоўвае логіку «Мысль → Дзеянне → Пауза → Абазораванне».\u003C\u002Fli\u003E \u003Cli\u003EЗарэгіструйце інструменты, такія як \u003Ccode\u003Ecalculate()\u003C\u002Fcode\u003E для арыметычных вычыслаў і \u003Ccode\u003Efish_weight()\u003C\u002Fcode\u003E для маленькай табелі даных у \u003Ccode\u003Eknown_actions\u003C\u002Fcode\u003E.\u003C\u002Fli\u003E \u003Cli\u003EСтворыце агента з выкарыстоўваннем сістэмнага прыему ReAct.\u003C\u002Fli\u003E \u003Cli\u003EЗапытайце: «Скількі важыць акула?» Апэктуйце пропанаванае \u003Ccode\u003EAction: fish_weight: Shark\u003C\u002Fcode\u003E, а не проста чысло.\u003C\u002Fli\u003E \u003Cli\u003EРучна запрацавайце \u003Ccode\u003Efish_weight("Shark")\u003C\u002Fcode\u003E і зафіксавайце рэзультат (спачатку у ручным рэжыме).\u003C\u002Fli\u003E \u003Cli\u003EПадаце зворатнае значэнне у фармаце \u003Ccode\u003EObservation: …\u003C\u002Fcode\u003E, каб агент могаў даць адказ.\u003C\u002Fli\u003E \u003Cli\u003EПераглянуце \u003Ccode\u003Eabot.messages\u003C\u002Fcode\u003E, каб пазнаць усю транскрыпцыю, якую бачыць мадэль.\u003C\u002Fli\u003E \u003Cli\u003EСтворыце новага агента з складным запытам (важары акулы і пуфернай рыбы).\n13–15. Ручна задаўце кожнае абазораванне, включаючы сумарную цэль, калі трэба.\u003C\u002Fli\u003E\u003Cli\u003EКалі ўжо ёсць спазырэнняя, нехай агент сустроіць аб’еднаны адказ.\u003C\u002Fli\u003E \u003Cli\u003EДадзіце рэгулярны выраз, які автаматычна выяўляе \u003Ccode\u003EAction: name: input\u003C\u002Fcode\u003E.\u003C\u002Fli\u003E \u003Cli\u003EЗакрыйце цікл у \u003Ccode\u003Equery()\u003C\u002Fcode\u003E: новы агент, надасце запітанне, выведзіце рэзультат, распакаваце дзеянне, пераканацца ў яго адпаведнасці з \u003Ccode\u003Eknown_actions\u003C\u002Fcode\u003E, выконаць, спазырэць, павтарыць да фінальнага адказу чы розмежавання колькасці павтарэнняў.\u003C\u002Fli\u003E \u003Cli\u003EЗастосавіце \u003Ccode\u003Equery()\u003C\u002Fcode\u003E да складанага запітання і старожыце працэс Thought → Action → Observation → Answer без ручных крокаў.\u003C\u002Fli\u003E \u003C\u002Fol\u003E \u003Ch2\u003EВывык\u003C\u002Fh2\u003E \u003Cp\u003EАгенты начынаюць з ціклу, а не з фрэймворку. Мадэлі, навучаныя методам Chain-of-thought, разумеюць голасна; ReAct структуруець працэс think–act–observe на адпаведнасці з спосабамі работы людзей. Популярныя фрэймворкі агентаў індустрыялізуюць гэю ідэю. Стварэнне ціклу вручную назаўсёды зменяе адчуванне ўжо існуючых фрэймворкаў. Адпаведны артыкул знаходзіцца на https:\u002F\u002Farxiv.org\u002Fabs\u002F2210.03629.\u003C\u002Fp\u003E\u003Cp\u003EПромышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якое можна распакаваць, рантайм павінен выконваць толькі дозволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.\u003C\u002Fp\u003E \u003Cp\u003EПромышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якое можна распакаваць, рантайм павінен выконваць толькі дозволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.\u003C\u002Fp\u003E\u003Cp\u003EПромышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якія можна распакаваць, час адпрацоўкі павінен выкананы толькі дазволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.\u003C\u002Fp\u003E \u003Cp\u003EПромышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якія можна распакаваць, час адпрацоўкі павінен выкананы толькі дазволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.\u003C\u002Fp\u003E ","showLangNote":false,"schemaTitle":"Рэакцыя з нуля: думка, дзеянне, пауза, абазаванне без кантрэлі.","schemaDescription":"Мініяцюрны цыкл ReAct, створаны ручная на Groq: думка, дзеянне, пауза, абазаванне, спачатку ручная обработка, а потым вызовы інструментаў з рэгулярнымі выразамі, таму фрэймворкі агентаў LLM стаюць зрозумелымі.","contentLanguage":"be","sources":[{"title":"The Origins of AI Agents -How ReAct Rewired the Way LLMs Think and Act","url":"https:\u002F\u002Fmedium.com\u002F@khanejasamridh\u002Fthe-origins-of-ai-agents-how-react-rewired-the-way-llms-think-and-act-731895739b4f"}],"related":[{"slug":"introduction-to-mcp-from-fragmentation-to-shared-tool-servers","title":"Введэнне ў MCP: ад фрагментацыі да спяльных сервероў інструментаў"},{"slug":"mcp-from-scratch-part-3-connect-a-client-to-your-server","title":"MCP ад зямлі, частка 3: З’ўязак кліента з вашым серверам"},{"slug":"ai-agents-for-future-engineers-memory-tools-and-control-loops","title":"АІ-агенты для інжынераў будуччыны: памяць, інструменты і ціклы кантролю"}]}},"actionData":null,"errors":null} ) # python regular expression to selection action
    def query(question, max_turns=5):
        i = 0
        bot = Agent(prompt)
        next_prompt = question
        while i < max_turns:
            i += 1
            result = bot(next_prompt)
            print(result)
            actions = [
                action_re.match(a)
                for a in result.split('\n')
                if action_re.match(a)
            ]
            if actions:
                # There is an action to run
                action, action_input = actions[0].groups()
                if action not in known_actions:
                    raise Exception("Unknown action: {}: {}".format(action, action_input))
                print(" -- running {} {}".format(action, action_input))
                observation = known_actions[action](action_input)
                print("Observation:", observation)
                next_prompt = "Observation: {}".format(observation)
            else:
                return
    
    question = """I have 2 fishes, a Shark and a puffer fish. \
    What is their combined weight"""
    query(question)
    
    1. Імпортуйце кліента Groq, re для падэння шаблонаў і load_dotenv; запрацавайце файлы з настройкамі сяродовы, каб ключ API не быў заданы як стацыярны код.
    2. Створыце кліента Groq, які чытае значэнне GROQ_API_KEY з сяродовы.
    3. Апрашайце простае паведамленне “Hello” у настаўлены модэль, каб паказаць наявнасць з’ўязку.
    4. Створыце Agent, які зберагае запіты сістэмы і історыю паведамленняў: кожны вызов дадае наступную частку паведамлення ад карыстальніка, апрашае всю історыю, дадае адказ модэля і вяртае гэты тэкст.
  • Запісаце сістэмны прыем, які выкарыстоўвае логіку «Мысль → Дзеянне → Пауза → Абазораванне».
  • Зарэгіструйце інструменты, такія як calculate() для арыметычных вычыслаў і fish_weight() для маленькай табелі даных у known_actions.
  • Створыце агента з выкарыстоўваннем сістэмнага прыему ReAct.
  • Запытайце: «Скількі важыць акула?» Апэктуйце пропанаванае Action: fish_weight: Shark, а не проста чысло.
  • Ручна запрацавайце fish_weight("Shark") і зафіксавайце рэзультат (спачатку у ручным рэжыме).
  • Падаце зворатнае значэнне у фармаце Observation: …, каб агент могаў даць адказ.
  • Пераглянуце abot.messages, каб пазнаць усю транскрыпцыю, якую бачыць мадэль.
  • Створыце новага агента з складным запытам (важары акулы і пуфернай рыбы). 13–15. Ручна задаўце кожнае абазораванне, включаючы сумарную цэль, калі трэба.
  • Калі ўжо ёсць спазырэнняя, нехай агент сустроіць аб’еднаны адказ.
  • Дадзіце рэгулярны выраз, які автаматычна выяўляе Action: name: input.
  • Закрыйце цікл у query(): новы агент, надасце запітанне, выведзіце рэзультат, распакаваце дзеянне, пераканацца ў яго адпаведнасці з known_actions, выконаць, спазырэць, павтарыць да фінальнага адказу чы розмежавання колькасці павтарэнняў.
  • Застосавіце query() да складанага запітання і старожыце працэс Thought → Action → Observation → Answer без ручных крокаў.
  • Вывык

    Агенты начынаюць з ціклу, а не з фрэймворку. Мадэлі, навучаныя методам Chain-of-thought, разумеюць голасна; ReAct структуруець працэс think–act–observe на адпаведнасці з спосабамі работы людзей. Популярныя фрэймворкі агентаў індустрыялізуюць гэю ідэю. Стварэнне ціклу вручную назаўсёды зменяе адчуванне ўжо існуючых фрэймворкаў. Адпаведны артыкул знаходзіцца на https://arxiv.org/abs/2210.03629.

    Промышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якое можна распакаваць, рантайм павінен выконваць толькі дозволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.

    Промышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якое можна распакаваць, рантайм павінен выконваць толькі дозволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.

    Промышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якія можна распакаваць, час адпрацоўкі павінен выкананы толькі дазволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.

    Промышленным урокам парадоксальна тая частка, што фрэймворкі хаваюць цыкл за адпрацоўчымі элементамі і вузламі інструментаў, але кантракт застаецца тым жа: модэль должна выдаваць дзеяння, якія можна распакаваць, час адпрацоўкі павінен выкананы толькі дазволеныя інструменты, а спазіраванняя должны знову прайсці ў транскрыпцыю як повнастайна значныя паведамлення. Калі прыгнуць хоць адна з гэтых умов, то будзе чат-бот з парадоксальнымі наследкамі, а не агент.

    ← Усе артыкулыДаслаць брыф