外贸大型门户网站建设微信服务号菜单链接网站怎么做

张小明 2026/1/2 21:50:54
外贸大型门户网站建设,微信服务号菜单链接网站怎么做,山东网络推广图片,齐鲁人才招聘网《AI Agent智能体开发实践玩转FastGPT 像搭积木一样构建智能体 LLM大语言模型AI Agent开发 智能体性能优化调试部署实施方法书籍 AIAgent智能体开发实践 无规格》【摘要 书评 试读】- 京东图书 本章将基于LangChain框架和检索增强生成#xff08;RAG#xff09;技术实现一个…《AI Agent智能体开发实践玩转FastGPT 像搭积木一样构建智能体 LLM大语言模型AI Agent开发 智能体性能优化调试部署实施方法书籍 AIAgent智能体开发实践 无规格》【摘要 书评 试读】- 京东图书本章将基于LangChain框架和检索增强生成RAG技术实现一个问答智能体这个智能体能够根据RAG知识准确回答用户的问题。该项目支持单轮问答和多轮对话两种模式采用RAG技术通过向量数据库实现对企业FAQ知识的高效检索并结合大语言模型生成准确回答。10.1 系统架构该项目基于LangChain框架和阿里云DashScope服务构建了一个支持单轮问答与多轮对话的企业FAQ智能问答系统整体框架可分为6个核心层级形成“输入−处理−输出”的完整闭环如图10.1所示。图10.1 整体框架可分为6个核心层级1. 数据源层数据形式采用结构化FAQ数据问题−答案键值对包含工作时间、年假申请等企业常见问题。数据转换将原始FAQ转换为LangChain的Document格式包含page_content问题答案和metadata来源标识。设计特点数据结构简单清晰便于扩展至更大规模的企业知识库。2. 数据存储层核心组件使用FAISS向量数据库存储文本嵌入向量。工作原理通过文本分割器RecursiveCharacterTextSplitter将文档分块后利用嵌入模型转换为向量并存储。检索配置设置k2表示每次检索返回最相关的2条文档。设计优势FAISS为轻量级本地向量库适合小规模知识库场景部署成本低。3. 模型层嵌入模型自定义DashScopeEmbeddings基于阿里云text-embedding-v2模型实现文本向量化。提供embed_documents批量文档嵌入和embed_query查询嵌入方法。LLM模型自定义DashScopeLLM封装阿里云qwen-plus大语言模型。支持温度参数temperature0.3控制输出随机性。限制最大生成tokensmax_tokens512控制回答长度。设计亮点通过统一接口封装第三方模型便于替换为其他模型服务。4. 链管理层1单轮问答链由create_retrieval_chain构建结合检索器和文档组合链。提示模板限制仅使用上下文信息避免编造内容。2多轮对话链增加history_aware_retriever实现对话历史感知。通过contextualize_q_prompt将当前问题结合历史对话重述为独立问题。设计逻辑基于LangChain的链模式实现检索增强生成RAG的核心流程。5. 业务逻辑层1单轮问答函数single_question输入用户问题。输出回答内容参考来源。功能独立处理单个问题返回引用的FAQ来源。2多轮对话函数chat_conversation输入当前问题对话历史记忆状态。输出更新后的对话历史清空的输入框记忆状态。功能维护对话上下文支持连续交互。设计特点分离单轮与多轮处理逻辑满足不同使用场景。6. 用户交互层界面框架使用Gradio构建Web界面包含两个标签页。单轮问答文本输入框回答展示来源展示。多轮对话聊天机器人组件输入框控制按钮。交互设计支持按钮提交和回车提交提供对话清空功能。设计优势零代码部署Web界面降低使用门槛适合演示和快速迭代。10.2 核心功能模块设计1. 基础配置与依赖处理#从正确安装的pydantic中导入BaseModelfrom pydantic import BaseModel#全局配置允许任意类型class CustomBaseModel(BaseModel):class Config:arbitrary_types_allowed True#替换LangChain冲突模块import langchain.memory.summarylangchain.memory.summary.BaseModel CustomBaseModel#其他模块替换上面代码主要解决LangChain与Pydantic之间的兼容性问题通过自定义BaseModel并替换 LangChain相关模块中的基础模型类避免因类型检查严格导致的冲突。2. 阿里云DashScope API配置DASHSCOPE_API_KEY your-dashscope-api-key-here #替换为实际API密钥QWEN_VL_ENDPOINT https://dashscope.aliyuncs.com/api/v1/services/aigc/ multimodal-generation/generation上面代码配置阿里云DashScope服务的API密钥和端点这是调用阿里云大模型服务的基础。3. 自定义嵌入模型class DashScopeEmbeddings(Embeddings):def__init__(self, model_name: str text-embedding-v2):self.model_name model_namedef embed_documents(self, texts: List[str]) - List[List[float]]:#实现文档嵌入逻辑...def embed_query(self, text: str) - List[float]:#实现查询嵌入逻辑...上面代码实现了基于阿里云DashScope的文本嵌入模型将文本转换为向量表示用于后续的相似度检索。其包含以下两个核心方法。embed_documents批量处理文档并生成嵌入向量。embed_query处理用户查询并生成嵌入向量。4. 自定义LLM模型class DashScopeLLM(LLM, CustomBaseModel):model_name: str qwen-plustemperature: float 0.3max_tokens: int 512propertydef_llm_type(self) - str:return dashscopedef_call(self, prompt: str, stop: Optional[List[str]] None, **kwargs: Any) - str:#实现调用阿里云大模型的逻辑...上面代码封装了阿里云DashScope的大语言模型调用实现了LangChain的LLM接口使得阿里云的模型可以无缝集成到LangChain的工作流中。5. 系统初始化组件def initialize_system():#环境配置、数据准备、组件初始化...这是系统的核心初始化函数主要完成环境变量配置。FAQ数据准备与转换为Document格式。文本分割处理。嵌入模型和向量数据库FAISS初始化。检索器retriever创建。LLM模型初始化。单轮和多轮对话链的创建。6. 交互功能实现单轮问答函数single_question(question)处理独立的用户问题返回回答和参考来源。多轮对话函数chat_conversation(question, chat_history, memory)处理上下文相关的对话维护对话历史支持连续交互。7. 前端界面with gr.Blocks(titleRAG问答系统) as demo:#界面组件定义与布局...使用Gradio创建了友好的Web交互界面包含两个标签页单轮问答适合独立问题查询。多轮对话支持上下文关联的连续对话。10.4 完整代码及运行结果本章到了这里我们实现了基于LangChain开发问答智能体的完整功能。通过LangChain框架我们可以快速构建基于特定知识库的问答系统并根据需要进行优化和扩展。【示例10.1】基于LangChain的完整示例代码main.py实现一个RAG问答智能体支持FAQ数据、向量化、检索、生成回答并包含多轮对话记忆和基础部署建议LangChainGradioQwen。 # -*- coding: utf-8 -*- import os import dashscope import gradio as gr # 从正确安装的pydantic中导入BaseModel from pydantic import BaseModel # 全局配置允许任意类型 class CustomBaseModel(BaseModel): class Config: arbitrary_types_allowed True # 替换LangChain冲突模块 import langchain.memory.summary langchain.memory.summary.BaseModel CustomBaseModel import langchain.chains.combine_documents.base langchain.chains.combine_documents.base.BaseModel CustomBaseModel import langchain_core.language_models.base langchain_core.language_models.base.BaseModel CustomBaseModel import langchain.prompts.prompt langchain.prompts.prompt.BaseModel CustomBaseModel # 导入LangChain组件已包含社区版依赖 from langchain.vectorstores import FAISS from langchain.chains import create_retrieval_chain from langchain.chains.combine_documents import create_stuff_documents_chain from langchain.chains.history_aware_retriever import create_history_aware_retriever from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain.schema import Document, AIMessage, HumanMessage from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.memory import SimpleMemory from langchain.llms.base import LLM from typing import Optional, List, Mapping, Any from langchain.embeddings.base import Embeddings # ----------------------------- # 1. 阿里云 DashScope API 配置 # ----------------------------- DASHSCOPE_API_KEY your-dashscope-api-key-here # 替换为实际API密钥 QWEN_VL_ENDPOINT https://dashscope.aliyuncs.com/api/v1/services/aigc/ multimodal-generation/generation # -------------------------- # 2. 自定义阿里云DashScope嵌入模型 # -------------------------- class DashScopeEmbeddings(Embeddings): def __init__(self, model_name: str text-embedding-v2): self.model_name model_name def embed_documents(self, texts: List[str]) - List[List[float]]: dashscope.api_key DASHSCOPE_API_KEY response dashscope.TextEmbedding.call( modelself.model_name, inputtexts ) if hasattr(response, output) and embeddings in response.output: return [item[embedding] for item in response.output[embeddings]] else: raise Exception(f嵌入模型调用失败: {getattr(response, message, 未知错误)}) def embed_query(self, text: str) - List[float]: return self.embed_documents([text])[0] # -------------------------- # 3. 自定义阿里云DashScope LLM # -------------------------- class DashScopeLLM(LLM, CustomBaseModel): model_name: str qwen-plus temperature: float 0.3 max_tokens: int 512 property def _llm_type(self) - str: return dashscope def _call( self, prompt: str, stop: Optional[List[str]] None,** kwargs: Any, ) - str: if stop is not None: raise ValueError(不支持stop参数) dashscope.api_key DASHSCOPE_API_KEY response dashscope.Generation.call( modelself.model_name, promptprompt, temperatureself.temperature, max_tokensself.max_tokens, endpointQWEN_VL_ENDPOINT, **kwargs ) if hasattr(response, output) and hasattr(response.output, text): return response.output.text else: raise Exception(fLLM调用失败: {getattr(response, message, 未知错误)}) property def _identifying_params(self) - Mapping[str, Any]: return { model_name: self.model_name, temperature: self.temperature, max_tokens: self.max_tokens, endpoint: QWEN_VL_ENDPOINT } # -------------------------- # 4. 初始化系统组件 # -------------------------- def initialize_system(): os.environ[DASHSCOPE_API_KEY] DASHSCOPE_API_KEY # 准备FAQ数据 faq_data [ {question: 公司的工作时间是什么, answer: 工作日为周一至周五上午9:00到下午6:00。}, {question: 如何申请年假, answer: 通过HR系统提交休假申请主管审批后生效。}, {question: 有没有远程办公政策, answer: 支持混合办公模式每周可在家工作最多两天。}, {question: 加班有补贴吗, answer: 是的超过晚上8点的加班可申请调休或加班费。} ] # 转换为Document格式 documents [] for item in faq_data: content f问题: {item[question]}\n答案: {item[answer]} documents.append(Document(page_contentcontent, metadata{source: faq})) # 文本分割 text_splitter RecursiveCharacterTextSplitter(chunk_size500, chunk_overlap50) split_docs text_splitter.split_documents(documents) # 初始化嵌入模型和向量库 embeddings DashScopeEmbeddings(model_nametext-embedding-v2) db FAISS.from_documents(split_docs, embeddings) retriever db.as_retriever(search_kwargs{k: 2}) # 初始化LLM llm DashScopeLLM( model_nameqwen-plus, temperature0.3, max_tokens512 ) # 定义单轮问答提示模板 qa_prompt ChatPromptTemplate.from_template(严格使用以下上下文回答问题不要编造信息。如果上下文没有相关内容直接说“不知道”。 上下文: {context} 问题: {input} 回答:) # 创建单轮问答链 combine_docs_chain create_stuff_documents_chain(llm, qa_prompt) qa_chain create_retrieval_chain(retriever, combine_docs_chain) # 定义多轮对话提示模板 contextualize_q_prompt ChatPromptTemplate.from_messages([ MessagesPlaceholder(variable_namechat_history), (human, {input}), (human, 基于上述对话将问题重述为一个独立的问题不需要回答。) ]) # 创建历史感知的检索器 history_aware_retriever create_history_aware_retriever( llm, retriever, contextualize_q_prompt ) # 创建多轮对话链 chat_chain create_retrieval_chain(history_aware_retriever, combine_docs_chain) # 初始化多轮对话记忆 memory SimpleMemory(memories{}) return qa_chain, chat_chain, memory # -------------------------- # 5. 定义交互函数 # -------------------------- def single_question(question): if DASHSCOPE_API_KEY your-dashscope-api-key-here: return 请先替换代码中的阿里云DashScope API密钥, try: qa_chain, _, _ initialize_system() result qa_chain.invoke({input: question}) # 提取参考来源 sources [] if result.get(context): sources [f[{i1}] {doc.page_content.split(答案: )[-1]} for i, doc in enumerate(result[context])] return result[answer], \n.join(sources) except Exception as e: return f错误: {str(e)}, def chat_conversation(question, chat_history, memory): if DASHSCOPE_API_KEY your-dashscope-api-key-here: chat_history.append((question, 请先替换代码中的阿里云DashScope API密钥)) return chat_history, , memory try: _, chat_chain, memory initialize_system() # 准备对话历史 messages [] for human_msg, ai_msg in chat_history: messages.append(HumanMessage(contenthuman_msg)) messages.append(AIMessage(contentai_msg)) # 调用对话链 result chat_chain.invoke({ input: question, chat_history: messages }) # 更新对话历史 chat_history.append((question, result[answer])) return chat_history, , memory except Exception as e: chat_history.append((question, f错误: {str(e)})) return chat_history, , memory # -------------------------- # 6. 创建Gradio界面 # -------------------------- with gr.Blocks(titleRAG问答系统) as demo: gr.Markdown(# 企业FAQ智能问答系统) gr.Markdown(基于LangChain和阿里云DashScope的RAG问答演示) memory_state gr.State(None) # 用于存储对话记忆 with gr.Tabs(): with gr.Tab(单轮问答): question_single gr.Textbox(label请输入问题) output_single gr.Textbox(label回答) sources_single gr.Textbox(label参考来源) btn_single gr.Button(提交) btn_single.click( single_question, inputs[question_single], outputs[output_single, sources_single] ) with gr.Tab(多轮对话): chatbot gr.Chatbot(label对话历史) question_chat gr.Textbox(label请输入问题) btn_chat gr.Button(发送) btn_clear gr.Button(清空对话) btn_chat.click( chat_conversation, inputs[question_chat, chatbot, memory_state], outputs[chatbot, question_chat, memory_state] ) btn_clear.click(lambda: (None, , None), None, [chatbot, question_chat, memory_state]) question_chat.submit( chat_conversation, inputs[question_chat, chatbot, memory_state], outputs[chatbot, question_chat, memory_state] ) gr.Markdown( ### 使用说明 1. 请先在代码中替换您的阿里云DashScope API密钥 2. 单轮问答适合独立的问题查询 3. 多轮对话支持上下文关联的连续对话 ) if __name__ __main__: demo.launch()运行代码控制台窗口中输出如下请读者自行测试Running on local URL: http://127.0.0.1:7862
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

