• 基于大模型的单轮文档问答


    1. import os
    2. os.environ['OPENAI_API_KEY']='sk-xxxxx'
    3. # Load docs
    4. from langchain.document_loaders import WebBaseLoader
    5. loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/")
    6. data = loader.load()
    7. # Split
    8. from langchain.text_splitter import RecursiveCharacterTextSplitter
    9. text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0)
    10. all_splits = text_splitter.split_documents(data)
    11. # Store splits
    12. from langchain.embeddings import OpenAIEmbeddings
    13. from langchain.vectorstores import Chroma
    14. if not os.path.exists('VectorStore'):
    15. vectorstore = Chroma.from_documents(documents=all_splits, embedding=OpenAIEmbeddings(),
    16. persist_directory="VectorStore")
    17. vectorstore.persist()
    18. else:
    19. vectorstore = Chroma(persist_directory='VectorStore', embedding_function=OpenAIEmbeddings())
    20. # RAG prompt
    21. from langchain import hub
    22. prompt = hub.pull("rlm/rag-prompt")
    23. # LLM
    24. from langchain.chains import RetrievalQA
    25. from langchain.chat_models import ChatOpenAI
    26. llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
    27. # RetrievalQA
    28. qa_chain = RetrievalQA.from_chain_type(
    29. llm,
    30. retriever=vectorstore.as_retriever(),
    31. chain_type_kwargs={"prompt": prompt}
    32. )
    33. question = "What are the approaches to Task Decomposition?"
    34. result = qa_chain({"query": question})
    35. print(result["result"])

    最终是使用如下prompt让大模型去做回答:

    question:用户的问题

    context: 基于语义匹配的最相似段落作为上下文

    You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.\nQuestion: {question} \nContext: {context} \nAnswer:"

  • 相关阅读:
    Skywalking9.2.0自监控
    阿里云轻量服务器使用一年使用体验(个人心得,仅供参考)
    shiro 安全(权限)框架
    GB28181 编码规则说明
    LeetCode第317场周赛打卡
    关于过程改进和能力提升
    Allegro如何设置丝印位号优先显示操作指导
    java ssm勤工助学岗位管理系统
    netty系列之:java中的base64编码器
    使用百度EasyDL实现立体库智能盘点
  • 原文地址:https://blog.csdn.net/u014403221/article/details/133622857