# Plik: test_connect_chaint.py import sys import warnings from langchain_openai import ChatOpenAI from langchain_community.vectorstores import Chroma from langchain_huggingface import HuggingFaceEmbeddings from langchain.chains import RetrievalQA from langchain.prompts import PromptTemplate warnings.filterwarnings("ignore") # 1. Załaduj bazę (Tę, którą zbudował EpubToRag) embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") vectorstore = Chroma(persist_directory="/home/pali112/db_build123d_reference", embedding_function=embeddings) # 2. Połącz się z serwerem Llama (Qwen) llm = ChatOpenAI( base_url="http://localhost:8081/v1", api_key="brak", model="local-model", temperature=0 ) # 3. System Prompt template = """Jesteś ekspertem od biblioteki build123d. Użyj poniższych fragmentów dokumentacji, aby odpowiedzieć na pytanie. Jeśli nie znasz odpowiedzi, napisz, że nie wiesz. WZORZEC KODU (Naśladuj ten styl): -------------------------------------------------- from build123d import * # 1. Definicja parametrów length, width = 100, 50 # 2. Geometria w bloku 'with' (Builder Mode) with BuildPart() as my_part: Box(length, width, 10) # Wycinanie otworu (Mode.SUBTRACT) with Locations(Location((0, 0, 0))): Cylinder(radius=5, height=10, mode=Mode.SUBTRACT) # 3. Poprawny eksport export_stl(my_part.part, "wynik.stl") Dokumentacja: {context} Pytanie: {question} Odpowiedź eksperta:""" PROMPT = PromptTemplate(template=template, input_variables=["context", "question"]) # 4. Konfiguracja RAG (To jest 'qa_chain', którego szuka most_ai.py) qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=vectorstore.as_retriever(search_kwargs={"k": 5}), return_source_documents=True, chain_type_kwargs={"prompt": PROMPT} ) # Zabezpieczenie przed przypadkowym uruchomieniem if __name__ == "__main__": if len(sys.argv) > 1: print(qa_chain.invoke(" ".join(sys.argv[1:]))["result"]) else: print("To jest moduł backendu. Uruchom most_ai.py")