当前位置: 首页 > news >正文

青岛苍南网站建设邵阳最新新闻

青岛苍南网站建设,邵阳最新新闻,高质量发展,网站建设上机实验心得教程地址#xff1a;https://github.com/datawhalechina/all-in-rag/ 感谢datawhale的教程#xff0c;以下笔记大部分内容来自该教程 文章目录基于LangChain框架的RAG实现初始化设置数据准备索引构建查询与检索生成集成低代码#xff08;基于LlamaIndex#xff09;conda ac…教程地址https://github.com/datawhalechina/all-in-rag/ 感谢datawhale的教程以下笔记大部分内容来自该教程 文章目录基于LangChain框架的RAG实现初始化设置数据准备索引构建查询与检索生成集成低代码基于LlamaIndexconda activate all-in-rag # 假设当前在 all-in-rag 项目的根目录下 cd code/C1 #运行代码 python 01_langchain_example.py输出的参数 content: 这是最核心的部分即大型语言模型LLM根据你的问题和提供的上下文生成的具体回答。additional_kwargs: 包含一些额外的参数在这个例子中是 {‘refusal’: None}表示模型没有拒绝回答。response_metadata: 包含了关于LLM响应的元数据。token_usage: 显示了本次调用消耗的token数量包括完成completion_tokens、提示prompt_tokens和总量total_tokens。model_name: 使用的LLM模型名称当前是 deepseek-chat。system_fingerprint, id, service_tier, finish_reason, logprobs: 这些是更详细的API响应信息例如 finish_reason: ‘stop’ 表示模型正常完成了生成。id: 本次运行的唯一标识符。usage_metadata: 与 response_metadata 中的 token_usage 类似提供了输入和输出token的统计。 如果没有魔法且下载模型失败 在shell中从huggingface下载模型 export HF_ENDPOINThttps://hf-mirror.com hf download --local-dir ./bge-small-zh-v1.5 BAAI/bge-small-zh-v1.5 在使用的时候显示指定位置在哪个路径。 基于LangChain框架的RAG实现 初始化设置 import os # os.environ[HF_ENDPOINT] https://hf-mirror.com from dotenv import load_dotenv from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_huggingface import HuggingFaceEmbeddings from langchain_core.vectorstores import InMemoryVectorStore from langchain_core.prompts import ChatPromptTemplate from langchain_deepseek import ChatDeepSeek# 加载环境变量 load_dotenv()数据准备 加载原始文档: 先定义Markdown文件的路径然后使用TextLoader加载该文件作为知识源 markdown_path ../../data/C1/markdown/easy-rl-chapter1.md loader TextLoader(markdown_path) docs loader.load()文本分块 (Chunking): 为了便于后续的嵌入和检索长文档被分割成较小的、可管理的文本块chunks。这里采用了递归字符分割策略使用其默认参数进行分块。当不指定参数初始化 RecursiveCharacterTextSplitter() 时其默认行为旨在最大程度保留文本的语义结构 默认分隔符与语义保留: 按顺序尝试使用一系列预设的分隔符 [“\n\n” (段落), “\n” (行), (空格), “” (字符)] 来递归分割文本。这种策略的目的是尽可能保持段落、句子和单词的完整性因为它们通常是语义上最相关的文本单元直到文本块达到目标大小。保留分隔符: 默认情况下 (keep_separatorTrue)分隔符本身会被保留在分割后的文本块中。默认块大小与重叠: 使用其基类 TextSplitter 中定义的默认参数 chunk_size4000块大小和 chunk_overlap200块重叠。这些参数确保文本块符合预定的大小限制并通过重叠来减少上下文信息的丢失。 text_splitter RecursiveCharacterTextSplitter() texts text_splitter.split_documents(docs)索引构建 初始化中文嵌入模型构建向量存储 HugginfaceEmbeddingsInMemoeyVectorStore 初始化中文嵌入模型: 使用HuggingFaceEmbeddings加载之前在初始化设置中下载的中文嵌入模型。配置模型在CPU上运行并启用嵌入归一化 (normalize_embeddings: True)。 embeddings HuggingFaceEmbeddings(model_nameBAAI/bge-small-zh-v1.5,model_kwargs{device: cpu},#配置模型在CPU上运行encode_kwargs{normalize_embeddings: True}#启用嵌入归一化 )构建向量存储: 将分割后的文本块 (texts) 通过初始化好的嵌入模型转换为向量表示然后使用InMemoryVectorStore将这些向量及其对应的原始文本内容添加进去从而在内存中构建出一个向量索引。 vectorstore InMemoryVectorStore(embeddings) vectorstore.add_documents(texts)查询与检索 索引构建完毕后便可以针对用户问题进行查询与检索 定义用户查询: 设置一个具体的用户问题字符串。 question 文中举了哪些例子在向量存储中查询相关文档: 使用向量存储的similarity_search方法根据用户问题在索引中查找最相关的 k (此处示例中 k3) 个文本块。 retrieved_docs vectorstore.similarity_search(question, k3)准备上下文: 将检索到的多个文本块的页面内容 (doc.page_content) 合并成一个单一的字符串并使用双换行符 (“\n\n”) 分隔各个块形成最终的上下文信息 (docs_content) 供大语言模型参考。 docs_content \n\n.join(doc.page_content for doc in retrieved_docs)使用 “\n\n” (双换行符) 而不是 “\n” (单换行符) 来连接不同的检索文档块主要是为了在传递给大型语言模型LLM时能够更清晰地在语义上区分这些独立的文本片段。双换行符通常代表段落的结束和新段落的开始这种格式有助于LLM将每个块视为一个独立的上下文来源从而更好地理解和利用这些信息来生成回答。 生成集成 最后一步是将检索到的上下文与用户问题结合利用大语言模型LLM生成答案 构建提示词模板: 使用ChatPromptTemplate.from_template创建一个结构化的提示模板。此模板指导LLM根据提供的上下文 (context) 回答用户的问题 (question)并明确指出在信息不足时应如何回应。 prompt ChatPromptTemplate.from_template(请根据下面提供的上下文信息来回答问题。 请确保你的回答完全基于这些上下文。 如果上下文中没有足够的信息来回答问题请直接告知“抱歉我无法根据提供的上下文找到相关信息来回答此问题。”上下文: {context}问题: {question}回答: 配置大语言模型: 初始化ChatDeepSeek客户端配置所用模型 (deepseek-chat)、生成答案的温度参数 (temperature0.7)、最大Token数 (max_tokens2048) 以及API密钥 (从环境变量加载)。 llm ChatDeepSeek(modeldeepseek-chat,temperature0.7,max_tokens2048,api_keyos.getenv(DEEPSEEK_API_KEY) )调用LLM生成答案并输出: 将用户问题 (question) 和先前准备好的上下文 (docs_content) 格式化到提示模板中然后调用ChatDeepSeek的invoke方法获取生成的答案。 answer llm.invoke(prompt.format(questionquestion, contextdocs_content)) print(answer)# 文本分块 text_splitter RecursiveCharacterTextSplitter(chunk_size1000, # 增大块大小每个块约1000字符chunk_overlap200, # 增大重叠部分保持上下文连贯性separators[\n\n, \n, , ] # 自定义分割符)调整chunksize和chunk_overlap print(answer.content)#获取回答参数调整对输出的影响 chunk_size 的影响 较小的chunk_size如 500文本块更细碎检索到的信息可能更精准但不完整较大的chunk_size如 2000文本块更完整上下文信息更丰富但可能包含冗余内容 chunk_overlap 的影响 较小的chunk_overlap如 50文本块独立性强可能丢失跨块的上下文关联较大的chunk_overlap如 300增强了块之间的连贯性适合处理有连续逻辑的文本但会增加冗余 低代码基于LlamaIndex 在RAG方面LlamaIndex提供了更多封装好的API接口这无疑降低了上手门槛下面是一个简单实现 import os # os.environ[HF_ENDPOINT]https://hf-mirror.com from dotenv import load_dotenv from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings from llama_index.llms.deepseek import DeepSeek from llama_index.embeddings.huggingface import HuggingFaceEmbeddingload_dotenv() #环境设置 #模型配置 Settings.llm DeepSeek(modeldeepseek-chat, api_keyos.getenv(DEEPSEEK_API_KEY)) ## 设置使用 DeepSeek 的聊天模型作为语言模型 Settings.embed_model HuggingFaceEmbedding(BAAI/bge-small-zh-v1.5) ## 设置使用 BAAI 的中文小型嵌入模型进行文本向量化documents SimpleDirectoryReader(input_files[../../data/C1/markdown/easy-rl-chapter1.md]).load_data() ## 从指定路径加载 Markdown 文档内容 index VectorStoreIndex.from_documents(documents) # 将文档内容转换为向量索引便于后续的相似性搜索 query_engine index.as_query_engine() # 创建查询引擎用于处理自然语言查询 print(query_engine.get_prompts()) # 打印使用的提示词模板 print(query_engine.query(文中举了哪些例子?)) # 执行查询并打印结果
http://www.zqtcl.cn/news/41141/

