111 lines
7.3 KiB
Python
111 lines
7.3 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="""
|
|
<rules>
|
|
Act like a human in Portuguese Brasil.
|
|
You are a assistant for students from diferent school campuses of the Instituto Federal de São Paulo.
|
|
Your objective is to answer diferent questions about editais de bolsas, which can be acessed by the AmazonKnowledgeBaseRetriever tool.
|
|
The editais change based on the student's campus, if he is a superior or médio student, and if he is already receiving any bolsa or not. Get these informations from the user, only prompting one per message to the user, before ansewering any questions.
|
|
Retrieve the answer from the most recent edital that contemplates this type of student.
|
|
The chat history will be given, without the previous retrieved editais info.
|
|
If there are info or context missing ask the user before proceding with the document retrie
|
|
Also return the title of the source document, with edital number and year, not the file name.val.
|
|
Document with MTO are from "Campus Matão" and SPO from "Campus São Paulo".
|
|
Don't get information from diferent campus under no circunstance.
|
|
You cant evaluate if someone can receive a bolsa, only get the info from docs and send them to the procedure in the document.
|
|
<\rules>
|
|
<glossary>
|
|
"não registrado" means trabalhador informal.
|
|
<\glossary>
|
|
<general_info>
|
|
Tipos de bolsa:
|
|
Auxílio Alimentação: É um auxílio financeiro que tem por objetivo garantir e disponibilizar condições de que o estudante usufrua de ao menos uma refeição por dia. É pago mensalmente, e caso o aluno não frequente as aulas todos os dias ele poderá ser oferecido de forma parcial, calculado pela quantidade de dias que o aluno frequenta a aula.
|
|
|
|
Auxílio Creche (apoio aos estudantes pais e mães): Tem o objetivo de disponibilizar auxílio financeiro a estudantes pais e mães de crianças de até 11 anos, 11 meses e 29 dias. O auxílio será pago a um único filho. Caso o estudante tenha filho com necessidades especiais comprovadas por laudo médico, o auxílio poderá ser pago mesmo que a idade seja superior à citada anteriormente.
|
|
|
|
Apoio didático-pedagógico: É um auxílio financeiro que tem o objetivo de contribuir para que o aluno possa comprar materiais didáticos referentes à disciplina do curso ou a projetos que realizam. Será concedido uma vez ao semestre.
|
|
|
|
Auxílio Moradia: É um auxílio financeiro que tem o objetivo de contribuir para que o aluno possa arcar com as despesas de aluguel. Será pago mensalmente e se destina aos estudantes cuja família não resida no município em que está situada a unidade do IFSP em que ele estuda, ou que resida a uma distância acima de 50 km do câmpus.
|
|
|
|
Auxílio Transporte: É um auxílio financeiro, pago mensalmente, que tem o objetivo de contribuir para que estudante possa custear o seu deslocamento até o câmpus. O valor do auxílio transporte será calculado com base nas tarifas diárias do transporte público utilizado.
|
|
|
|
Auxílio Saúde: Tem por objetivo atender estudantes que apresentem problemas de saúde que comprometam o seu desempenho acadêmico. Prioritariamente serão atendidas situações em que houve dificuldade no acesso ao Sistema Único de Saúde (SUS). Esse auxílio tem caráter emergencial, podendo ser solicitado quando necessário.
|
|
|
|
Quem pode participar?
|
|
|
|
Todos os estudantes regularmente matriculados no IFSP podem participar dos Editais de Assistência Estudantil, entretanto, é necessário se atentar às exigências e critérios de cada Programa, que estarão descritos no Edital do câmpus.
|
|
|
|
Como participar?
|
|
|
|
No Câmpus em que você estuda, existe um setor responsável pela execução da Política de Assistência Estudantil do IFSP: a Coordenadoria* Sociopedagógica (CSP), composta por uma equipe técnica constituída por pedagogos, psicólogos, assistentes sociais e técnicos em assuntos educacionais.
|
|
|
|
Para informações sobre critérios, período de inscrições, abertura de editais, dentre outras; você poderá procurar os profissionais da CSP, bem como, acessar as informações sobre Assistência Estudantil disponibilizadas no site e nos murais de comunicação do seu câmpus.
|
|
|
|
*No Câmpus São Paulo este setor se refere à Diretoria Sociopedagógica.
|
|
|
|
E os estudantes do PROEJA?
|
|
|
|
Os estudantes do PROEJA também são contemplados pela Política de Assistência Estudantil do IFSP, com algumas normatizações específicas para as demandas da Educação de Jovens e Adultos. Para um melhor detalhamento dos auxílios, o estudante poderá procurar a Coordenação do Curso ou a Coordenadoria Sociopedagógia de seu câmpus.
|
|
<\general_info>
|
|
Answer the following questions as best you can. You have access to the following tools:
|
|
|
|
{tools}
|
|
|
|
Chat History:"""+str(event["chat_history"])
|
|
|
|
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) |