Skip to main content
🎯 Goal
By the end of this phase, your system will:
- understand meaning (not just keywords)
- retrieve the right strategies even if wording differs
- rank relevance intelligently
- dramatically improve analysis quality
- still run locally on your Mac
🧠 WHAT CHANGED FROM 3.1 → 3.2
❌ Before (Phase 3.1)
- “momentum” only finds files containing the word momentum
- weak matching
- misses important context
✅ Now (Phase 3.2)
- understands similarity in meaning
- finds relevant strategies even if wording differs
- behaves like a real research assistant
🧱 CORE UPGRADE: EMBEDDINGS
We introduce:
text → vector → similarity search → best matches
⚙️ STEP 1 — INSTALL EMBEDDING TOOLING
Run:
pip3 install sentence-transformers faiss-cpu numpy
🧠 WHAT THIS DOES
| Tool | Purpose |
|---|---|
| sentence-transformers | converts text into “meaning vectors” |
| faiss | fast similarity search |
| numpy | math support |
📁 STEP 2 — CREATE NEW FILE
rag_semantic.py
🧠 STEP 3 — FULL WORKING SEMANTIC RAG SYSTEM
Paste this:
import os
import numpy as np
import faiss
from sentence_transformers import SentenceTransformer
import requests
# -------- CONFIG --------
DATA_FOLDER = "AI_TRADING_SYSTEM"
MODEL_NAME = "all-MiniLM-L6-v2" # lightweight but strong
LLM_MODEL = "qwen:14b"
OLLAMA_URL = "http://localhost:11434/api/generate"
# -------- LOAD EMBEDDING MODEL --------
embedder = SentenceTransformer(MODEL_NAME)
documents = []
file_paths = []
# -------- LOAD FILES --------
for root, dirs, files in os.walk(DATA_FOLDER):
for file in files:
if file.endswith(".md") or file.endswith(".txt"):
path = os.path.join(root, file)
try:
with open(path, "r", encoding="utf-8") as f:
text = f.read()
documents.append(text[:2000])
file_paths.append(path)
except:
pass
print(f"Loaded {len(documents)} documents")
# -------- CREATE EMBEDDINGS --------
print("Creating embeddings...")
embeddings = embedder.encode(documents)
dimension = embeddings.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(np.array(embeddings))
# -------- SEARCH FUNCTION --------
def search(query, k=3):
query_vec = embedder.encode([query])
distances, indices = index.search(np.array(query_vec), k)
results = []
for i in indices[0]:
results.append(documents[i])
return results
# -------- CALL OLLAMA --------
def ask_llm(context, question):
prompt = f"""
You are a professional trading analyst.
Use the context to analyze the question.
CONTEXT:
{context}
QUESTION:
{question}
Return:
1. Summary
2. Strategy comparison
3. Risk analysis
4. Recommendation
"""
response = requests.post(OLLAMA_URL, json={
"model": LLM_MODEL,
"prompt": prompt,
"stream": False
})
return response.json()["response"]
# -------- MAIN --------
def main():
while True:
question = input("\nAsk trading question: ")
print("\n🔎 Semantic search running...")
docs = search(question)
context = "\n\n---\n\n".join(docs)
print("\n🧠 Analyzing...\n")
result = ask_llm(context, question)
print("\n📊 RESULT:\n")
print(result)
if __name__ == "__main__":
main()
🚀 STEP 4 — RUN IT
python3 rag_semantic.py
🧠 WHAT YOU NOW HAVE
You now upgraded from:
Phase 3.1:
- keyword search ❌
Phase 3.2:
- semantic understanding ✅
- intelligent retrieval ✅
- real AI research behavior ✅
🔥 WHY THIS IS A BIG MOMENT
This is the point where your system starts behaving like:
a real quantitative research assistant
not a chatbot.
🧠 WHAT IT CAN NOW DO
You can ask:
- “Which strategies fail in sideways markets?”
- “What performs best during volatility spikes?”
- “Compare all momentum variants in my dataset”
- “What hidden risks exist in my best strategy?”
And it will:
- find meaning-based matches
- not just keyword matches
- produce structured analysis
⚖️ LIMITATIONS (important)
This version still:
- loads everything into memory (ok for now)
- no dashboard yet
- no streaming UI
- no multi-user architecture
👉 That comes later
🏁 PHASE 3.2 SUCCESS CRITERIA
You are done when:
✔ system loads your files
✔ embeddings are created
✔ semantic search returns better results than keyword search
✔ AI gives meaningful strategy comparisons
💡 ONE-LINE TAKEAWAY
Phase 3.2 is where your AI stops “searching words” and starts “understanding ideas.”
