Este projeto pode ser aplicado nas seguintes situações:
- Assistentes virtuais, para atendiementos simples.
- Assitentes pessoais especializadas em algo.
Siga com precisão as orientações de configuração do ambiente para assegurar eficácia consistente no desenvolvimento do projeto.
O comando pip para instalar as bibliotecas nessesarias para este projeto é:
pip install langchain langchain_chroma langchain_core langchain_text_splitters langchain_openai langchain_community pypdf
Important
Dependendo do formato de arquivo pode ser que o loader se altere
Base vector é a parte usada para a captura e divisao dos documentos que seram usados no chat, este codigo é dividido nas seguintes partes:
Este import tem a função de carregar o documento, podendo ser mudado dependendo do formato do arquivo.
from langchain_community.document_loaders import PyPDFLoader
Biblioteca utilizada para a criação dos embeddings, feito para converter os textos em vetores de embeddings que podem ser usados para busca e análise.
from langchain_openai import OpenAIEmbeddings
Usado para a divisão dos documentos em partes menores, para que a pesquisa possa ser mais eficiente.
from langchain_text_splitters import RecursiveCharacterTextSplitter
Biblioteca para a estruturação dos arquivos estarem no modelo do Chroma.
from langchain_chroma import Chroma
path_vetorDb = "path da saida"
loader = PyPDFLoader("path do arquivo", extract_images=False)
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings(api_key=openai_api_key), persist_directory=path_vetorDb)
Note
Se for feito dessa forma o Vector fica armazenado no disco, fazendo assim que o codigo tenha que ser executado apenas uma vez.
Este codigo é o chat propriamente dito, com todas as partes do desenvolvimento, que possue as seguintes partes:
Biblioteca para criar uma cadeia para combinar documentos em um único documento ou resposta.
from langchain.chains.combine_documents import create_stuff_documents_chain
Biblioteca para criar uma cadeia para recuperar documentos relevantes com base em uma consulta.
from langchain.chains import create_retrieval_chain
Biblioteca para criar um recuperador de documentos que leva em consideração o histórico de interações
from langchain.chains import create_history_aware_retriever
Biblioteca para a interface para a integração com a base de dados Chroma
from langchain_chroma import Chroma
Biblioteca para criar templates para prompts de chat
from langchain_core.prompts import ChatPromptTemplate
Biblioteca para placeholder para mensagens em um prompt de chat
from langchain_core.prompts import MessagesPlaceholder
Biblioteca para definir tipos de mensagens para interações de chat (mensagens de IA e mensagens de humanos)
from langchain_core.messages import AIMessage, HumanMessage
Biblioteca utilizada para a criação dos embeddings, feito paca conevrter os textos em vetores de embeddings que podem ser usados para busca e análise.
from langchain_openai import OpenAIEmbeddings
Biblioteca para interface para usar modelos de chat da OpenAI
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4o",
temperature=0.0, # A temperatura varia de 0 ate 1, 0 mais padronizado, 1 mais aleatório
max_tokens=None,
api_key=openai_api_key,
# timeout=None,
# max_retries=2
)
path_vetorDb = "Pyton/Data/vetorDB"
vectorstore = Chroma(persist_directory=path_vetorDb, embedding_function=OpenAIEmbeddings(api_key=openai_api_key))
retriever = vectorstore.as_retriever()
system_prompt = (
""
"\n\n"
"{context}"
)
prompt = ChatPromptTemplate.from_messages(
[
("system", system_prompt),
("human", "{input}"),
]
)
Chain que utiliza o retriever para recuperar os dados, question_answer_chain para combinar os dados em uma resposta
question_answer_chain = create_stuff_documents_chain(llm, prompt)
rag_chain = create_retrieval_chain(retriever, question_answer_chain)
contextualize_q_prompt = ChatPromptTemplate.from_messages(
[
("system", contextualize_q_system_prompt),
MessagesPlaceholder("chat_history"),
("human", "{input}"),
]
)
history_aware_retriever = create_history_aware_retriever(
llm, retriever, contextualize_q_prompt
)
qa_prompt = ChatPromptTemplate.from_messages(
[
("system", system_prompt),
MessagesPlaceholder("chat_history"),
("human", "{input}"),
]
)
question_answer_chain = create_stuff_documents_chain(llm, qa_prompt)
rag_chain = create_retrieval_chain(history_aware_retriever, question_answer_chain)
chat_history = []
while True:
# Pergunta ao usuário
question = input("Digite sua pergunta: ")
# Processa a pergunta e gera a resposta da IA
ai_msg = rag_chain.invoke({"input": question, "chat_history": chat_history})
chat_history.extend([HumanMessage(content=question), AIMessage(content=ai_msg["answer"])])
# Imprime a resposta da IA
print(ai_msg["answer"] + "\n")
Sera uma assistente especializada na diciplina de AEDS-II, com conhecimento dos codigos propostos pelo professor Doutor Max do Val Machado
Seria um asistente basica para solução de problemas relacionados a modem e intenet no geral
É uma inteligencia artificial especializada para lidar com crises e auxiliar funcionarios com a tenção
Important
NENHUMAS DAS IAs CONTEM EXEMPLO DE DADOS ENTÃO ALGUMAS FUNCIONALIDADES ESTÃO RESTRITAS
Emails:
Henrique Nahim: [email protected]
Claudio Dias: [email protected]
Gabriel: [email protected]
Github:
Henrique Nahim: github.com/hsnahim
Claudio Dias: github.com/claudiogpt
Gabriel: github.com/Gab-HSP