您好,想复现一下您的代码《基于langchain的多轮对话RAG》,可以提供您实验的模型和config文件吗?非常感谢!
1条回答 默认 最新
- 清水白石008 2024-09-22 07:05关注
🕒上午好,题主!目前:🟢[在线] 📢参考GPT-4o mini 模型、由清水白石008整理提供! 📣今日金句:“成功是由不断追求卓越的精神所驱动的。”** — 史蒂夫·乔布斯
你好!很高兴你对《基于langchain的多轮对话RAG》感兴趣。以下是一些基本步骤和示例代码,帮助你复现这个项目。
基本步骤
安装必要的依赖:
pip install langchain qdrant-client transformers
配置模型和向量存储:
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
加载文档和创建向量存储:
loader = WebBaseLoader("https://example.com") docs = loader.load() retriever = get_retriever(docs)
创建对话链:
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()
希望这些信息能帮助你复现项目。如果你有任何问题或需要进一步的帮助,请随时告诉我!
解决 无用评论 打赏 举报
悬赏问题
- ¥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