Usamos cookies para mejorar tu experiencia en el sitio
CodeWorlds

Chatboty - konwersacyjne AI

Budujemy chatbota Safari! 🦁💬

Prosty chatbot

1from langchain_openai import ChatOpenAI
2from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
3from langchain_community.chat_message_histories import ChatMessageHistory
4from langchain_core.runnables.history import RunnableWithMessageHistory
5
6# Model
7llm = ChatOpenAI(model="gpt-5", temperature=0.7)
8
9# System prompt
10system = """Jesteś Darwin - przyjaznym przewodnikiem Safari.
11Odpowiadasz entuzjastycznie, dzielisz się ciekawostkami o zwierzętach.
12Zawsze dbasz o bezpieczeństwo turystów."""
13
14prompt = ChatPromptTemplate.from_messages([
15    ("system", system),
16    MessagesPlaceholder(variable_name="history"),
17    ("human", "{input}")
18])
19
20chain = prompt | llm
21
22# Pamięć
23store = {}
24
25def get_session_history(session_id: str):
26    if session_id not in store:
27        store[session_id] = ChatMessageHistory()
28    return store[session_id]
29
30# Chatbot z pamięcią
31chatbot = RunnableWithMessageHistory(
32    chain,
33    get_session_history,
34    input_messages_key="input",
35    history_messages_key="history"
36)
37
38# Rozmowa
39config = {"configurable": {"session_id": "user_123"}}
40
41response = chatbot.invoke({"input": "Cześć! Jestem na Safari!"}, config=config)
42print(f"Darwin: {response.content}")
43
44response = chatbot.invoke({"input": "Jakie zwierzęta tu żyją?"}, config=config)
45print(f"Darwin: {response.content}")

Chatbot CLI

1def run_chatbot():
2    print("🦁 Safari Chatbot - wpisz 'quit' aby zakończyć")
3    print("-" * 50)
4
5    session_id = "cli_session"
6    config = {"configurable": {"session_id": session_id}}
7
8    while True:
9        user_input = input("\nTy: ").strip()
10
11        if user_input.lower() in ['quit', 'exit', 'q']:
12            print("\n👋 Do zobaczenia na Safari!")
13            break
14
15        if not user_input:
16            continue
17
18        response = chatbot.invoke({"input": user_input}, config=config)
19        print(f"\nDarwin: {response.content}")
20
21if __name__ == "__main__":
22    run_chatbot()

Chatbot z kontekstem dokumentów

1from langchain_community.document_loaders import TextLoader
2from langchain.text_splitter import RecursiveCharacterTextSplitter
3from langchain_openai import OpenAIEmbeddings
4from langchain_community.vectorstores import FAISS
5from langchain.chains import RetrievalQA
6
7# Załaduj dokumenty o Safari
8loader = TextLoader("safari_guide.txt")
9documents = loader.load()
10
11# Podziel na chunki
12splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
13chunks = splitter.split_documents(documents)
14
15# Stwórz vector store
16embeddings = OpenAIEmbeddings()
17vectorstore = FAISS.from_documents(chunks, embeddings)
18
19# RAG chain
20qa_chain = RetrievalQA.from_chain_type(
21    llm=llm,
22    chain_type="stuff",
23    retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
24)
25
26# Pytanie
27result = qa_chain.invoke({"query": "Jak bezpiecznie obserwować lwy?"})
28print(result["result"])

Chatbot FastAPI

1from fastapi import FastAPI, HTTPException
2from pydantic import BaseModel
3import uvicorn
4
5app = FastAPI()
6
7class ChatRequest(BaseModel):
8    message: str
9    session_id: str
10
11class ChatResponse(BaseModel):
12    response: str
13
14@app.post("/chat", response_model=ChatResponse)
15async def chat(request: ChatRequest):
16    config = {"configurable": {"session_id": request.session_id}}
17
18    try:
19        response = chatbot.invoke(
20            {"input": request.message},
21            config=config
22        )
23        return ChatResponse(response=response.content)
24    except Exception as e:
25        raise HTTPException(status_code=500, detail=str(e))
26
27if __name__ == "__main__":
28    uvicorn.run(app, host="0.0.0.0", port=8000)
Ir a CodeWorlds