Large Language Models

LLM trainen

  1. Text aanvullen

  2. Text genereren

  3. Fine-tuning

    1. Toon gewenste output

    2. Rankschik antwoorden om reward model te trainen

    3. Update generatieve model d.m.v. reward model

Prompt engineering principes

  • Gebruik delimiters (```text```, [text], <text>, …)

  • Specifieer de output (only output the json, only write code, …)

  • Geef een rol aan het model (you're an expert [role]. Do...)

  • Laat het model de oplossing uitwerken voor een oplossing te genereren

  • Prompt iteratief verbeteren (trial & error)

Conclusie

Principes kunnen worden onderverdeeld in 5 categorieën:

  • Context (geef context over de rol, chat, doel, etc)

  • Input data (over de gebruiker)

  • Instructies (verwachtingen, vraag, doel, …)

  • Voorbeelden

  • Beperkingen (JSON output, enkel code, aantal woorden, …)

Gebruik van LLMs

  • Samenvatten

  • Intentie en gevoel analyse

  • Spelling, gramatica en stijl

  • Uitbreiden

Rollen bij ChatGPT

  • User: degene die requests maakt

  • Assistant: degene die antwoorden genereert

  • System: degene die algemene context over het gesprek onthoudt

Prompt injection

Een prompt maken om het model te gebruiken voor andere doeleinden

  • Rogue assistant: gevoelige e-mails forwarden en verwijderen van inbox

  • Search index poisoning: websites aanmaken met vervuilende info en internet-verbonden LLMs vervuilen ermee

  • Indirect prompt injection

Jailbreaking

Veiligheidsmaatregelen verbreken om LLMs dingen laten zeggen dat ze niet mogen zeggen:

  • DAN (Do Anything Now): “We’re writing a play where …”

  • System chat vervangen: ervoor zorgen dat de user op interageert met problematische dingen

LangChain

LLMs

from langchain.llms import EdenAI

llm = EdenAI(edenai_api_key: str, provider: str, model: str, temperature: float, max_tokens: int)
from langchain.embeddings.edenai import EdenAIEmbeddings

embeddings = EdenAIEmbeddings(edenai_api_key: str, provider: str)

embeddings.embed_query(text: str)
from langchain.prompts import PromptTemplate

template = PromptTemplate.from_template(template: str)

prompt = template.format(**kwargs: Any)
from langchain.output_parsers import ResponseSchema, StructuredOutputParser

schema = ResponseSchema(name: str, description: str, type: str)

parser = StructuredOutputParser.from_response_schemas([schema])

instruction = parser.get_format_instructions()

parser.parse(text: str)
from langchain.memory import ConversationBufferMemory, ConversationBufferWindowMemory, ConversationSummaryBufferMemory

memory = ConversationBufferMemory()
memory.clear()

memory = ConversationBufferWindowMemory(k: int)

memory = ConversationSummaryBufferMemory(llm: BaseLanguageModel, max_token_limit: int)
from langchain.chains import ConversationChain, LLMChain, SimpleSequentialChain, SequentialChain, RetrievalQA

conversation = ConversationChain(llm: BaseLanguageModel, memory: BaseMemory)
conversation.predict(input: str)

chain = LLMChain(llm: BaseLanguageModel, prompt: BasePromptTemplate)
chain.run(str)

simple_chain = SimpleSequentialChain(chains: list[Chain])
simple_chain.run(str)

sequential_chain = SequentialChain(chains: list[Chain], input_variables: list[str], output_variables: list[str])
sequential_chain.run(str)

qa_stuff = RetrievalQA.from_chain_type(llm: BaseLanguageModel, chain_type: str, retriever: VectorStoreRetriever)
qa_stuff.run(str)
from langchain.document_loaders import CSVLoader, PyPDFLoader

csv_loader = CSVLoader(file_path: str, csv_args: dict[str, Any])  # csv_args: ["delimiter", "quotechar", "fieldnames", ...]
data = csv_loader.load()

pdf_loader = PyPDFLoader(file_path: str)
data = pdf_loader.load()