Я работаю в издательстве, и я создаю чат-бота, который внутри себя генерирует предложения SQL с помощью LangChain (агент SQL). Бот может получать такую информацию, как цены, происхождение публикаций, киоски, идентификаторы публикаций, темы и т. д. Поскольку эти агенты не имеют состояния (так же, как завершение чата), я использую еще один слой завершения сверху, чтобы генерировать значимые запросы для бота.< /p>
Например:
Если я спрошу агента: «Какая новая публикация о «фиторастении» от редакции А-47854», он получит:
Код: Выделить всё
Response:
A new study on fossils and phytoplankton
ISBN: 1237854-HNU
Country: France
Edition: On Hold
House: Journal World Inc.
Phyplankton in Stale Water
ISBN: HBXX78-HNU
Country: Germany
Edition: Published
House: Environmental Herald
Я пытаюсь создать слой поверх него, который будет перезаписывать и предоставлять контекст запроса, чтобы моя модель могла давать более точный ответ.
Желаемое изменение запроса:
Код: Выделить всё
For example, for the follow-up question:
"What other publications do you have from the second house?"
The expected reformulation would be:
"What other publications aside from 'Phyplankton in Stale Water' (ISBN HBXX78-HNU) does the house 'Environmental Herald' have?"
Потому что «Экологический вестник» — второй дом, упомянутый в истории чата, и эта контекстная информация имеет решающее значение.
Аналогично, если пользователь говорит что-то вроде «Спасибо» или «Вот и все, бот», запросы такого типа не следует переписывать.
Если запрос не связан с предыдущим диалогом, его следует вернуть как есть. Например: «Расскажите мне о последних публикациях по биомеханике из Лондона».
Я испробовал множество подсказок и подходов для достижения такого поведения, но ничего не помогало.
Моя подсказка:
Код: Выделить всё
*SYSTEM = """
Below is a history of the conversation so far, and a new question asked by the user that needs to be answered by searching in a knowledge base.
When related to the query, make use of the keywords 'Editorial' and 'House', and include the ISBN code when the question needs rewriting.
Your job is to generate queries, never to answer them.
Follow these steps and rules:
Rules:
1. If the user is greeting you, congratulating you, or saying goodbye, pass that text as it is. For example, "Thank you, bot":
Your final output must be: "Thank you, bot."
2. Analyze the chat history and determine if the current user query is related to the previous conversation. If so, provide the relevant context, data, keywords, and codes to pass it to the SQL agent.
Example:
User: "What's the latest titles in the catalog?"
Assistant: "1. Biomechanics for College Students 2. Statistics Beyond Inference 3. Movie Nights as a Way to Therapy"
User: "Give more info on the second one."
The proper output to generate would be:
"More information on 2. 'Statistics Beyond Inference'."
"""*
Код: Выделить всё
# System message
system_message = {
"role": "system",
"content": SYSTEM
}
user_query = "Tell me more about the second publication"
# Create the full message list: system message + chat history + current user query
messages = [system_message] + CHAT_HISTORY + [
{
"role": "user",
"content": user_query,
}
]
contex_question = model_client.chat.completions.create(
model=deployment,
messages=messages,
temperature=0.0
)
key_question = contex_question.choices[0].message.content
print(f"Inference prompt: {messages}\n")
print(f"Generated response: {key_question}")
Например, если это моя история чата:
Пользователь: «Есть ли у вас какие-либо публикации из Норвегии по биомеханике?» ?"
Ассистент: "Да, есть. 1. Показатели очков по биомеханике ISBN 4785-7854 и 2. ISBN 8575-8YUA по общим решениям для металлов и биотехнологий."
Затем я спрашиваю:
Пользователь: «Какова дата публикации первого?»
Я получаю ответ:
«Дата публикации первого издание по биомеханике в Норвегии."
Код: Выделить всё
However, the expected output I want is:
"Publication date for Glasses Metrics on Biomechanics ISBN 4785-7854."
Кроме того, если я наберу что-то вроде:
Пользователь: " Спасибо, бот. Вот и все».
Я получаю такие ответы:
«Приходите в любое время». или
"Другие публикации, связанные с Норвегией и биомеханикой".
Код: Выделить всё
These responses are not expected. The model should return the exact message when it's a polite phrase like "Thank you."
Подробнее здесь: https://stackoverflow.com/questions/790 ... at-history