langchain学习(三)

参考Get started | 🦜️🔗 Langchain

1、基础示例:

chain=prompt|model|output_parser

符号|:作用是将前一个部件的输出作为下一个部件的输入
以上写法也等同于
chain=LLMChain(prompt=prompt,llm=model,output_parser=output_parser,return_final_only=False)

OpenAI的参数temperature介于0-1,越接近0回答越确定(适合需要准确、文档搜索的场景),越接近1越多样化(模型回答的更飘),默认0.7;

from langchain.llms import OpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain.chains.llm import LLMChain

prompt=ChatPromptTemplate.from_template("用中文讲个笑话关于{topic}")
model=OpenAI(model_name="gpt-3.5-turbo"
                 ,temperature=0.5)
output_parser=StrOutputParser()
chain=prompt|model|output_parser
response=chain.invoke({"topic": "椅子"})
print(response)
chain=LLMChain(prompt=prompt,llm=model,output_parser=output_parser,return_final_only=False)
response=chain.invoke({"topic": "椅子"})
print(response)

2、prompt

prompt:提示,接收一个字典并生成PromptValue(一个有完整提示的包装器,可以传给任何一个llm或chatModel)

llm:takes a string as input、chatModel:takes a sequence of messages as input

prompt=ChatPromptTemplate.from_template("用中文讲个笑话关于{topic}")
prompt_value = prompt.invoke({"topic": "椅子"})
print(prompt_value)#messages=[HumanMessage(content='用中文讲个笑话关于椅子')]
print(prompt_value.to_string())#Human: 用中文讲个笑话关于椅子;等同于StrOutputParser

3、model

model.invoke(prompt_value),如果model是chatModel(通过from langchain_openai import ChatOpenAI),输出的是message格式(AIMessage(content="XX")),如果model是LLM(from langchain_openai.llms import OpenAI),输出格式是字符串,可用(from langchain_core.messages import AIMessage)转换为message格式

4、Output parser

输出格式转换器

5、RAG Search Example

RAG:retrieval-augmented generation,召回/检索-增强的生成器,作用是将私有知识库和模型融合

from langchain_core.runnables import RunnableParallel, RunnablePassthrough

通过一个RunnableParallel,在两个实体间并行进行内容抓取和用户问题解析,通过RunnablePassthrough传递信息,提高处理效率

from langchain.llms import OpenAIChat
from langchain_community.embeddings.openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
from langchain.llms import OpenAIChat
from langchain_community.embeddings.openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import create_retrieval_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain


model=OpenAIChat()
embeddings = OpenAIEmbeddings()
text_splitter = RecursiveCharacterTextSplitter()
docs=["小明是一位科学家", "小明在balala地区工作"]
vector = FAISS.from_texts(docs, embeddings)
retriever = vector.as_retriever()

# ##############官方的示例
prompt = ChatPromptTemplate.from_template(
    """只根据提供的{context}进行回答,如果{question}与提供的内容无关,回答"对不起,我不知道"。""")
output_parser = StrOutputParser()
setup_and_retrieval = RunnableParallel(
    {"context": retriever, "question": RunnablePassthrough()}
)
##首先通过一个RunnableParallel,在两个实体间并行进行内容抓取和用户问题解析,通过RunnablePassthrough传递信息
chain = setup_and_retrieval | prompt | model | output_parser
print(chain.invoke("介绍一下小明"))#小明是一位科学家,在balala地区工作。

##############其他示例
prompt1 = ChatPromptTemplate.from_template(
    """
    只根据提供的内容进行回答,如果问题与提供的材料无关,请回答"对不起,我不知道"
    {context}
    {input}
    """)
#注意documents_chain的prompt格式要求
document_chain = create_stuff_documents_chain(model, prompt1)
#注意retrieval_chain要求传入input,否则报错KeyError: 'input',retrieval_docs = (lambda x: x["input"]) | retriever
retrieval_chain = create_retrieval_chain(retriever, document_chain)
response = retrieval_chain.invoke({"input": "介绍一下小明"})
print(response)
#{'input': '介绍一下小明',
# 'context': [Document(page_content='小明是一位科学家'),Document(page_content='小明在balala地区工作')],
# 'answer': '小明是一位科学家,他在balala地区工作。'}
response = retrieval_chain.invoke({"input": "中国在哪个大洲"})
print(response['answer'])#'answer': '对不起,我不知道。'

 

 

 

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值