人工智能应用导论(第三版)8-4大模型应用开发实验手册_第1页
人工智能应用导论(第三版)8-4大模型应用开发实验手册_第2页
人工智能应用导论(第三版)8-4大模型应用开发实验手册_第3页
人工智能应用导论(第三版)8-4大模型应用开发实验手册_第4页
人工智能应用导论(第三版)8-4大模型应用开发实验手册_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8-4知识问答助手实验手册【项目目标】本项目旨在通过整合LangChain框架与DeepSeek大模型API接口,构建具备本地知识增强能力的智能问答系统,实现从模型调用到用户交互的全流程落地。核心目标包括:基于DeepSeek大模型API完成对话生成能力的接入与优化,确保接口调用的稳定性和响应效率;构建结构化本地知识库,支持多格式文档解析与向量化存储,形成可扩展的知识管理体系;利用基于语义理解的检索机制,结合大模型推理能力与知识库精确匹配,提升问答结果的准确性和场景适配性;最终通过Web端部署实现系统交付,设计直观易用的交互界面,支持用户实时问答、历史记录追溯等功能,形成可复用的知识问答助手。整体目标如图8-2所示。图8-2项目目标解析图任务一调用DeepSeek大模型图8-3DeepSeek大模型开放平台主界面图8-4创建DeepSeek大模型APIkey获取DeepSeek大模型的API参数后,利用LangChain框架调用大模型,示例代码如下:fromlangchain.chat_modelsimportChatOpenAI

api_key="your-deepseek-api-keys"

api_base="/v1"

llm=ChatOpenAI(

model="deepseek-chat",

openai_api_key=api_key,

openai_api_base=api_base,

temperature=0.7

)

response=llm.invoke("请问你是什么大模型?")

