Mari kita buat sistem RAG yang akan digunakan untuk pengujian.
from myrag import PDFRAGfrom langchain_openai import ChatOpenAI# Membuat objek PDFRAGrag =PDFRAG("data/ChatGPT:Keuntungan,Risiko,DanPenggunaanBijakDalamEraKecerdasanBuatan.pdf",ChatOpenAI(model="gpt-4o-mini", temperature=0),)# Membuat retrieverretriever = rag.create_retriever()# Membuat chainchain = rag.create_chain(retriever)# Menghasilkan jawaban untuk pertanyaanchain.invoke("Apa risiko utama dalam penggunaan ChatGPT?")
Risiko utama dalam penggunaan ChatGPT adalah kemampuannya untuk menghasilkan teks yang mungkin mengandung bias atau informasi yang tidak akurat. Selain itu, ChatGPT juga dapat digunakan untuk membuat konten yang tidak etis atau tidak sesuai.
Buat sebuah fungsi bernama ask_question. Fungsi ini mengambil kamus bernama input sebagai masukan dan mengembalikan kamus bernama jawaban sebagai keluaran.
# Membuat fungsi untuk menjawab pertanyaandefask_question(inputs:dict):return{"answer": chain.invoke(inputs["question"])}
Menanamkan evaluator berbasis jarak jauh
from langsmith.evaluation import LangChainStringEvaluatorfrom langchain_huggingface.embeddings import HuggingFaceEmbeddingsfrom langchain_upstage import UpstageEmbeddingsfrom langchain_openai import OpenAIEmbeddingsimport os# Pengaturan paralelisme tokenizer (menggunakan model HuggingFace)os.environ["TOKENIZERS_PARALLELISM"]="true"model_name ="BAAI/bge-m3"hf_embeddings =HuggingFaceEmbeddings( model_name=model_name, model_kwargs={"device": "cpu"}, # cuda, cpu# encode_kwargs={"normalize_embeddings": True},)# Membuat evaluator model embeddinghf_embedding_evaluator =LangChainStringEvaluator("embedding_distance", config={# OpenAIEmbeddings diatur sebagai nilai default, tetapi dapat diubah"embeddings": hf_embeddings,"distance_metric": "cosine", # "cosine", "euclidean", "chebyshev", "hamming", dan "manhattan" },)openai_embedding_evaluator =LangChainStringEvaluator("embedding_distance", config={# OpenAIEmbeddings diatur sebagai nilai default, tetapi dapat diubah"embeddings": OpenAIEmbeddings(model="text-embedding-3-small"),"distance_metric": "euclidean", # "cosine", "euclidean", "chebyshev", "hamming", dan "manhattan" },)
Jika beberapa model penyematan digunakan untuk sebuah metrik, hasilnya dihitung sebagai nilai rata-rata.
(Contoh) - cosinus: BGE-m3 - euclidean: OpenAI
Untuk euclidean, nilai rata-rata setiap model dihitung.