专业做网站公司怎么收费做门户网站
2026/2/26 2:23:29 网站建设 项目流程
专业做网站公司怎么收费,做门户网站,wordpress登录vip,上海阔达网站建设公司简介 LLM大模型一般训练的数据都是滞后的#xff0c;这是就需要用到RAG知识库#xff0c;RAG知识库可以降低大模型在输出答案时的幻觉#xff0c;也能够让大模型知识拓展。 知识库架构知识 检索流程图 用户输入 (User Query)|v-----------------------| 提示词 (Prompt) …简介LLM大模型一般训练的数据都是滞后的这是就需要用到RAG知识库RAG知识库可以降低大模型在输出答案时的幻觉也能够让大模型知识拓展。知识库架构知识检索流程图用户输入 (User Query) | v ----------------------- | 提示词 (Prompt) | ----------------------- | | (1) 转化为向量 (Embedding) v ----------------------- | 文字向量模型 (EMB) | ----------------------- | | (2) 相似度检索 (Search) v ----------------------- ----------------------- | RAG 向量数据库 (DB) | ----- | 本地知识库/文档集 | ----------------------- ----------------------- | | (3) 召回相关片段 (Context) v ----------------------- | 大语言模型 (LLM) | --- (将提示词与背景片段拼接) ----------------------- | | (4) 最终生成 (Generation) v ----------------------- | 输出结果 | -----------------------RAG原理解析构建知识库的流程如下文档内容切片-文字向量化-向量数据库文档内容切片LLM 有上下文长度限制且向量检索在短文本上更精确。文本切片方法有按字数切片按句切片递归切片不管是哪个切片方法目的是保留语义的完整性因此不是某个好或某个坏根据实际需求进行选择。文字向量化将每个切片文字块转换为关系向量关系向量是怎么来的这些是通过对模型进行大量的上下文训练得到的词语与词语句子与句子的语义关系上的关联这是LLM的基础。不同的文字向量模型输出的向量矩阵也会不同因此在构建和检索时需要用同一个文字向量模型进行转换。向量数据库跟平时用的MySqlMS sql等本质上差不多只不过将文本换成了向量矩阵的增删改查检索的方法这里就列举几个两个向量的余弦角大小两个向量的欧氏举例两个向量的分类区域用文本也能搜索为什么要用向量呢文本的数据库检索一般通过正则搜索这种无法关联语义进行检索因为我们无法保证大模型在检索时能够按照固定的格式。举个例子数据库中存储小明一个月工资3000元搜索小明这个月多少钱正则搜索会直接略过而向量搜索就能够搜到。构建RAG知识库本次都利用千问的语言模型和FAISS向量数据库演示来演示案例/* by 01022.hk - online tools website : 01022.hk/zh/quchong.html */ from operator import itemgetter import os from langchain_community.chat_models.tongyi import ChatTongyi from langchain_community.vectorstores import FAISS from langchain_community.embeddings import DashScopeEmbeddings from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.documents import Document from langchain_core.runnables import RunnablePassthrough from langchain_core.output_parsers import StrOutputParser from langchain_core.messages import HumanMessage, AIMessage from sqlalchemy import true #apikey os.environ[DASHSCOPE_API_KEY] 你的apikey FAISS_PATH my_faiss_index raw_text 【公司内部机密代号“深蓝计划”】 1. 项目目标开发一款能听懂猫语的翻译器。 2. 核心技术基于Transformer的“喵声波”分析算法。 3. 团队暗号如果有人问“今天天气怎么样”必须回答“我想吃鱼”。 4. 截止日期2026年12月31日。 5. 经费预算仅剩50元人民币主要用于购买猫条。 #初始化文本 docs [Document(page_contentraw_text)] text_splitter RecursiveCharacterTextSplitter(chunk_size100, chunk_overlap20) split_docs text_splitter.split_documents(docs) #初始化模型 llm ChatTongyi(modelqwen-plus) embeddings DashScopeEmbeddings(modeltext-embedding-v1) #创建向量数据库 if os.path.exists(FAISS_PATH): print(向量数据库已存在) ragdb FAISS.load_local(FAISS_PATH, embeddings, allow_dangerous_deserializationTrue) else: print(创建向量数据库) ragdb FAISS.from_documents(split_docs, embeddings) ragdb.save_local(FAISS_PATH) #构建提示词chain def format_docs(docs): return \n\n.join(doc.page_content for doc in docs) final_prompt ChatPromptTemplate.from_messages([ (system, 你是一个专业的问答助手你的任务是根据上下文简洁的回答用户的问题。 context {context} /context ), MessagesPlaceholder(variable_namehistory), (human, {input}) ]) chain ( #查询rag RunnablePassthrough.assign( context itemgetter(input) | ragdb.as_retriever() | format_docs ) | RunnablePassthrough.assign( answer {input:itemgetter(input), context:itemgetter(context), history:itemgetter(history)} | final_prompt | llm | StrOutputParser() ) ) history [] while true: input_q input(我) respond chain.invoke({ input: input_q, history: history}) print(answer: respond[answer]) print(*30) history.append(HumanMessage(contentinput_q)) history.append(AIMessage(contentrespond[answer]))代码解释代码的流程如下初始化RAG文本切片-文本向量模型-构建向量数据库询问ai提示词-文本向量模型-向量数据库检索-组合prompt-喂给LLM-回答问题-记录历史对话文本切片/* by 01022.hk - online tools website : 01022.hk/zh/quchong.html */ docs [Document(page_contentraw_text)] text_splitter RecursiveCharacterTextSplitter(chunk_size100, chunk_overlap20) split_docs text_splitter.split_documents(docs)这里利用了langchain提供的文本分词器RecursiveCharacterTextSplitter递归分词构建向量数据库llm ChatTongyi(modelqwen-plus) embeddings DashScopeEmbeddings(modeltext-embedding-v1) #创建向量数据库 if os.path.exists(FAISS_PATH): print(向量数据库已存在) ragdb FAISS.load_local(FAISS_PATH, embeddings, allow_dangerous_deserializationTrue) else: print(创建向量数据库) ragdb FAISS.from_documents(split_docs, embeddings) ragdb.save_local(FAISS_PATH)这部分要注意新版FAISS读取现有数据库要设置allow_dangerous_deserializationTrue不然会报错提示词模板final_prompt ChatPromptTemplate.from_messages([ (system, 你是一个专业的问答助手你的任务是根据上下文简洁的回答用户的问题。 context {context} /context ), MessagesPlaceholder(variable_namehistory), (human, {input}) ])之前没有讲到历史对话记录这次补充下MessagesPlaceholder这个是langchain框架的占位符其实是框架写好了prompt模板告诉ai这个是历史对话使用时将历史对话记录的数组放在这里设置的字段中在添加历史对话时要使用相关的类进行声明对话告诉ai这句话是ai说的还是用户说的history.append(HumanMessage(contentinput_q)) history.append(AIMessage(contentrespond[answer]))Chain链的解释核心逻辑chain ( #查询rag RunnablePassthrough.assign( context itemgetter(input) | ragdb.as_retriever() | format_docs ) | RunnablePassthrough.assign( answer {input:itemgetter(input), context:itemgetter(context), history:itemgetter(history)} | final_prompt | llm | StrOutputParser() ) )Chain链流程查询RAG的chain获取input字段-内容交给向量数据库检索-将检索的内容(数组)转换为字符串格式-保存到context字段并传递给下一个任务询问LLM的chain获取input,context,history字段-填充上面定义的prompt模板-喂给LLM模型-解析成文本并保存在answer字段itemgetter是获取上一个任务传递过来的字段内容。如果❤喜欢❤本系列教程就点个关注吧后续不定期更新~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询