print("生成的内容:",response)示例代码中的参数“your-deepseek-api-keys”,可以自行替换为个人账号中创建的DeepSeek的APIkey参数。注意,首次使用DeepSeekAPI时需要进行充值,不然结果显示无法调用接口。任务二构建本地知识库接下来需要准备向量嵌入模型,将本地的文本类型数据转换为将非结构化数据,如单词、句子或者整个文档,转化为实数向量的技术。这些实数向量可以被计算机更好地理解和处理。本项目中使用到的嵌入模型是质谱AI中的“embedding-3”模型,本地知识库构建示例代码如下:file_paths=[]folder_path='./data_base/knowledge_db'forroot,dirs,filesinos.walk(folder_path):forfileinfiles:file_path=os.path.join(root,file).replace('\\','/')file_paths.append(file_path)loaders=[]forfile_pathinfile_paths:file_type=file_path.split('.')[-1]iffile_type=='pdf':loaders.append(PyMuPDFLoader(file_path))eliffile_type=='md':loaders.append(UnstructuredMarkdownLoader(file_path))texts=[]forloaderinloaders:texts.extend(loader.load())text_splitter=RecursiveCharacterTextSplitter(chunk_size=500,chunk_overlap=50)split_docs=text_splitter.split_documents(texts)embedding=ZhipuAIEmbeddings()#定义持久化路径persist_directory='./data_base/vector_db/chroma'vectordb=Chroma.from_documents(documents=split_docs,#embedding=embedding,persist_directory=persist_directory#允许我们将persist_directory目录保存到磁盘上)vectordb.persist()如果准备的文件资料包含不同的格式,如pdf、txt、Markdown等,可采用LangChain中的不同文件读取函数进行读取。同时,本项目采用chroma作为本地向量数据库,它是一种轻量级向量数据库,拥有丰富的功能和简单的API,具有简单、易用、轻量的优点。任务三检索相似性知识当需要根据知识库的知识来回答用户提出的问题时,需要根据问题来检索相关信息。通过使用向量数据库,可以生成一个检索器来寻找与查询最相关的文档。示例代码如下:retriever=vectordb.as_retriever(search_type="similarity_score_threshold",search_kwargs={"k":3,"score_threshold":0.3})print(retriever.invoke('乡村振兴'))通过检索器检索,输出结果为一个列表,按相关性排序,从相关性最高的文档开始。参数“k”为输出的最相似的k个结果,“score_threshold”为相似性阈值。任务四结合LangChain进行问答在上面的任务中,调用了大模型API接口、构建了本地向量知识库并实现了信息的检索。现在将创建一个检索增强生成流程,首先使用检索器搜索到相关的文档,然后根据文档内容生成回答,如果没有检索到相关文档,拒绝回答相关问题。示例代码如下:#自定义提示模板,包含拒绝回答的指令prompt_template="""使用相关文档来回答最后的问题。如果你不知道答案,就说你不知道,不要试图编造答案。问题:{question}相关文档:{context}请严格按照上述规则生成答案:"""PROMPT=PromptTemplate(template=prompt_template,input_variables=["context","question"])qa_chain=RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",retriever=retriever,chain_type_kwargs={"prompt":PROMPT},return_source_documents=True)defask_question(question):result=qa_chain({"query":question})returnresult["result"]response=ask_question(user_input)首先,定义一个大模型的提示词模板,要求大模型需要根据在知识库中查询到的相关上下文来回答问题,如果查询不到相关信息,就回复无法回答该问题。这样进行设置,就限制了大模型的回复范围,可以让它更具有专业性。将信息检索和语言生成相结合,能够有效地从大量的非机构化文本中检索信息并生成准确的回答。任务五部署知识问答系统本项目将基于PythonFlask框架构建轻量化Web服务,实现LangChain驱动的大模型知识检索系统部署。示例代码如下:@app.route('/')defindex():returnrender_template('chat_wenxin_app.html')@app.route('/chat',methods=['POST'])defchat():user_input=request.json.get('message')#设置检索器,只返回相似度高于阈值的文档retriever=vectordb.as_retriever(search_type="similarity_score_threshold",search_kwargs={"k":5,"score_threshold":0.3})print(retriever)qa_chain=RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",retriever=retriever,chain_type_kwargs={"prompt":PROMPT},return_source_documents=True)defask_question(question):docs=retriever.get_relevant_documents(question)print(len(docs))result=qa_chain({"query":question})print(result)iflen(result['source_documents'])==0:return"抱歉,我在知识库中没有找到相关信息,无法回答这个问题。"else:returnresult["result"]response=ask_question(user_input)returnjsonify({'response':response})if__name__=='__main__':app.run(debug=True)上面任务通过定义两个路由实现前后端交互,实现了知识问答系统的部署。根路由'/'渲染前端聊天界面,'/chat'路由处理用户POST请求。在问答处理中,系统利用LangChain的RetrievalQA模块整合向量数据库检索与大语言模型生成能力,,最终返回结构化JSON响应。这种设计实现了从用户输入到知识检索、模型推理、结果返回的全流程闭环,支持动态知识库调用与实时语义增强生成。运行本项目提供的代码后,点击链接可打开对话页面,如图8-5所示。图8-5对话界面链接点击链接后,打开知识问答系统对话页面。本项目中,在知识库文件夹中放入了三篇关于乡村振兴的文献,在向系统提问“乡村振兴”的相关话题时,系统能够给出回复,而当向其提问与之无关的历史人物时,系统回复“抱歉,我在知识库中没有找到相关信息,无法回答这个问题。”,如图8-6所示。图8-6对话界面链接【项目总结】本项目以大模型应用开发为核心,借助LangChain框架和DeepSeek大模型API接口,搭建了一个知识问答系统。通过整合LangChain框架与DeepSeekAPI,系统实现了三大核心能力:在知识管理层面,构建了支持多格式文档自动解析的结构化知识库;在智能检索层面,融合语义相似度检索机制,限制了非知识库以外的话题问答;在交互体验

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论