from langchain.prompts import PromptTemplate
from langchain.schema.output_parser import StrOutputParser
from langchain.callbacks.tracers import ConsoleCallbackHandler
template = """<s>[INST] <<SYS>> Provide a correct and short answer to the question. <</SYS>> {question} [/INST]"""
prompt = PromptTemplate(template=template, input_variables=["question"])
chain = prompt | llm | StrOutputParser()
chain.invoke({"question":"What is the distance to the Moon?"}, config={# "callbacks": [ConsoleCallbackHandler()]})
template2 = """<s>[INST] <<SYS>> Use the summary {summary} and give 2 one sentence examples of practical applications of the subject [/INST] <</SYS>> [/INST] """
prompt2 = PromptTemplate(
input_variables=["summary"],
template=template2,
)
chain2 = {"summary": prompt | llm | StrOutputParser()}| prompt2 | llm | StrOutputParser()
chain2.invoke({"question":"What is the distance to the Moon?"}, config={# "callbacks": [ConsoleCallbackHandler()]})
如果我们启用 ConsoleCallbackHandler,我们将看到在这个例子中,语言模型被调用了 两次。LangChain 库为我们做了所有需要的工作,并在'幕后'进行所有 LLM 调用。这类事情需要我们牢记在心,尤其是如果我们使用付费 API 而不是免费的本地模型(如果我们没有意识到这一点,账单上的 2 倍增加可能会是一个糟糕的惊喜)。
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.utils.math import cosine_similarity
from langchain.schema.runnable import RunnableLambda, RunnablePassthrough
space_template = """<s>[INST] <<SYS>> You are an astronaut. You are great at answering questions about space. Provide a short answer to the question, understandable to a small kid. <</SYS>> {query} [/INST]"""
math_template = """<s>[INST] <<SYS>> You are a mathematician. You are great at answering math questions. Provide a short answer to the question. <</SYS>> {query} [/INST]"""
embeddings = HuggingFaceEmbeddings()
prompt_templates = [space_template, math_template]
prompt_embeddings = embeddings.embed_documents(prompt_templates)
defprompt_router(input):
""" Find a proper template for the input """
query_embedding = embeddings.embed_query(input["query"])
similarity = cosine_similarity([query_embedding], prompt_embeddings)[0]
most_similar = prompt_templates[similarity.argmax()]
print("Using MATH"if most_similar == math_template else"Using SPACE")
return PromptTemplate.from_template(most_similar)
chain = ({"query": RunnablePassthrough()}| RunnableLambda(prompt_router)| llm | StrOutputParser())
from langchain.chains import LLMChain
from langchain.prompts.chat import(
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
from langchain.schema import AIMessage, HumanMessage
from langchain_experimental.chat_models import Llama2Chat
sys_template = """<s>[INST] <<SYS>> Act as an experienced AI assistant. Write only one sentence answers. <</SYS>> [/INST] """
chat_prompt = ChatPromptTemplate.from_messages([
SystemMessagePromptTemplate.from_template(sys_template),
HumanMessage(content="Hello, how are you doing?"),
AIMessage(content="I'm doing well, thanks!"),
HumanMessage(content="May I ask you a question about Moon?"),
AIMessage(content="Yes, sure."),
HumanMessagePromptTemplate.from_template("{question}"),
])
model = Llama2Chat(llm=llm)
chain = chat_prompt | model | StrOutputParser()
chain.invoke({"question":"How big is it?"}, config={# "callbacks": [ConsoleCallbackHandler()]})
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory, ConversationSummaryMemory, CombinedMemory, ChatMessageHistory
conv_memory = ConversationBufferMemory(memory_key="chat_history_lines", input_key="input")
summary_memory = ConversationSummaryMemory(llm=llm, input_key="input")
memory = CombinedMemory(memories=[conv_memory, summary_memory])
template = """<s>[INST] <<SYS>> Act as an experienced AI assistant. Write one-sentence answers only. <</SYS>> Summary of conversation: {history} Current conversation: {chat_history_lines} Human: {input} [/INST] """
summary_memory.save_context({"input":"Hi, how are you"},{"output":"Thanks, I am fine"})
summary_memory.save_context({"input":"May I ask you questions about Moon?"},{"output":"Yes, sure"})
summary_memory.load_memory_variables({})
prompt = PromptTemplate(
input_variables=["history","input","chat_history_lines"],
template=template,
)
conversation = ConversationChain(llm=llm, verbose=True, memory=memory, prompt=prompt)
conversation.run("How far is it?")
conversation.run("And what about Mars?")
from langchain_experimental.agents.agent_toolkits import create_python_agent
from langchain.agents.agent_types import AgentType
agent = create_python_agent(llm=llm, tool=tool, verbose=True, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION)
agent.agent.llm_chain.verbose = True
agent.run("What is a square root of 5?")