Spaces:
Configuration error
Configuration error
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'] |