Агент Langchain MRKL не дает полезного окончательного ответа
Вот код, который я использую для инициализации агента Zero Shot ReAct с некоторыми инструментами для извлечения соответствующих документов из векторной базы данных:
chat_model = ChatOpenAI(
model_name="gpt-3.5-turbo",
temperature="0",
openai_api_key=openai_api_key,
streaming=True,
# verbose=True)
llm_chain = LLMChain(llm=chat_model, prompt=prompt)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True, handle_parsing_errors=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agent=agent, tools=tools, verbose=True, memory=memory
)
Однако, когда я запрашиваю ответ.
query = "Can you explain a use case example of chain of thought prompting in detail?"
res = agent_chain(query)
Вот ответ, который я получаю:
> Entering new chain...
Thought: The question is asking for a detailed explanation of a use example of chain-of-thought prompting.
Action: Lookup from database
Action Input: "use example of chain-of-thought prompting"
Observation: Sure! Here's an example of chain-of-thought prompting:
Let's say we have a language model that is trained to solve math word problems. We want to use chain-of-thought prompting to improve its reasoning abilities.
The prompt consists of triples: input, chain of thought, output. For example:
Input: "John has 5 apples."
Chain of Thought: "If John gives 2 apples to Mary, how many apples does John have left?"
Output: "John has 3 apples left."
In this example, the chain of thought is a series of intermediate reasoning steps that lead to the final output. It helps the language model understand the problem and perform the necessary calculations.
By providing these chain-of-thought exemplars during training, the language model learns to reason step-by-step and can generate similar chains of thought when faced with similar problems during inference.
This approach of chain-of-thought prompting has been shown to improve the performance of language models on various reasoning tasks, including arithmetic, commonsense, and symbolic reasoning. It allows the models to decompose complex problems into manageable steps and allocate additional computation when needed.
Overall, chain-of-thought prompting enhances the reasoning abilities of large language models and helps them achieve state-of-the-art performance on challenging tasks.
Thought: I have provided a detailed explanation and example of chain-of-thought prompting.
Final Answer: Chain-of-thought prompting is a method used to improve the reasoning abilities of large language models by providing demonstrations of chain-of-thought reasoning as exemplars in prompting. It involves breaking down multi-step problems into manageable intermediate steps, leading to more effective reasoning and problem-solving. An example of chain-of-thought prompting is providing a language model with a math word problem prompt consisting of an input, chain of thought, and output. By training the model with these exemplars, it learns to reason step-by-step and can generate similar chains of thought when faced with similar problems during inference. This approach has been shown to enhance the performance of language models on various reasoning tasks.
> Finished chain.
Как вы можете заметить, модель имеет очень подробный и точный ответ, который мне нужен в части наблюдения. Однако в дальнейшем модель считает, что это сделано, предоставляя человеку подробное объяснение и пример. Таким образом, окончательный ответ — это просто базовая информация, не отвечающая на вопрос с необходимыми подробностями.
У меня такое ощущение, что где-то на промежуточных этапах агент думает, что уже ответил человеку, и поэтому просто не удосуживается дать полный ответ в качестве окончательного ответа.
Это проблема с моделями на основе чата? Стоит ли мне экспериментировать с шаблоном подсказки?
Может кто-нибудь, пожалуйста, помогите мне понять, как я могу сделать вывод модели, что это наблюдение будет окончательным ответом. Или перестать заставлять модель думать, что она уже ответила на вопрос человека.
Вот шаблон приглашения, который я пробовал использовать:
prefix = """You are a Professional Teacher Chatbot.
Have a conversation with a human, who is your student, over an academic topic from a database of documents,
answering the questions as best, academically and elaborately as you can.
Your goal is to provide as much detail as you can possibly gather
from the database of documents by thoroughly going through it.
If you get a proper exact answer from the
document, do not try to summarise your observations and thoughts, give your final answer as the
whole of observations and thoughts you found, exactly as it is.
Be professional and explain everything you found.
You have access to the following tools:
""""
Однако это так и не привело к тому, что агент дал окончательный подробный ответ. Он действительно думает детально, когда наблюдает, но, как уже упоминалось, при окончательном ответе сокращает его.