衡水做网站哪儿好网站设计分析

Reranker模型是RAG流程中用于对检索结果重新排序的关键组件,采用两阶段策略解决向量搜索信息丢失和LLM上下文窗口限制的矛盾。第一阶段通过双编码器快速检索候选文档,第二阶段使用重排序器(Cross-Encoder)对文档精确相关性评估并重新排序,既保…

张小明 2026/1/2 13:59:38 网站建设

企业网站策划方案书区块链app开发

越南AI发展现状越南近年来在人工智能(AI)领域的发展迅速,政府、企业和学术界均积极参与。越南政府将AI视为国家数字化转型的核心驱动力,并制定了多项政策支持AI研发和应用。2021年,越南发布了《国家数字化转型计划》&a…

张小明 2026/1/2 14:41:04 网站建设

常德网站seo网站规划的一般步骤

使用 Miniconda 打包自己的 PyTorch 项目依赖 在现代 AI 开发中,你有没有遇到过这样的场景:昨天还能正常训练的模型,今天却因为某个库升级而报错?或者团队成员告诉你“你的代码在我机器上跑不起来”?更糟的是&#xff…

张小明 2026/1/2 14:41:43 网站建设

江西网站建设企业大航母网站建设与服务

抖音无水印下载:告别手动保存的低效循环 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为收藏喜欢的抖音视频而一次次手动复制粘贴吗?😫 每次看到精彩内容都要经历&q…

张小明 2026/1/2 15:03:24 网站建设

做的网站百度上可以搜到吗网页美工设计的要点有

文本处理与分析实用指南 在日常的文本处理和分析工作中,我们常常需要借助各种工具来完成诸如查找同义词、检查语法、统计文本信息等任务。下面将为大家详细介绍一些实用的工具和操作方法。 查找单词的上位词 上位词是指意义比给定单词更宽泛的相关术语。例如,“哺乳动物”…

张小明 2026/1/2 15:42:30 网站建设

网站安全漏洞扫描工具wordpress连接sae数据库出错

Windows 应用数据管理全解析 1. 会话状态管理 在应用开发中,会话状态的保存和恢复至关重要。以下是使用 C# 和 VB 实现会话状态保存和恢复的代码示例: catch (Exception e) {throw new SuspensionManagerException(e); }Public Shared Async Function SaveAsync() As Tas…

张小明 2026/1/2 15:56:42 网站建设