Files

1 line
3.7 KiB
JSON

{"repo": "beamuswayne/rag-learning", "files": {"Archive/kimi_rag.py": {"ffe54e5f4a10bee7243d6665e637b29dfc1ae152": {"t": 1785674099.1194453, "n": 802, "h": "d94eeac9aea52abb", "c": "import os\nfrom langchain_openai import ChatOpenAI\nfrom langchain_core.prompts import ChatPromptTemplate\n\n# 1. 配置 Kimi API (Kimi 兼容 OpenAI 格式)\nclient = ChatOpenAI(\n api_key=\"sk-5RGxWeXho8KGYYMtQEsfGYX0mBbRZTHRmoLOffV608DjbnRk\", \n base_url=\"https://api.moonshot.cn/v1\",\n model_name=\"moonshot-v1-8k\"\n)\n\n# 2. 模拟 RAG 检索回来的“背景知识”\n# 实际开发中,这里是通过向量数据库检索出来的\ncontext = \"根据最新规定,Python 学习者在掌握基础语法后,应优先通过 RAG 技术构建个人知识库。\"\nquestion = \"刚学完 Python 应该做什么?\"\n\n# 3. 编写 RAG 专用 Prompt\ntemplate = \"\"\"你是一个专业的 AI 导师。请根据提供的上下文(Context)来回答问题(Question)。\n如果上下文中没有提到相关信息,请诚实回答不知道。\n\nContext: {context}\nQuestion: {question}\n\"\"\"\nprompt = ChatPromptTemplate.from_template(template)\n\n# 4. 组合并运行\nchain = prompt | client\nresponse = chain.invoke({\"context\": context, \"question\": question})\n\nprint(\"Kimi 的回答:\")\nprint(response.content)"}}, "Archive/pdf_rag.py": {"ffe54e5f4a10bee7243d6665e637b29dfc1ae152": {"t": 1785674099.1521108, "n": 1814, "h": "d46ff3962baf555d", "c": "import os\nfrom langchain_openai import ChatOpenAI\nfrom langchain_community.document_loaders import PyPDFLoader\nfrom langchain_community.vectorstores import Chroma\nfrom langchain_openai import OpenAIEmbeddings\nfrom langchain_text_splitters import RecursiveCharacterTextSplitter\nfrom langchain.prompts import ChatPromptTemplate\nfrom langchain_core.runnables import RunnablePassthrough\nfrom langchain_core.output_parsers import StrOutputParser\n\n# 1. 配置 Kimi 模型 (使用 OpenAI 兼容模式)\nllm = ChatOpenAI(\n api_key=\"sk-5RGxWeXho8KGYYMtQEsfGYX0mBbRZTHRmoLOffV608DjbnRk\",\n base_url=\"https://api.moonshot.cn/v1\",\n model_name=\"moonshot-v1-8k\"\n)\n\n# 2. 加载 PDF 文档并切分\nloader = PyPDFLoader(\"test.pdf\")\ndocs = loader.load()\n\n# 将长文档切分成 500 字的小块,重叠 50 字以保持语境连贯\ntext_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)\nsplits = text_splitter.split_documents(docs)\n\n# 3. 创建本地向量库 (暂使用 FakeEmbedding 演示,若有 OpenAI Key 可换成真正的 Embedding)\n# 注意:这里为了方便你直接运行,使用了本地缓存模拟。\n# 如果你有 OpenAI 的 Embedding Key,建议将下面换成 OpenAIEmbeddings()\nfrom langchain_community.embeddings import DeterministicFakeEmbedding\nvectorstore = Chroma.from_documents(documents=splits, embedding=DeterministicFakeEmbedding(size=1536))\n\n# 4. 构建检索器 (Retriever)\nretriever = vectorstore.as_retriever()\n\n# 5. 定义 RAG 流程控制\ntemplate = \"\"\"你是一个专业的助手。请利用下方检索到的背景资料来回答问题。\n如果资料中没有答案,请直说不知道,不要胡编乱造。\n资料:{context}\n问题:{question}\n\"\"\"\nprompt = ChatPromptTemplate.from_template(template)\n\ndef format_docs(docs):\n return \"\\n\\n\".join(doc.page_content for doc in docs)\n\n# 核心链式结构:检索 -> 格式化 -> 填入 Prompt -> 调用模型 -> 输出结果\nrag_chain = (\n {\"context\": retriever | format_docs, \"question\": RunnablePassthrough()}\n | prompt\n | llm\n | StrOutputParser()\n)\n\n# 6. 测试问答\nquestion = \"这份文档主要讲了什么内容?\"\nprint(f\"Question: {question}\")\nprint(f\"Answer: {rag_chain.invoke(question)}\")"}}}}