2023-10-26 01:47:42 +00:00
from langchain . chat_models import ChatOpenAI
from langchain . prompts import ChatPromptTemplate , FewShotChatMessagePromptTemplate
from langchain . utilities import DuckDuckGoSearchAPIWrapper
docs[patch], templates[patch]: Import from core (#14575)
Update imports to use core for the low-hanging fruit changes. Ran
following
```bash
git grep -l 'langchain.schema.runnable' {docs,templates,cookbook} | xargs sed -i '' 's/langchain\.schema\.runnable/langchain_core.runnables/g'
git grep -l 'langchain.schema.output_parser' {docs,templates,cookbook} | xargs sed -i '' 's/langchain\.schema\.output_parser/langchain_core.output_parsers/g'
git grep -l 'langchain.schema.messages' {docs,templates,cookbook} | xargs sed -i '' 's/langchain\.schema\.messages/langchain_core.messages/g'
git grep -l 'langchain.schema.chat_histry' {docs,templates,cookbook} | xargs sed -i '' 's/langchain\.schema\.chat_history/langchain_core.chat_history/g'
git grep -l 'langchain.schema.prompt_template' {docs,templates,cookbook} | xargs sed -i '' 's/langchain\.schema\.prompt_template/langchain_core.prompts/g'
git grep -l 'from langchain.pydantic_v1' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.pydantic_v1/from langchain_core.pydantic_v1/g'
git grep -l 'from langchain.tools.base' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.tools\.base/from langchain_core.tools/g'
git grep -l 'from langchain.chat_models.base' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.chat_models.base/from langchain_core.language_models.chat_models/g'
git grep -l 'from langchain.llms.base' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.llms\.base\ /from langchain_core.language_models.llms\ /g'
git grep -l 'from langchain.embeddings.base' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.embeddings\.base/from langchain_core.embeddings/g'
git grep -l 'from langchain.vectorstores.base' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.vectorstores\.base/from langchain_core.vectorstores/g'
git grep -l 'from langchain.agents.tools' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.agents\.tools/from langchain_core.tools/g'
git grep -l 'from langchain.schema.output' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.schema\.output\ /from langchain_core.outputs\ /g'
git grep -l 'from langchain.schema.embeddings' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.schema\.embeddings/from langchain_core.embeddings/g'
git grep -l 'from langchain.schema.document' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.schema\.document/from langchain_core.documents/g'
git grep -l 'from langchain.schema.agent' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.schema\.agent/from langchain_core.agents/g'
git grep -l 'from langchain.schema.prompt ' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.schema\.prompt\ /from langchain_core.prompt_values /g'
git grep -l 'from langchain.schema.language_model' {docs,templates,cookbook} | xargs sed -i '' 's/from langchain\.schema\.language_model/from langchain_core.language_models/g'
```
2023-12-12 00:49:10 +00:00
from langchain_core . output_parsers import StrOutputParser
from langchain_core . runnables import RunnableLambda
2023-10-26 01:47:42 +00:00
search = DuckDuckGoSearchAPIWrapper ( max_results = 4 )
2023-10-27 02:44:30 +00:00
2023-10-26 01:47:42 +00:00
def retriever ( query ) :
return search . run ( query )
# Few Shot Examples
examples = [
{
" input " : " Could the members of The Police perform lawful arrests? " ,
2023-10-27 02:44:30 +00:00
" output " : " what can the members of The Police do? " ,
2023-10-26 01:47:42 +00:00
} ,
{
2023-10-27 02:44:30 +00:00
" input " : " Jan Sindel’ s was born in what country? " ,
" output " : " what is Jan Sindel’ s personal history? " ,
2023-10-26 01:47:42 +00:00
} ,
]
# We now transform these to example messages
example_prompt = ChatPromptTemplate . from_messages (
[
( " human " , " {input} " ) ,
( " ai " , " {output} " ) ,
]
)
few_shot_prompt = FewShotChatMessagePromptTemplate (
example_prompt = example_prompt ,
examples = examples ,
)
2023-10-27 02:44:30 +00:00
prompt = ChatPromptTemplate . from_messages (
[
(
" system " ,
" You are an expert at world knowledge. Your task is to step back "
" and paraphrase a question to a more generic step-back question, which "
" is easier to answer. Here are a few examples: " ,
) ,
# Few shot examples
few_shot_prompt ,
# New question
( " user " , " {question} " ) ,
]
)
2023-10-26 01:47:42 +00:00
question_gen = prompt | ChatOpenAI ( temperature = 0 ) | StrOutputParser ( )
response_prompt_template = """ You are an expert of world knowledge. I am going to ask you a question. Your response should be comprehensive and not contradicted with the following context if they are relevant. Otherwise, ignore them if they are not relevant.
{ normal_context }
{ step_back_context }
Original Question : { question }
2023-10-27 02:44:30 +00:00
Answer : """ # noqa: E501
2023-10-26 01:47:42 +00:00
response_prompt = ChatPromptTemplate . from_template ( response_prompt_template )
2023-10-27 02:44:30 +00:00
chain = (
{
# Retrieve context using the normal question
" normal_context " : RunnableLambda ( lambda x : x [ " question " ] ) | retriever ,
# Retrieve context using the step-back question
" step_back_context " : question_gen | retriever ,
# Pass on the question
" question " : lambda x : x [ " question " ] ,
}
| response_prompt
| ChatOpenAI ( temperature = 0 )
| StrOutputParser ( )
)