2.2 👩‍🎨 Дизайн промптов в LangChain

📧 ⚙️ 💌 Переделай промпт в темплэйт!

Есть вот такой промпт:

prompt = '''
Ответь на вопрос, исходя из контекста ниже
в стиле Rap. Если на вопрос невозможно ответить, 
используя предоставленную информацию ответь «Я не знаю».
Context: Большие языковые модели (LLM) — это новейшие модели, используемые в NLP.
Превосходные характеристики по сравнению с моделями меньшего размера сделали их невероятно
полезными для разработчиков, создающих приложения с поддержкой NLP.
Доступ к ним можно получить через библиотеку transformers Hugging Face через OpenAI
с использованием библиотеки openai и через Cohere с использованием библиотеки cohere.
Question: Какие библиотеки и поставщики моделей предлагают LLM?
Answer:
'''

Переделай его в шаблон так, чтобы можно было менять:

  • стиль ответа
  • вариант ответа, если модель не знает (вместо "Я не знаю")
  • контекст
  • вопрос

 И чтобы он подходил под приведённый ниже шаблон.

prompt_template = PromptTemplate(
    input_variables=["style", "no_answer", "context", "query"],
    template=template
)

Примечание: переменные вставляйте на то же место, где были слова, которые хотите заменить!


from langchain.prompts import PromptTemplate

template = """Ответь на вопрос, исходя из {context} в стиле {style}. Если на {query} невозможно ответить, используя предоставленную информацию, ответь {no_answer}.

Style: {style}

No_answer: {no_answer}

Context: {context}

Query: {query}

"""

 

prompt_template = PromptTemplate(

input_variables=["style", "no_answer", "context", "query"],

template=template

)

 

style = "в стиле Rap"

no_answer = "Я не знаю"

context = """Большие языковые модели (LLM) — это новейшие модели, используемые в NLP.

Превосходные характеристики по сравнению с моделями меньшего размера сделали их невероятно

полезными для разработчиков, создающих приложения с поддержкой NLP.

Доступ к ним можно получить через библиотеку transformers Hugging Face через OpenAI

с использованием библиотеки openai и через Cohere с использованием библиотеки cohere."""

query = "Какие библиотеки и поставщики моделей предлагают LLM?"

 

# формируем промпт из шаблона с помощью метода format

prompt = prompt_template.format(

style=style,

no_answer=no_answer,

context=context,

query=query

)

 

print(prompt)

print('-'*30)

answer = llm.invoke(prompt)

print(answer)


в ноутбуке все работает , тут нет !

@Денис_Титлов, Зачем по 2 раза используются no_answer, style, context в шаблоне? Вместо переменных туда 2 раза подставится один и тот же текст. Может оно и работает, но будет перерасход токенов и модель может запутаться.

@Денис_Титлов, в это задании нужно отправить только template.

Не понимаю в чем ошибка

Мой код 

template = """Ответь на вопрос, исходя из {context} в стиле {style}. Если на {query} невозможно ответить, 
 используя предоставленную информацию ответь {no_answer}.

Context: {context}

Query: {query}

Style: {style}

No_answer: {no_answer}

Answer: """

@Дмитрий_Зиновеев, Попросил chatgpt объяснить разницу между вашим ответом и правильным ответом, чтобы подсказал, на что обратить внимание для получения правильного ответа. Вот три рекомендации на основе трех разных запросов =)

Вопрос: Пользователь составивший неправильный promt не понимает в чем его ошибка и отличие от правильно составленного promt. Как ему составить правильный promt? Дай ответ в виде подсказки на что обратить внимание.
Ответ: Подсказка: Обрати внимание на порядок переменных в шаблоне и на то, как они используются в тексте. Правильный promt должен соответствовать порядку переменных в шаблоне и логически следовать за контекстом и вопросом.

 

Вопрос: Чем в приведенных выше примерах отличается правильно переделанный promt от неправильно переделанного promt? Дай ответ в виде подсказки на что обратить внимание.

Ответ: Правильно переделанный promt имеет переменные {style}, {no_answer}, {context}, {query} в нужных местах шаблона, что позволяет легко изменять стиль ответа, вариант ответа при незнании, контекст и вопрос. Неправильно переделанный promt содержит лишние переменные и неправильно расположены элементы шаблона, что делает его менее удобным для изменений и использования.

Вопрос: Пользователь составивший неправильный promt не понимает в чем его ошибка и отличие от правильно составленного promt. Как ему составить правильный promt? Дай ответ в виде подсказки с пошаговым алгоритмом действий.
Ответ: 

1. Убедитесь, что в вашем promt_template указаны все необходимые переменные: "style", "no_answer", "context", "query".
2. Убедитесь, что в вашем шаблоне template используются эти переменные в правильном контексте.
3. В шаблоне template используйте фигурные скобки {} для обозначения переменных, которые будут заменены значениями из promt_template.
4. Убедитесь, что порядок переменных в promt_template соответствует их использованию в шаблоне template.
5. Проверьте, что в шаблоне template нет лишних переменных или текста, который не должен быть заменен.
6. После составления правильного promt_template, используйте его для создания нового promt, следуя указаниям в шаблоне.

@Anonymous_141978257, спасибо

Блин, пока понял, что в итоговом ответе не должно быть 

prompt_template = PromptTemplate(
    input_variables=["style", "no_answer", "context", "query"],
    template=template
)
чуть не убился 

Решил задачу по chatGPT c помощью chatGPT

как-то много неверных попыток)

template = '''
Ответь на вопрос, исходя из контекста ниже
в стиле {style}. Если на вопрос невозможно ответить, 
используя предоставленную информацию ответь «{no_answer}».
Context: {context}
Question: {query}
Answer:
'''