m0_64083082 2024-09-21 08:15 采纳率: 0%
浏览 10

复现rag与langchain

您好,想复现一下您的代码《基于langchain的多轮对话RAG》,可以提供您实验的模型和config文件吗?非常感谢!

  • 写回答

1条回答 默认 最新

  • 清水白石008 2024-09-22 07:05
    关注
    🕒上午好,题主!目前:🟢[在线]
    📢参考GPT-4o mini 模型、由清水白石008整理提供!
    📣今日金句:“成功是由不断追求卓越的精神所驱动的。”** — 史蒂夫·乔布斯
    

    你好!很高兴你对《基于langchain的多轮对话RAG》感兴趣。以下是一些基本步骤和示例代码,帮助你复现这个项目。

    基本步骤

    1. 安装必要的依赖

      pip install langchain qdrant-client transformers
      
    2. 配置模型和向量存储

      from langchain_openai.chat_models import ChatOpenAI
      from langchain.chains.history_aware_retriever import create_history_aware_retriever
      from qdrant_client import QdrantClient
      from qdrant_client.models import VectorParams, Distance
      from langchain_qdrant import QdrantVectorStore
      from langchain.prompts.chat import ChatPromptTemplate
      from langchain.prompts import MessagesPlaceholder
      from langchain_core.documents import Document
      from langchain_huggingface.embeddings import HuggingFaceEmbeddings
      from langchain_community.document_loaders import WebBaseLoader
      from langchain_community.document_transformers import Html2TextTransformer
      from langchain.text_splitter import RecursiveCharacterTextSplitter
      from langchain.chains.combine_documents import create_stuff_documents_chain
      from langchain.chains.retrieval import create_retrieval_chain
      from langchain_community.chat_message_histories import ChatMessageHistory
      from langchain_core.runnables import RunnableWithMessageHistory
      import os
      import sys
      
      sys.path.append(os.path.abspath(os.pardir))
      from global_config import MODEL_CACHE_DIR
      
      def get_chat_llm():
          chat_model = ChatOpenAI(
              model="Qwen2-7B-Instruct",
              openai_api_key="empty",
              openai_api_base="http://localhost:8000/v1",
              max_tokens=2048,
              temperature=0
          )
          return chat_model
      
      def get_retriever(docs):
          embeddings = HuggingFaceEmbeddings(model_name=os.path.join(MODEL_CACHE_DIR, "maidalun/bce-embedding-base_v1"))
          client = QdrantClient(":memory:")
          if not client.collection_exists("rag_collection"):
              client.create_collection(
                  "rag_collection",
                  vectors_config=VectorParams(
                      size=len(embeddings.embed_query("hello world")),
                      distance=Distance.COSINE
                  )
              )
          vector_store = QdrantVectorStore(
              client=client,
              collection_name="rag_collection",
              embedding=embeddings
          )
          vector_store.add_documents(docs)
          return vector_store.as_retriever(search_kwargs={"k": 5})
      
      def get_contextualize_question_prompt():
          system_prompt = """
          请根据聊天历史和最后用户的问题,改写用户最终提出的问题。
          你只需要改写用户最终的问题,请不要回答问题。
          没有聊天历史则将用户问题直接返回,有聊天历史则进行改写。
          """
          contextualize_question_prompt = ChatPromptTemplate([
              ("system", system_prompt),
          ])
          return contextualize_question_prompt
      
    3. 加载文档和创建向量存储

      loader = WebBaseLoader("https://example.com")
      docs = loader.load()
      retriever = get_retriever(docs)
      
    4. 创建对话链

      chat_model = get_chat_llm()
      contextualize_question_prompt = get_contextualize_question_prompt()
      question_answer_chain = create_stuff_documents_chain(chat_model, contextualize_question_prompt)
      rag_chain = create_retrieval_chain(retriever, question_answer_chain)
      

    配置文件示例

    确保你有一个global_config.py文件,包含模型缓存目录等配置:

    MODEL_CACHE_DIR = "/path/to/your/model/cache"
    

    运行示例

    以下是一个简单的运行示例:

    def main():
        history = ChatMessageHistory()
        user_input = "请问今天的天气怎么样?"
        response = rag_chain.run(user_input, history)
        print(response)
    
    if __name__ == "__main__":
        main()
    

    希望这些信息能帮助你复现项目。如果你有任何问题或需要进一步的帮助,请随时告诉我!

    评论

报告相同问题?

问题事件

  • 创建了问题 9月21日

悬赏问题

  • ¥15 台达变频器MS300与伺服驱动器B3系列的抱闸与电路设计如何实现
  • ¥20 C++通过HICON获取argb像素数组
  • ¥15 如何利用支持向量机提高分类器正确率和筛选理想分类器
  • ¥15 Pygame坦克大战游戏开发实验报告
  • ¥15 用vmmare虚拟机用sentaurus仿真的时候,调用terminal程序,输入swb指令弹出这个,打不开workbench,桌面上面的sentaurus workbench也打不开
  • ¥75 使用winspool.drv的SetPrinter设置打印机失败
  • ¥15 simulink 硬件在环路仿真
  • ¥15 python动态规划:N根火柴摆出的最大数字
  • ¥20 (标签-excel)
  • ¥200 求idea10和MyEclipse7.1