Интеграция индекса Llama VectorStoreIndex с агентами Langchain для тряпичных приложенийPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Интеграция индекса Llama VectorStoreIndex с агентами Langchain для тряпичных приложений

Сообщение Anonymous »

Я читал документацию весь день и, кажется, не могу обернуть голову вокруг того, как я могу создать VectorStoreIndex с Llama_index и использовать созданные встраиваемые вставки в качестве дополнительной информации для тряпичного приложения/чат -бота, которое может общаться с пользователем. Я хочу использовать llama_index, потому что у них есть несколько классных способов выполнить более продвинутые методы поиска, такие как поиск окна предложения и поиск автоматического получения (честно говоря, я не исследовал, поддерживает ли Лэнгхейн эти типы методов поиска векторов). Я хочу использовать Langchain из -за его функциональности для разработки более сложных шаблонов быстрого быстрого подсказок (аналогично я не исследовал, поддерживает ли это Llama_index). Я знаю, как оценить их с помощью отдельного файла вопросов оценки, но я хотел бы сделать такие вещи, как сравнить скорость и человечество ответов, использование токенов и т. Д.from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

from langchain.memory import ChatMessageHistory

prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"""You are the world's greatest... \
Use this document base to help you provide the best support possible to everyone you engage with.
""",
),
MessagesPlaceholder(variable_name="messages"),
]
)

chat = ChatOpenAI(model=llm_model, temperature=0.7)

chain = prompt | chat

chat_history = ChatMessageHistory()

while True:
user_input = input("You: ")
chat_history.add_user_message(user_input)

response = chain.invoke({"messages": chat_history.messages})

if user_input.lower() == 'exit':
break

print("AI:", response)
chat_history.add_ai_message(response)

< /code>

Llama Index Index Previeval < /li>
< /ol>
from llama_index.core.node_parser import SentenceWindowNodeParser
from llama_index.core.indices.postprocessor import MetadataReplacementPostProcessor
from llama_index.core.postprocessor import LLMRerank

class SentenceWindowUtils:
def __init__(self, documents, llm, embed_model, sentence_window_size):
self.documents = documents
self.llm = llm
self.embed_model = embed_model
self.sentence_window_size = sentence_window_size
# self.save_dir = save_dir

self.node_parser = SentenceWindowNodeParser.from_defaults(
window_size=self.sentence_window_size,
window_metadata_key="window",
original_text_metadata_key="original_text",
)

self.sentence_context = ServiceContext.from_defaults(
llm=self.llm,
embed_model=self.embed_model,
node_parser=self.node_parser,
)

def build_sentence_window_index(self, save_dir):
if not os.path.exists(save_dir):
os.makedirs(save_dir)
sentence_index = VectorStoreIndex.from_documents(
self.documents, service_context=self.sentence_context
)
sentence_index.storage_context.persist(persist_dir=save_dir)
else:
sentence_index = load_index_from_storage(
StorageContext.from_defaults(persist_dir=save_dir),
service_context=self.sentence_context,
)

return sentence_index

def get_sentence_window_query_engine(self, sentence_index, similarity_top_k=6, rerank_top_n=3):
postproc = MetadataReplacementPostProcessor(target_metadata_key="window")
rerank = LLMRerank(top_n=rerank_top_n, service_context=self.sentence_context)

sentence_window_engine = sentence_index.as_query_engine(
similarity_top_k=similarity_top_k, node_postprocessors=[postproc, rerank]
)

return sentence_window_engine

sentence_window = SentenceWindowUtils(documents=documents, llm = llm, embed_model=embed_model, sentence_window_size=1)
sentence_window_1 = sentence_window.build_sentence_window_index(save_dir='./indexes/sentence_window_index_1')
sentence_window_engine_1 = sentence_window.get_sentence_window_query_engine(sentence_window_1)
< /code>
Оба блока кода независимо будут работать. Но цель состоит в том, что, когда выполняется запрос, требует поиска существующей базы документов, я могу использовать предложение_window_engine, которое было построено. Я полагаю, я мог бы получить соответствующую информацию на основе запроса, а затем передать эту информацию в последующую подсказку для чат -бота, но я хотел бы попытаться избежать включения данных документа в подсказку.>

Подробнее здесь: https://stackoverflow.com/questions/782 ... -applicati
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»