File size: 3,207 Bytes
1d9f996
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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']