avatarLaxfed Paulacy

Free AI web copilot to create summaries, insights and extended knowledge, download it at here

2337

Abstract

ession <span class="hljs-keyword">import</span> CompressChatHistory

<span class="hljs-comment"># Compress chat history into a final question for retrieval</span> compressor = CompressChatHistory() final_question = compressor.compress_history(chat_history)</pre></div><h2 id="9be0">Routing</h2><div id="5ba7"><pre><span class="hljs-keyword">from</span> langchain.routing <span class="hljs-keyword">import</span> DynamicQueryRouting

<span class="hljs-comment"># Dynamic query routing</span> router = DynamicQueryRouting() route = router.route_query(query)</pre></div><h2 id="539b">Query Construction</h2><h2 id="6ce8">Text-to-SQL</h2><div id="f2e2"><pre><span class="hljs-keyword">from</span> langchain.query_construction <span class="hljs-keyword">import</span> TextToSQL

Translate <span class="hljs-keyword">natural</span> <span class="hljs-keyword">language</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">SQL</span> requests

text_to_sql = TextToSQL() sql_query = text_to_sql.convert_to_sql(natural_language_question, table_info)</pre></div><h2 id="d8f7">Text-to-Cypher</h2><div id="d584"><pre><span class="hljs-keyword">from</span> langchain.query_construction <span class="hljs-keyword">import</span> TextToCypher

Translate <span class="hljs-keyword">natural</span> <span class="hljs-keyword">language</span> <span class="hljs-keyword">into</span> Cypher queries

text_to_cypher = TextToCypher() cypher_query = text_to_cypher.convert_to_cypher(natural_language_question)</pre></div><h2 id="3da1">Text-to-metadata filters</h2><div id="2dab"><pre><span class="hljs-keyword">from</span> langchain.query_construction <span class="hljs-keyword">import</span> MetadataFiltering

Translate <span class="hljs-keyword">natural</span> <span class="hljs-keyword">language</span> <span class="hljs-keyword">into</span> structured queries <span class="hljs-keyword">with</span> metadata filters

metadata_filter = MetadataFiltering() structured_query = metadata_filter.construct_query(natural_language_question, metadata_fields)</pre></div><h2 id="f1ee">Indexing</h2><h2 id="8a30">Chunk size</h2><div id="f0ec"><pre><span class="hljs-keyword">from</span> langchain.indexing <span class="hljs-keyword">import</span> ChunkSizeTuning

<span class="hljs-comment"># Experiment with chunk sizes for document embedding</s

Options

pan> chunk_tuner = ChunkSizeTuning() performance_boost = chunk_tuner.test_chunk_sizes(document, chunk_sizes)</pre></div><h2 id="3ff0">Document embedding strategy</h2><div id="92b3"><pre>from langchain.indexing import DocumentEmbedding

<span class="hljs-comment"># Decouple document embedding for retrieval and answer synthesis</span> embedding = DocumentEmbedding() retrieval_embedding = embedding.embed_for_retrieval(document) synthesis_embedding = embedding.embed_for_synthesis(document)</pre></div><h2 id="2bd9">Post-Processing</h2><h2 id="de67">Re-ranking</h2><div id="a45e"><pre><span class="hljs-keyword">from</span> langchain.postprocessing <span class="hljs-keyword">import</span> ReRanking

<span class="hljs-comment"># Re-rank retrieved documents to reduce redundancy</span> reranker = ReRanking() reranked_documents = reranker.rerank_documents(retrieved_documents)</pre></div><h2 id="14ce">Classification</h2><div id="0232"><pre><span class="hljs-keyword">from</span> langchain.postprocessing <span class="hljs-keyword">import</span> DocumentClassification

