Spaces:
Configuration error
Configuration error
from langchain.agents import Tool | |
from langchain.agents import initialize_agent | |
from langchain_openai import ChatOpenAI | |
from langchain.chains.conversation.memory import ConversationBufferWindowMemory | |
from langchain.chains import LLMChain | |
from langchain.prompts import PromptTemplate | |
from utils import get_question_context, google_search_result | |
import os | |
from dotenv import load_dotenv, find_dotenv | |
_ = load_dotenv(find_dotenv()) | |
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY') | |
# Definimos el template para la consulta de turismo | |
turism_template = """You are a very experienced turist guide specialised in recommending activities \ | |
and things to do in Marbella, a city located in Andalusia, Spain. \ | |
You have an excellent knowledge of and understanding of restaurants, sports, activities, experiences and places to visit in the city \ | |
specifically targeted to families, couples, friends and solo travelers. \ | |
You have the ability to think, reflect, debate, discuss and evaluate the data stored in a knowledge base from youtube videos related to \ | |
turism in Marbella, and the ability to make use of it to support your explanations to the future turists that will visit the city and ask for your advice. \ | |
Remenber: You answer must be so accurate and based on your knowledbase. \ | |
Here is a question from a user: \ | |
{input}""" | |
default_template = """You are a bot specialised in giving answers to questions about a wide range of topics. \ | |
You are provided with the user answer and context from the first non-sponsored URL from a Google search. \ | |
If you don't know the answer simply say I don't know but if you do please answer the question precisely.\ | |
Here is a question from a user and a bit of context from Google Search: \ | |
{input}""" | |
def get_turism_answer(input): | |
input = get_question_context(query=input, top_k=3) | |
llm_prompt = PromptTemplate.from_template(turism_template) | |
chain = LLMChain(llm=llm, prompt=llm_prompt) | |
answer = chain.run(input) | |
return answer | |
def get_internet_answer(input): | |
context = google_search_result(input) | |
input = f"Pregunta del usuario: {input} \n Contexto para responder a la pregunta del usuario: {context}" | |
llm_prompt = PromptTemplate.from_template(default_template) | |
chain = LLMChain(llm=llm, prompt=llm_prompt) | |
answer = chain.run(input) | |
return answer | |
tools = [ | |
Tool( | |
name='Turism knowledgebase tool', | |
func=get_turism_answer, | |
description=('Use this tool when answering questions about turism in Marbella.') | |
), | |
Tool( | |
name='Default knowledgebase tool', | |
func=get_internet_answer, | |
description=( | |
'use this tool when the input question is not related to turism in Marbella.' | |
) | |
) | |
] | |
llm = ChatOpenAI(model='gpt-4',temperature=0) | |
# conversational memory | |
conversational_memory = ConversationBufferWindowMemory( | |
memory_key='chat_history', | |
k=5, | |
return_messages=True | |
) | |
agent = initialize_agent( | |
agent='chat-conversational-react-description', | |
tools=tools, | |
llm=llm, | |
verbose=True, | |
max_iterations=3, | |
early_stopping_method='generate', | |
memory=conversational_memory | |
) | |
def call_agent(input): | |
return agent(input)['output'] |