相关文章:

  • vi设计是品牌设计吗拼多多关键词优化步骤
  • 福建省建设网站做竞猜网站犯法吗
  • 网站文章采集东莞阳光网官网投诉中心
  • 网站建设报价怎么差别那么大杭州网页设计
  • 网站没有被百度收录wordpress修改数据库表
  • 扬州高端网站建设高端网站制作哪家好
  • 白山网站制作精准推广引流5000客源
  • 网站如何优化关键词桂林旅游网官方网站
  • 学做网站书籍网站建设添加资料
  • 长春市住房建设局网站微信小程序个人中心制作
  • 做营销的有那么网站广东私人做网站的联系方式
  • 做网站要考虑的问题建设济南公司网站
  • 网站首页做了一下调整会被k吗装修平面设计软件
  • 做网站开发的公司万网域名注册官网中文域名
  • 做网站用什么开发好给客户做非法网站
  • 汽车之家网站做的很烂腾讯云域名购买流程
  • 营销型网站怎么做网站建设实训存在的问题
  • 可以举报一个做网络网站发大财吗中国新闻社主管部门
  • 浙江网站建站法律行业网站建设
  • 自己的网站怎么做商城主机托管是什么意思
  • 手机wap网站模板下载论文收录网站排名
  • 网站成功上线报道河北建设厅网站登录密码错误
  • 重庆网站建设夹夹虫负责网站后台管理模板免费下载
  • 东鹏拼奖网站怎么做新闻博客软文自助推广
  • 怎么检查外包做的网站寻找网站建设
  • 炽乐清网站建设软件外包收费标准
  • 联通专线做网站wordpress+模版+推荐
  • php建设网站工具蜗牛星际做网站服务器
  • 乌兰察布市建设银行网站淄博网站建设价格
  • 电子商务网站建设与设计网站制作公司排名前十