<span class="hljs-comment"># Classify retrieved documents for logical routing</span> classifier = DocumentClassification() classified_documents = classifier.classify_documents(retrieved_documents)</pre></div><div id="ccfa" class="link-block"> <a href="https://readmedium.com/langchain-can-openais-bet-on-cognitive-architecture-succeed-18eacce11b19"> <div> <div> <h2>LANGCHAIN — Can OpenAIs Bet on Cognitive Architecture Succeed?</h2> <div><h3>Software is like entropy: It is difficult to grasp, weighs nothing, and obeys the Second Law of Thermodynamics; i.e…</h3></div> <div><p>medium.com</p></div> </div> <div> <div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/1*nu7ZXSdSXeo6aCLEJYoZpg.jpeg)"></div> </div> </div> </a> </div><p id="2538">This deconstruction of RAG provides a comprehensive understanding of the key components involved in harnessing retrieval augmented generation in LLM applications. By breaking down the concepts and providing code examples, developers can gain valuable insights into implementing RAG in their own projects.</p></article></body>

LANGCHAIN — Deconstructing RAG

Software is a great combination between artistry and engineering. — Bill Gates

RAG, or retrieval augmented generation, is a crucial concept in large language model (LLM) app development. It involves loading retrieved information into the context window of an LLM for output generation. This article deconstructs RAG into several key themes and provides examples of code snippets for each theme.

Query Transformations

Query expansion

from langchain.retrievers import MultiQueryRetriever

# Perform sub-question generation
multi_query_retriever = MultiQueryRetriever()
sub_questions = multi_query_retriever.generate_sub_questions("Who won a championship more recently, the Red Sox or the Patriots?")

Query re-writing

from langchain.rewriters import RewriteRetrieveRead

# Rewrite user questions
rewriter = RewriteRetrieveRead()
rewritten_question = rewriter.rewrite_question("Poorly framed user question")

Query compression

from langchain.compression import CompressChatHistory

# Compress chat history into a final question for retrieval
compressor = CompressChatHistory()
final_question = compressor.compress_history(chat_history)

Routing

from langchain.routing import DynamicQueryRouting

# Dynamic query routing
router = DynamicQueryRouting()
route = router.route_query(query)

Query Construction

Text-to-SQL

from langchain.query_construction import TextToSQL

# Translate natural language into SQL requests
text_to_sql = TextToSQL()
sql_query = text_to_sql.convert_to_sql(natural_language_question, table_info)

Text-to-Cypher

from langchain.query_construction import TextToCypher

# Translate natural language into Cypher queries
text_to_cypher = TextToCypher()
cypher_query = text_to_cypher.convert_to_cypher(natural_language_question)

Text-to-metadata filters

from langchain.query_construction import MetadataFiltering

# Translate natural language into structured queries with metadata filters
metadata_filter = MetadataFiltering()
structured_query = metadata_filter.construct_query(natural_language_question, metadata_fields)

Indexing

Chunk size

from langchain.indexing import ChunkSizeTuning

# Experiment with chunk sizes for document embedding
chunk_tuner = ChunkSizeTuning()
performance_boost = chunk_tuner.test_chunk_sizes(document, chunk_sizes)

Document embedding strategy

from langchain.indexing import DocumentEmbedding

# Decouple document embedding for retrieval and answer synthesis
embedding = DocumentEmbedding()
retrieval_embedding = embedding.embed_for_retrieval(document)
synthesis_embedding = embedding.embed_for_synthesis(document)

Post-Processing

Re-ranking

from langchain.postprocessing import ReRanking

# Re-rank retrieved documents to reduce redundancy
reranker = ReRanking()
reranked_documents = reranker.rerank_documents(retrieved_documents)

Classification

from langchain.postprocessing import DocumentClassification

# Classify retrieved documents for logical routing
classifier = DocumentClassification()
classified_documents = classifier.classify_documents(retrieved_documents)

This deconstruction of RAG provides a comprehensive understanding of the key components involved in harnessing retrieval augmented generation in LLM applications. By breaking down the concepts and providing code examples, developers can gain valuable insights into implementing RAG in their own projects.

Langchain
Deconstructing
ChatGPT
Recommended from ReadMedium