langchain-compressa
Этот пакет содержит интеграцию LangChain и Compressa.
Установка
pip install langchain-compressa
И вам следует настроить учетные данные, установив следующую переменную окружения:
COMPRESSA_API_KEY
Embeddings
CompressaEmbeddings класс предоставляет embeddings из Compressa.
from langchain_compressa import CompressaEmbeddings
embeddings = CompressaEmbeddings()
embeddings.embed_query("В чем смысл жизни?")
Chat model
ChatCompressa класс предоставляет чат модели из Compressa.
from langchain_openai import ChatCompressa
llm = ChatCompressa(
temperature=0,
# api_key="...", # если вы предпочитаете передавать ключ непосредственно в конструктор вместо использования переменных окружения
)
messages = [
(
"system",
"Ты полезный помощник, который переводит с русского на болгарский. Переведи предложение пользователя.",
),
("human", "Я люблю программирование."),
]
ai_msg = llm.invoke(messages)
print(ai_msg)
print(ai_msg.content)
CompressaRerank
CompressaRerank класс предоставляет реранк модели из Compressa.
from langchain_core.documents import Document
from langchain_compressa.reranks import CompressaRerank
documents = [
Document(
page_content="""Карсон-Сити — столица американского штата Невада.
По данным переписи населения США 2010 года, население Карсон-Сити составляло 55 274 человека.""",
metadata={"source": "https://пример.ru/1"}
),
Document(
page_content="""Содружество Северных Марианских островов — группа островов в Тихом океане,
которые являются политическим разделением, контролируемым Соединенными Штатами.
Столица — Сайпан.""",
metadata={"source": "https://пример.ru/2"}
),
Document(
page_content="""Шарлотта-Амалия — столица и крупнейший город Виргинских островов США.
В нем проживает около 20 000 человек. Город находится на острове Сент-Томас.""",
metadata={"source": "https://пример.ru/3"}
),
Document(
page_content="""Вашингтон, округ Колумбия (также известный как просто Вашингтон или
округ Колумбия, и официально как округ Колумбия) — столица Соединенных Штатов.
Это федеральный округ. На территории находятся резиденция президента США и многие
крупные государственные правительственные учреждения. Это делает его политическим центром
Соединенных Штатов Америки.""",
metadata={"source": "https://пример.ru/4"}
),
Document(
page_content="""Смертная казнь существовала в Соединенных Штатах еще до того,
как Соединенные Штаты стали страной. По состоянию на 2017 год смертная казнь разрешена
в 30 из 50 штатов. Федеральное правительство (включая вооруженные силы США) также
применяет смертную казнь.""",
metadata={"source": "https://пример.ru/5"}
)
]
query = "Какая столица у Соединенных Штатов Америки?"
reranker = CompressaRerank()
compress_res = reranker.compress_documents(query=query, documents=documents)
Пример RAG
import os
from langchain_compressa import CompressaEmbeddings, ChatCompressa, CompressaRerank
from langchain_core.documents import Document
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain
from langchain.retrievers.contextual_compression import ContextualCompressionRetriever
from langchain_core.prompts import ChatPromptTemplate
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_chroma import Chroma
COMPRESSA_API_KEY = os.getenv('COMPRESSA_API_KEY')
compressa_embedding = CompressaEmbeddings(api_key=COMPRESSA_API_KEY)
llm = ChatCompressa(api_key=COMPRESSA_API_KEY)
loader = WebBaseLoader("https://ru.wikipedia.org/wiki/Архитектура_фон_Неймана")
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500, chunk_overlap=100, add_start_index=True
)
all_splits = text_splitter.split_documents(docs)
vectorstore = Chroma.from_documents(documents=all_splits, embedding=compressa_embedding)
retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 5})
compressor = CompressaRerank(api_key=COMPRESSA_API_KEY)
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor, base_retriever=retriever
)
system_template = f"""Ты помощник по вопросам-ответам. Используй следующую контекстную информацию,
чтобы ответить на вопрос. Если в контексте нет ответа, ответь 'Не знаю ответа на вопрос'.
Используй максимум три предложения и будь точным но кратким."""
qa_prompt = ChatPromptTemplate.from_messages([
("system", system_template),
("human", """Контекстная информация:
{context}
Вопрос: {input}
"""),
])
question_answer_chain = create_stuff_documents_chain(llm, qa_prompt)
rag_chain = create_retrieval_chain(compression_retriever, question_answer_chain)
answ = rag_chain.invoke({"input": "Какое узкое место у архитектуры фон Неймана?"})
print(answ["answer"])
Metadata
Release files for langchain-compressa 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| langchain_compressa-0.1.4.tar.gz | 10.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| langchain_compressa-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.6 kB
Release files / langchain_compressa-0.1.4.tar.gz
| Download URL | langchain_compressa-0.1.4.tar.gz |
|---|---|
| Size | 10.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1aa8e99d3c6c5d92ce23b56507df5f7a7cbcceb3cbede1c0a51ed12f7f6d32c2
|
|
BLAKE2b-256 checksum How to use checksums |
23a47fcacce50409208c1224db29c18c3a3a89dfb28ae371c47fc1efed1e6cca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.10.12
|
Release files / langchain_compressa-0.1.4-py3-none-any.whl
| Download URL | langchain_compressa-0.1.4-py3-none-any.whl |
|---|---|
| Size | 10.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b7498a03de656f03d490a97d4c9229292a0ce9d47ced9f36756de7b111afe176
|
|
BLAKE2b-256 checksum How to use checksums |
9937f9204173674d1dfd2d2225d394115750685222c5477eee5f9a214fd0324c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.10.12
|