3.3 🕵️‍♂️ Агенты intro

🕵️‍♂️ Агент - полиграф.* 📠

Пользователи вашего сервиса присылают вам на проверку различные факты, которые они прочитали где-то в Интернете или услышали от друзей, и хотят, чтобы вы подтвердили или опровергли его.

Создайте агента, который смог бы отвечать на вопросы из широкого спектра областей знаний от математических примеров до научных фактов. Отвечать надо в формате: правда или ложь. На некоторые вопросы, возможно, агент не сможет ответить без вашей помощи, например про преподавателей курса 🙈, поэтому надо будет использовать инструмент "human", о котором упоминали в ноутбуке урока.

Вам даётся датасет содержащий набор различных фактов, напротив которых в столбце 'answers' нужно проставить: True или False (True, а не строку: 'True').

Пример строки ответа:


'detail': 'not enough tokens: You have 57, you use 616'

не знаю. я не очень доволен результатом на самом деле. Не знаю как составить промпт темплейт что бы он сам ответил точно на все что может.

1) Например с этим промптом я набрал 25 правильных ответов. Но агент спрашивал меня 5 вопросов и пришлось гуглить пару раз ответы

prompt_template = PromptTemplate(
    input_variables=["question"],
    template="""Критически важно что бы ты проанализировал утверждение '{question}' и сказал верно оно или нет 
    если ты хоть немного сомневаешься в ответе то отвечай 'Dont know',
    если ты точно уверен что утверждение верно то отвечай 'True'
    если ты точно уверен что утверждение не верно то отвечай 'False'"""
)

# Использую humanTool
human_tool = HumanInputRun()

def handle_question(question: str) -> str:
    prompt = prompt_template.format(question=question)
    response = llm.predict(prompt)
    
    # является ли ответ "True" или "False"
    if response in ["True", "False"]:
        return response
    else:
        # Если ответ не "True" или "False", используею human_tool
        user_input = human_tool.run(f"Я не знаю ответа на вопрос: '{question}'. Какой ответ?")
        return user_input

@tool
def llm_tool(question: str) -> str:
    """функция для получения ответа True, False или не знаю на утверждение"""
    return handle_question(question)


tools = [llm_tool]
first_agent = initialize_agent(
    tools=tools,
    llm=llm,
    verbose=True,
    handle_parsing_errors=True,
    max_iterations=3
)

2) а когда промпт был просто вот такой
"Если уверен в ответе то ответь 'True' или 'False' на следующий вопрос: {question}, а если не уверен то ответь 'не знаю'"
то агент меня спросил всего два раза(что правильно, так как по идее он не уверен только в двух случаях)
Но было 4 ошибки.


Надо было еще каких то агентов подключать или как? надеюсь кто то ответит))

Ваше решение дает 25 правильных ответов. Вы получили максимальный балл. Поздравляем! Двигайтесь дальше!

@Aleksandr_Pylaev, спасибо за решение, я на этом задании что-то подзастрял

@Aleksandr_Pylaev,  но я запустил и понял в чем костыль))) ну хоть что-то

я тут просто подумал , зачем заморачиватся на пару часов с написанием кода , кода ChartGPT или Claude спок выбивает нормальный результат :)

Вы побили порог в 15 правильных ответов: ваше решение дает 22. Вы получили 8.8 баллов из 10. Если у вас еще остались попытки, попробуйте улучшить результат!