自已做网站自媒体营销方式有哪些
2026/5/25 16:59:50 网站建设 项目流程
自已做网站,自媒体营销方式有哪些,做竞品分析去哪个网站,淘宝客网站搭建在人工智能快速发展的今天#xff0c;智能聊天机器人已经不仅仅是问答工具#xff0c;它们正在向多轮对话、知识库检索和工具调用的方向升级。本篇文章将系统讲解如何搭建一个完整的智能聊天机器人#xff0c;涵盖多轮上下文记忆、RAG检索、以及计算器工具调用#xff0c;并…在人工智能快速发展的今天智能聊天机器人已经不仅仅是问答工具它们正在向多轮对话、知识库检索和工具调用的方向升级。本篇文章将系统讲解如何搭建一个完整的智能聊天机器人涵盖多轮上下文记忆、RAG检索、以及计算器工具调用并提供可直接运行的示例代码。1. 核心架构设计理念一个完整的智能聊天机器人需要解决三个核心问题1多轮对话上下文记忆聊天机器人最基本的能力是理解上下文。我们通过State.history来记录对话历史每轮生成回答前将历史内容拼接进 prompt让 LLM 知道前文发生了什么。2RAG 文档检索机制智能机器人必须具备知识库能力以便回答专业问题或动态信息查询。我们引入RAGRetrieval-Augmented Generation流程嵌入模型将文本转成向量向量数据库使用 FAISS / Chroma 存储向量检索节点根据用户问题匹配相关文档LLM增强将检索结果传入 LLM 生成最终回答3工具调用计算器智能机器人不仅回答问题还能进行计算。我们设计了一个自动识别数学表达式并调用计算器的流程检测用户输入是否为数学表达式调用安全计算器获取结果将计算结果传给 LLM 生成最终回答2. 定义对话状态State我们用TypedDict定义状态对象记录必要信息fromtypingimportTypedDict,ListclassState(TypedDict):question:str# 当前用户问题answer:str# 最终回答session_id:str# 会话 IDhistory:List[str]# 对话历史retrieved_docs:str# RAG 检索结果文本tool_result:str# 工具计算结果通过State每轮对话的信息都能被记录并传递给下一个节点。3. 嵌入与向量检索3.1 文本向量化Embedding这里我们使用硅基流动SiliconFlow的中文大模型bge-large-zh-v1.5importrequests EMBED_URLhttps://api.siliconflow.cn/v1/embeddingsEMBED_MODELBAAI/bge-large-zh-v1.5defembed_text(text:str):payload{input:text,model:EMBED_MODEL}headers{Authorization:fBearer{API_KEY}}resrequests.post(EMBED_URL,jsonpayload,headersheaders)returnres.json()[data][0][embedding]3.2 构建向量库使用 FAISS 存储和检索向量importfaissimportnumpyasnpclassVectorStore:def__init__(self):self.indexfaiss.IndexFlatL2(1024)# bge-zh 大模型维度1024self.texts[]defadd(self,text:str):vecnp.array([embed_text(text)],dtypefloat32)self.index.add(vec)self.texts.append(text)defsearch(self,query:str,topk3):qvecnp.array([embed_text(query)],dtypefloat32)D,Iself.index.search(qvec,topk)results[self.texts[i]foriinI[0]]return\n.join(results)初始化向量库vsVectorStore()vs.add(太阳能发电的基本原理是…)vs.add(风电机组的主要部件包括…)vs.add(深度学习模型训练需要…)4. 安全计算器工具defcalculator(expression:str)-str:importreifnotre.match(r^[0-9\-*/(). ]$,expression):return表达式不合法try:resulteval(expression)returnstr(result)except:return计算失败注意这里只允许基本运算符防止任意代码执行风险。5. LangGraph 工作流节点设计我们把对话流程拆成三个节点retrieve知识库检索tool计算器工具answer整合历史、RAG 和工具结果生成最终回答5.1 检索节点retrievedefretrieve(state:State):querystate[question]docsvs.search(query)state[retrieved_docs]docsreturn{retrieved_docs:docs}5.2 工具节点toolimportredeftool(state:State):qstate[question]math_patternr^[0-9\-*/(). ]$ifre.match(math_pattern,q):resultcalculator(q)state[tool_result]resultreturn{tool_result:result}return{tool_result:}5.3 最终回答节点answer结合历史对话、RAG 文档和工具结果MAX_TURNS10deftrim_history(history):returnhistory[-MAX_TURNS*2:]iflen(history)MAX_TURNS*2elsehistorydefanswer(state:State):historytrim_history(state.get(history,[]))ragstate.get(retrieved_docs,)tool_resultstate.get(tool_result,)prompt你是一个智能助手请基于对话历史、知识库检索结果和工具结果回答。\n\nifhistory:prompt【对话历史】\n\n.join(history)\n\nifrag:prompt【检索到的相关文档】\nrag\n\niftool_result:prompt【计算器结果】\ntool_result\n\npromptf用户问题{state[question]}\n\n请给出最终回答anscall_siliconflow_llm(prompt)history.append(f用户:{state[question]})history.append(f助手:{ans})return{answer:ans,history:history}6. LangGraph 构建fromlanggraph.graphimportStateGraph graphStateGraph(State)graph.add_node(retrieve,retrieve)graph.add_node(tool,tool)graph.add_node(answer,answer)graph.set_entry_point(retrieve)graph.add_edge(retrieve,tool)graph.add_edge(tool,answer)appgraph.compile()这样就形成了RAG 工具调用 多轮对话的完整工作流。7. 多轮对话示例state{question:太阳能发电的原理是什么,answer:,session_id:user001,history:[],retrieved_docs:,tool_result:}resapp.invoke(state)print(机器人,res[answer])state[question]那它的效率一般是多少resapp.invoke(state)print(机器人,res[answer])state[question]200*(10.05)^3resapp.invoke(state)print(机器人,res[answer])效果解析第一问通过 RAG 检索文档生成回答第二问保留历史上下文实现多轮连续对话第三问自动识别数学表达式 → 调用计算器 → 结合 LLM 给出最终答案8. 总结与扩展通过以上设计我们实现了一个功能丰富的智能聊天机器人多轮上下文记忆保证连续对话的逻辑性RAG 文档检索增强知识库问答能力自动工具调用支持数学计算或其他工具扩展未来可以进一步优化历史摘要对话历史太长时生成摘要降低 token 消耗多工具扩展除了计算器还可以加入日历、天气查询等 API多模态支持处理文本、图像、音频等输入通过这样的架构聊天机器人从单纯的问答系统进化为可检索、可计算、可持续学习的智能助手。

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

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

立即咨询