В уроке есть раздел, создающий цепочку:
Код: Выделить всё
self.chain = ({"context": self.retriever, "question": RunnablePassthrough()}
| self.prompt
| self.model
| StrOutputParser())
оператор канала передает выходные данные последней функции остальным. поэтому это можно переписать как:
Код: Выделить всё
query = {"context": self.retriever, "question": RunnablePassthrough()}
prompt = self.prompt(query)
response = self.model(prompt)
string_out = StrOutputParser(response)
chain(string_out)
Код: Выделить всё
self.chain.invoke(query) # query is a str
Код: Выделить всё
from langchain_community.chat_models import ChatOllama
from langchain.prompts import PromptTemplate
from langchain.schema.output_parser import StrOutputParser
# ...
class ChatPDF:
def __init__(self):
self.prompt = PromptTemplate.from_template(
"""
[INST] Vous êtes un assistant pour les tâches de réponse aux questions. Utilisez les éléments de contexte suivants pour répondre à la question.
Si vous ne connaissez pas la réponse, dites simplement que vous ne savez pas.. Utilisez trois phrases
maximum et soyez concis dans votre réponse. [/INST]
[INST] Question: {question}
Context: {context}
Answer: [/INST]
""")
self.model = ChatOllama(model="mistral")
# ...
Подводя итог, мне хотелось бы получить объяснение того, что делает этот блок кода, и я меня особенно смущает следующее:
- Как мы можем передать входные данные в self.model? self.model — это не функция, это уже созданная ChatOllama. Так что же здесь происходит?
- Что делает RunnablePassthrough()? Я прочитал документацию, и кажется, что это просто функция идентификации. Зачем нам это нужно? (https://python.langchain.com/v0.1/docs/ ... ssthrough/) Я предполагаю, что когда вы пишете self.chain.invoke(query), то RunnablePassthrough( ) == запрос
- почему все выражение заключено в круглые скобки? Я предполагаю, что это как-то связано с langchain, а также с оператором канала. Когда я возюсь и создаю переменные типа test = (print); test("привет") vs test = print; test("hi") результаты те же
Подробнее здесь: https://stackoverflow.com/questions/790 ... -langchain