66 lines
4.2 KiB
Python
66 lines
4.2 KiB
Python
import json
|
|
from langchain_core.tools import tool
|
|
from langchain.agents.output_parsers import ReActJsonSingleInputOutputParser
|
|
from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder, PromptTemplate
|
|
from langchain_core.messages import HumanMessage,AIMessage
|
|
from langchain_core.tools import render_text_description
|
|
from langchain.chains import create_history_aware_retriever
|
|
from langchain.chains.combine_documents import create_stuff_documents_chain
|
|
import langchain.chains
|
|
from langchain.chains import create_history_aware_retriever
|
|
from langchain.chains.combine_documents import create_stuff_documents_chain
|
|
from langchain.agents.format_scratchpad import format_log_to_str
|
|
from langchain.chains import create_retrieval_chain
|
|
from langchain_aws import ChatBedrock
|
|
from langchain_aws.retrievers import AmazonKnowledgeBasesRetriever
|
|
from langchain.chains import ConversationalRetrievalChain
|
|
from typing import Union
|
|
from langchain_core.agents import AgentAction, AgentFinish
|
|
from langchain.agents.output_parsers import ReActSingleInputOutputParser
|
|
from langchain.tools import Tool
|
|
from langgraph.checkpoint.memory import MemorySaver
|
|
from langgraph.prebuilt import create_react_agent
|
|
import os
|
|
|
|
def find_tool_by_name(tools: list[Tool],tool_name:str):
|
|
for tool in tools:
|
|
if tool.name==tool_name:
|
|
print(tool.name)
|
|
print("\n\n")
|
|
return tool
|
|
raise ValueError(f"Tool with name {tool_name} not found")
|
|
def hello(event,context):
|
|
llm = ChatBedrock(
|
|
model_id="arn:aws:bedrock:us-east-1:654654422992:application-inference-profile/glvyppv11ds5",
|
|
region_name="us-east-1",
|
|
#aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"],
|
|
#aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"],
|
|
#aws_session_token=os.environ["AWS_SESSION_TOKEN"],
|
|
model_kwargs={"temperature": 0.1, 'max_tokens': 1000,},
|
|
provider='anthropic'
|
|
)
|
|
retriever = AmazonKnowledgeBasesRetriever(
|
|
knowledge_base_id="RBD9TI5HYU",
|
|
region_name="us-east-1",
|
|
retrieval_config={"vectorSearchConfiguration": {"numberOfResults": 4}},
|
|
|
|
)
|
|
memory = MemorySaver()
|
|
model = llm
|
|
tools = [retriever.as_tool()]
|
|
prompt="""Você é um assistente para alunos de diversos campus diferentes do instituto federal de são paulo, sua função é responder perguntas de forma mais eficiente possivel sobre editais, que pode ser acessados pela tool fornecida.
|
|
Note que dependendo do Campus os editais são diferentes, então é mandatório saber o campus do aluno antes de devolver alguma informação.
|
|
Além disso existem editais válidos apenas para alunos do ensino médio, apaenas para ensino superior e para ambos.
|
|
O edital difere também se o aluno já recebe algum auxílio ou é o primeiro. Obtenha a informação do edital mais recente que cumpra as condições.
|
|
Além disso leve em consideração o chat history fornecido. Não crie informações de editais, apenas faça perguntas para o contexto e busque dos editais quando estiver com informações suficientes. Retorne o titulo do documento consultado, não o nome do arquivo.
|
|
Documentos com a sigla MTO são do campus matão. Documentos com a sigla SPO são do campus são paulo. É imperativo não obeter documentos de outros campus que não sejam o solicitado, não use informações deles. Os valores, se estiverem em formato de tabela, se encontrarão após o tipo da modaldie (moradia,transporte e etc), nunca antes. Não é nescessário buscar informações dos editais se uma dúvida não for apresentada ou se houver uma informação importante faltando.
|
|
Use sempre os documentos mais recentes, atualmente estamos no segundo semestre de 2025.
|
|
Caso seja mencionado que um dos pais não é registrado isso significa que é trabalhador informal."""
|
|
agent_executor = create_react_agent(model, tools, checkpointer=memory, prompt=prompt)
|
|
config = {"configurable": {"thread_id": "abc123"}}
|
|
input_message = event["message"]
|
|
#input_message=[{"role":"user","content":"aluno superior, nunca recebi auxilio, campus são paulo, Meu pai não é registrado, como faço para ganhar auxilio?"}]
|
|
response=""
|
|
for step in agent_executor.stream({"messages": input_message}, config, stream_mode="values"):
|
|
response={"json":(step["messages"][-1].text())}
|
|
return (response) |