Add rag module: Spring AI 2.0 RAG with pgvector, chunking, reranking and a faithfulness check

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01B38FGKKam5SCGgwgduVAh3
This commit is contained in:
Claude
2026-09-21 19:09:05 +00:00
commit 1d4625a1c2
62 changed files with 3715 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
#!/usr/bin/env bash
# Writes docs/output/12-api-facts.txt: the public API of every Spring AI class this repository
# relies on, read from the jars the build resolves (not from documentation).
set -euo pipefail
cd "$(dirname "$0")/.."
mkdir -p docs/output target
mvn -B -q dependency:build-classpath -Dmdep.outputFile=target/classpath.txt >/dev/null
CP="$(cat target/classpath.txt)"
OUT=docs/output/12-api-facts.txt
jar_of() { tr ':' '\n' < target/classpath.txt | grep "/$1-[0-9]" | head -1; }
jp() { echo "## $1"; javap -cp "$CP" -public "$1" | grep -v '^Compiled' | sed 's/java\.util\.//g; s/java\.lang\.//g'; echo; }
{
echo "# Spring AI API facts, read with javap from the jars this build resolves"
echo
echo "spring-ai.version: $(grep -m1 -o '<spring-ai.version>[^<]*' pom.xml | sed 's/.*>//')"
echo
echo "## classes in org/springframework/ai/rag (top level, from spring-ai-rag)"
unzip -Z1 "$(jar_of spring-ai-rag)" | grep '\.class$' | grep -v '\$' | sed 's|org/springframework/ai/rag/||; s|\.class||' | sort
echo
echo "## classes anywhere in spring-ai-rag whose name contains \"rerank\": $(unzip -Z1 "$(jar_of spring-ai-rag)" | grep -ic rerank || true)"
echo
echo "## classes in any jar on this project's classpath whose name contains \"SemanticSearchCache\" or \"SemanticCache\": $(for j in $(tr ':' '\n' < target/classpath.txt); do unzip -Z1 "$j" 2>/dev/null; done | grep -Eic 'SemanticSearchCache|SemanticCache' || true)"
echo
jp org.springframework.ai.transformer.splitter.TokenTextSplitter
jp 'org.springframework.ai.transformer.splitter.TokenTextSplitter$Builder'
jp org.springframework.ai.reader.pdf.PagePdfDocumentReader
jp 'org.springframework.ai.reader.pdf.config.PdfDocumentReaderConfig$Builder'
jp org.springframework.ai.rag.postretrieval.document.DocumentPostProcessor
jp org.springframework.ai.rag.retrieval.search.VectorStoreDocumentRetriever
jp 'org.springframework.ai.rag.retrieval.search.VectorStoreDocumentRetriever$Builder'
jp 'org.springframework.ai.rag.generation.augmentation.ContextualQueryAugmenter$Builder'
jp 'org.springframework.ai.rag.advisor.RetrievalAugmentationAdvisor$Builder'
jp 'org.springframework.ai.chat.client.advisor.vectorstore.QuestionAnswerAdvisor$Builder'
jp org.springframework.ai.chat.evaluation.FactCheckingEvaluator
jp org.springframework.ai.vectorstore.VectorStore
jp 'org.springframework.ai.vectorstore.SearchRequest$Builder'
} > "$OUT"
echo "wrote $OUT"