반응형
AWS 로그인 후, Aurora and RDS 메뉴 선택
데이터 베이스 > 데이터베이스 생성
아래를 참조해서 생성합니다!
표준생성
Aurora ( PostgreSQL Compatible )
템플릿 > 개발/테스트
dbcluster 식별자 -> 적당한 이름 ex) pgvector
자격증명관리 > 자체관리
암호 입력
용량범위 적당히 입력 ( 1, 4 충분 )
VPC 보안그룹 새로 생성
이름 입력 ex ) pgvector-sg
Enhanced 모니터링 활성화 <- 꺼야지 생성이 저는 되네요.. ( 무료티어의 한계인가.. )
데이터 베이스 생성! 버튼을 누르면 조금 후에 완료가 됩니다.
완료 이후, 다시 조회를 해서 엔드포인트를 메모해 둡니다.
이제 파이썬 필요 패키지를 설치하고,
pip install langchain-aws langchain langchain-community bs4
아래 소스로 테스트 합니다.
테스트 전에 AI 모델 을 사용허가 받아야 합니다.
소스내에서는 sonnet3.5, 와 titan-embed 모델을 사용합니다.
from langchain_aws import ChatBedrockConverse
from langchain_aws import BedrockEmbeddings
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import PGVector
llm = ChatBedrockConverse(model="anthropic.claude-3-5-sonnet-20240620-v1:0")
embeddings = BedrockEmbeddings(model_id="amazon.titan-embed-text-v2:0")
loader = WebBaseLoader("https://docs.aws.amazon.com/ko_kr/bedrock/latest/userguide/titan-embedding-models.html")
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
connection = "postgresql+psycopg2://{db사용자}:{db암호}@{db엔드포인트}:{db포트}/{db명}"
collection_name = "aws_vector"
vectordb = PGVector.from_documents (
documents=splits,
embedding=embeddings,
connection_string=connection,
collection_name=collection_name,
use_jsonb=True,
)
prompt_template = """
마지막에 질문에 대한 간결한 답변을 제공하기 위해 다음 문맥을 활용하세요.
답을 모른다면 답을 지어내려고 하지 말고 모른다고 하세요.
<context>
{context}
</context>
Question: {question}
"""
prompt = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{
"context": vectordb.as_retriever() | format_docs,
"question": RunnablePassthrough(),
}
| prompt
| llm
| StrOutputParser()
)
answer=rag_chain.invoke("Titan Embedding V2는 몇차원인가요?")
print(answer)
결과:
Titan Embedding V2의 출력 벡터 크기는 기본값으로 1,024 차원입니다. 그러나 512와 256 차원 옵션도 제공됩니다.
참고의 웹페이지를 rag정보로 만들고, 이를 잘 조회해서 답변을 잘합니다.
RAG를 쓰지 않은 예제
from langchain_aws import ChatBedrockConverse
llm = ChatBedrockConverse(model="anthropic.claude-3-5-sonnet-20240620-v1:0")
response = llm.invoke("Titan Embedding V2는 몇 차원인가요?")
print(response.content)
결과:
Titan Embedding V2는 3072차원입니다.
거짓말을 합니다 -ㅅ-;
반응형