Discord集成Ollama:本地大模型AI助手部署与实战指南

news2026/5/2 9:10:41
1. 项目概述与核心价值最近在折腾AI应用集成发现一个挺有意思的项目叫kevinthedang/discord-ollama。简单来说它就是一个让你能在Discord聊天服务器里直接调用本地部署的Ollama大语言模型的机器人。想象一下你和朋友在Discord频道里聊技术、写代码、或者单纯吹水突然有个问题需要查资料或者需要AI帮忙润色一段文字不用再切出去打开网页或者本地客户端直接在聊天框里一下这个机器人它就能用你本地的模型给你回复。这玩意儿解决的核心痛点就是把AI能力无缝嵌入到日常高频的协作与社交场景里让获取AI帮助变得像在群里问个问题一样自然。这个项目特别适合几类人一是像我这样喜欢在Discord上和技术社区交流、又经常需要AI辅助的开发者二是小型团队或兴趣小组希望有一个私有的、可控的AI助手来协助日常讨论和知识管理三是任何对自托管AI感兴趣想探索如何将大模型能力集成到现有工作流中的极客。它的价值在于“轻量”和“直接”——你不用搭建复杂的Web界面或API网关Ollama负责模型的本地运行与管理而这个Discord机器人则提供了一个现成的、交互友好的前端入口。2. 整体架构与核心思路拆解2.1 技术栈选型与角色分工这个项目的架构非常清晰可以看作是一个经典的“桥梁”或“适配器”模式。我们来拆解一下它的核心组件和各自承担的责任Ollama (模型服务层)这是整个系统的“大脑”。Ollama是一个开源项目专门用于在本地或服务器上轻松运行、管理和服务各种大型语言模型如Llama 2、Mistral、CodeLlama等。它提供了一个简洁的REST API你通过发送HTTP请求就能让指定的模型生成文本。在这个项目中Ollama是后端默默地在你的机器上运行着模型等待前端的调用。Discord Bot (交互与接入层)这是项目的核心代码也就是kevinthedang/discord-ollama仓库里的内容。它是一个用编程语言通常是Node.js/Python写的Discord机器人应用。它的职责是监听Discord事件比如当有人在频道里它或者发送特定命令时它能捕获到这条消息。处理用户输入将Discord消息中的用户提问提取出来可能还会进行一些预处理比如去除提及、处理上下文如果支持的话。调用Ollama API将处理后的用户问题构造成符合Ollama API格式的HTTP请求通常是POST请求到http://localhost:11434/api/generate发送给本地运行的Ollama服务。流式返回与消息发送接收Ollama返回的文本可能是流式的即一个字一个字地生成并实时或分批地将回复内容发送回Discord频道模拟一个“正在输入”的交互体验。Discord 平台 (用户界面层)这是我们最熟悉的界面。用户在这里与机器人进行自然语言对话。Discord提供了稳定的实时消息通道、用户身份系统和权限管理使得机器人集成非常方便。为什么选择这个组合Ollama的优势它极大简化了本地运行大模型的复杂度。相比直接部署原始模型文件Ollama帮你处理了模型下载、版本管理、GPU加速如果可用、以及一个标准的API接口。这让开发者可以专注于应用逻辑而不是底层模型服务的基础设施。Discord的优势它是一个现成的、功能强大的实时通信平台。利用它做前端省去了自己开发聊天界面的巨大工作量。而且Discord的机器人生态成熟文档齐全社区支持好很容易实现消息收发、命令处理、上下文管理等功能。组合的价值这个组合实现了“112”的效果。Ollama提供了强大且私密的AI算力Discord提供了优秀的交互入口和社交场景。这个机器人就是将两者粘合起来的胶水。2.2 核心工作流程解析当你 bot 并提问后背后发生了什么我们来一步步跟踪触发你在Discord频道输入AI助手 请用Python写一个快速排序函数。捕获Discord服务器将这条消息事件推送给已注册并在线运行的discord-ollama机器人程序。解析机器人程序解析消息识别出自己被提及并提取出指令后的文本请用Python写一个快速排序函数作为本次对话的prompt。构造请求机器人程序按照Ollama API的规范构造一个JSON请求体。这个请求体至少包含{ model: codellama:7b, // 指定你本地用Ollama拉取的模型名称 prompt: 请用Python写一个快速排序函数, stream: true // 通常设置为true以支持流式响应提升用户体验 }发送请求机器人程序向http://localhost:11434/api/generate发送一个HTTP POST请求。模型推理Ollama服务接收到请求加载指定的模型如果未加载将prompt输入模型开始生成文本。流式返回由于设置了stream: trueOllama会以Server-Sent Events (SSE) 或类似流式方式逐词token地返回生成的文本。机器人程序会持续读取这个流。消息回送机器人程序每收到一段生成的文本就将其追加到一个缓冲区并可能以“编辑原消息”或“发送新消息片段”的方式将内容实时更新到Discord频道中让你看到AI是“一边想一边说”的。结束当Ollama返回生成结束的标志后机器人程序完成本次消息的发送等待下一次触发。注意一些高级的实现可能还会包含对话历史管理让AI记住上下文、命令系统如/reset清空历史、以及错误处理如Ollama服务未启动时的友好提示。3. 环境准备与详细部署指南3.1 基础环境搭建在让机器人跑起来之前我们需要确保三块基石稳固Ollama服务、Discord机器人应用、以及运行机器人代码的环境。第一步安装并配置Ollama这是AI能力的来源。访问Ollama官网根据你的操作系统Windows/macOS/Linux下载安装包。安装过程通常是一键式的。安装完成后打开终端或命令提示符/PowerShell第一件事是拉取一个模型。对于初学者我推荐从较小的模型开始比如llama2:7b或mistral:7b它们对硬件要求相对友好。# 在终端中执行拉取llama2 7B模型 ollama pull llama2:7b这个过程会下载几个GB的模型文件时间取决于你的网速。下载完成后运行ollama run llama2:7b可以进入交互式命令行测试模型是否正常工作。但我们的目标是让它在后台作为服务运行。通常安装后Ollama会以服务形式自启动你可以通过访问http://localhost:11434来验证API服务是否就绪。一个简单的测试是用curlcurl http://localhost:11434/api/tags如果返回了你已拉取的模型列表JSON说明Ollama服务运行正常。第二步创建Discord机器人应用访问 Discord开发者门户用你的Discord账号登录。点击“New Application”为你的机器人起个名字比如“MyOllamaHelper”。进入应用设置在左侧找到“Bot”选项卡点击“Add Bot”。这里你会看到机器人的令牌Token这是最高机密绝不能泄露。我们稍后会用到它。在同一个“Bot”设置页面你需要勾选一些权限。至少需要消息内容意图Message Content Intent必须开启否则机器人无法读取消息内容。服务器成员意图Server Members Intent如果机器人需要处理用户信息建议开启。在“OAuth2” - “URL Generator”页面选择“bot”作用域并在权限列表中选择“Send Messages”, “Read Message History”, “Mention Everyone”等基本文本权限。生成的邀请链接可以用来将机器人加入你的服务器。第三步准备Python/Node.js环境kevinthedang/discord-ollama项目通常提供多种语言的实现。我们以Python为例。确保你的系统安装了Python 3.8。然后为这个项目创建一个独立的虚拟环境是个好习惯可以避免包依赖冲突。# 创建项目目录并进入 mkdir discord-ollama-bot cd discord-ollama-bot # 创建Python虚拟环境 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate3.2 获取与配置机器人代码现在我们把“胶水”代码拿到手并进行配置。克隆或下载代码访问https://github.com/kevinthedang/discord-ollama你可以直接下载ZIP包或者使用git克隆git clone https://github.com/kevinthedang/discord-ollama.git cd discord-ollama安装依赖查看项目根目录下的requirements.txt(Python) 或package.json(Node.js) 文件安装必要的库。对于Pythonpip install -r requirements.txt核心依赖通常包括discord.py(用于与Discord交互) 和aiohttp/requests(用于调用Ollama API)。关键配置项目通常会有一个配置文件如.env文件或需要你在代码中直接修改的地方。你需要配置两个核心信息Discord Bot Token将你在开发者门户获取的机器人令牌填入配置中指定的位置。例如在.env文件中DISCORD_TOKEN你的_机器人_令牌_字符串Ollama API 地址默认是http://localhost:11434。如果你的Ollama运行在其他机器或端口上需要相应修改。默认模型指定机器人默认使用哪个Ollama模型例如MODEL_NAMEllama2:7b。实操心得配置文件千万不要上传到公开的Git仓库确保.env文件在.gitignore列表中。一个常见的做法是提供一个.env.example文件作为模板里面只包含键名没有真实值。4. 核心功能实现与代码解析4.1 机器人事件监听与消息处理以Python的discord.py库为例机器人的核心是一个继承自discord.Client或使用commands.Bot的类。它的生命线是事件循环。import discord from discord.ext import commands import os from dotenv import load_dotenv import aiohttp import asyncio load_dotenv() # 加载 .env 文件中的环境变量 TOKEN os.getenv(DISCORD_TOKEN) OLLAMA_URL os.getenv(OLLAMA_URL, http://localhost:11434/api/generate) MODEL os.getenv(MODEL_NAME, llama2:7b) # 设置命令前缀和机器人实例 intents discord.Intents.default() intents.message_content True # 必须启用消息内容意图 bot commands.Bot(command_prefix!, intentsintents) bot.event async def on_ready(): print(f{bot.user} 已成功登录) bot.event async def on_message(message): # 防止机器人响应自己的消息避免循环 if message.author bot.user: return # 检查消息是否提及了本机器人 if bot.user in message.mentions: # 提取纯文本内容移除提及部分 prompt message.clean_content.replace(f{bot.user.id}, ).strip() if not prompt: await message.channel.send(f{message.author.mention} 你好请告诉我需要什么帮助。) return # 发送一个“正在思考”的初始反馈 thinking_msg await message.channel.send(f{message.author.mention} 正在思考...) try: # 调用Ollama生成回复 full_response await generate_with_ollama(prompt) # 编辑原消息替换为完整回复 await thinking_msg.edit(contentf{message.author.mention} {full_response}) except Exception as e: await thinking_msg.edit(contentf抱歉出错了: {str(e)}) # 处理其他命令如果有的话确保能继续触发命令处理器 await bot.process_commands(message)这段代码是机器人的心脏。on_ready事件在机器人登录成功后触发。on_message事件监听每一条消息。关键逻辑在于当检测到消息中提及了机器人自己bot.user in message.mentions就提取问题文本然后调用一个异步函数generate_with_ollama去获取AI的回复并最终将回复发送回频道。发送一个“正在思考”的临时消息能极大提升用户体验。4.2 与Ollama API的异步交互实现接下来是连接Ollama的核心函数。这里我们实现一个支持流式响应的版本体验会好很多。async def generate_with_ollama(prompt): 异步调用Ollama API支持流式响应 payload { model: MODEL, prompt: prompt, stream: True, # 启用流式 options: { temperature: 0.7, # 创造性0-1越高越随机 num_predict: 512 # 生成的最大token数 } } full_response async with aiohttp.ClientSession() as session: try: async with session.post(OLLAMA_URL, jsonpayload) as resp: if resp.status ! 200: error_text await resp.text() raise Exception(fOllama API错误 ({resp.status}): {error_text}) # 处理流式响应 async for line in resp.content: line line.decode(utf-8).strip() if line: # Ollama的流式响应每行是一个JSON对象 try: chunk_data json.loads(line) if response in chunk_data: token chunk_data[response] full_response token # 这里可以添加实时更新Discord消息的逻辑 # 但频繁编辑消息可能被Discord限速可以积累一定字符再更新 except json.JSONDecodeError: continue # 忽略非JSON行如心跳包 except aiohttp.ClientConnectorError: raise Exception(无法连接到Ollama服务请检查是否已启动 (默认地址: localhost:11434)) return full_response if full_response else (未收到响应)这个函数做了几件重要的事构造了符合Ollama API格式的请求负载包括模型名、用户提示词和流式开关。使用aiohttp发起异步POST请求这对于需要保持响应性的Discord机器人至关重要。通过async for line in resp.content:逐行读取服务器发送的事件流。解析每一行的JSON提取response字段并拼接到最终回复中。包含了基本的错误处理比如网络连接失败或API返回错误状态码。注意事项流式响应虽然体验好但直接每收到一个token就编辑一次Discord消息会导致API调用过于频繁可能触发Discord的速率限制。一个常见的优化策略是设置一个缓冲区比如每累积50个字符或每0.5秒才更新一次消息内容。这需要在generate_with_ollama函数内部或调用处实现更精细的控制逻辑。4.3 高级功能上下文记忆与对话管理基础的问答机器人只能处理单轮对话。要让AI记住之前的聊天内容实现多轮对话就需要引入上下文管理。Ollama的API本身支持在请求中传递context参数这是一个代表之前对话历史的数字数组。我们需要在机器人中维护一个简单的对话历史缓存。注意Discord是公开频道我们需要为每个用户或每个对话线程独立维护历史避免串台。# 简单的基于用户的历史缓存生产环境建议用数据库 conversation_history {} def build_prompt_with_history(user_id, new_prompt): 构建包含历史记录的prompt history conversation_history.get(user_id, []) # 将历史记录格式化为 Q: A: 的形式 formatted_history for q, a in history: formatted_history fQ: {q}\nA: {a}\n # 将新问题附加到最后 full_prompt formatted_history fQ: {new_prompt}\nA: return full_prompt def update_history(user_id, question, answer): 更新用户对话历史并限制长度避免超出模型上下文窗口 if user_id not in conversation_history: conversation_history[user_id] [] history conversation_history[user_id] history.append((question, answer)) # 限制历史记录条数例如只保留最近5轮对话 max_history 5 if len(history) max_history: conversation_history[user_id] history[-max_history:] # 在 on_message 处理中修改 async def on_message(message): # ... 前面的检查逻辑不变 ... if bot.user in message.mentions: prompt message.clean_content.replace(f{bot.user.id}, ).strip() user_id message.author.id # 构建带历史的prompt prompt_with_context build_prompt_with_history(user_id, prompt) thinking_msg await message.channel.send(f{message.author.mention} 正在思考...) try: full_response await generate_with_ollama(prompt_with_context) await thinking_msg.edit(contentf{message.author.mention} {full_response}) # 更新历史记录 update_history(user_id, prompt, full_response) except Exception as e: await thinking_msg.edit(contentf抱歉出错了: {str(e)}) # ...此外你还需要添加一个命令来清空某个用户的对话历史例如!resetbot.command(namereset) async def reset_history(ctx): user_id ctx.author.id if user_id in conversation_history: del conversation_history[user_id] await ctx.send(f{ctx.author.mention} 对话历史已清空。) else: await ctx.send(f{ctx.author.mention} 你还没有对话历史呢。)实操心得上下文管理是提升体验的关键但也带来了复杂性。内存缓存简单但不持久机器人重启后历史就消失了。对于重要用途可以考虑集成轻量级数据库如SQLite。更重要的是要警惕上下文长度。模型有token数限制上下文窗口历史记录太长会导致最早的对话被“遗忘”或者直接使API调用失败。因此像上面代码一样限制历史轮数或者计算总token数并进行截断是必要的工程细节。5. 部署、运行与优化实践5.1 本地运行与进程管理配置好一切后在项目目录下运行机器人# 确保虚拟环境已激活且已在项目目录下 python bot.py如果一切正常终端会显示机器人登录成功的信息。现在去Discord你邀请机器人的服务器它并提问吧但让一个命令行窗口一直开着并不靠谱。我们需要进程管理。在Linux/macOS上systemd或supervisor是标准选择。在Windows上可以将其注册为服务或者使用pm2一个Node.js进程管理器但也支持管理Python脚本。以pm2为例跨平台# 全局安装pm2 npm install -g pm2 # 用pm2启动你的Python机器人脚本 pm2 start bot.py --name discord-ollama-bot --interpreter python3 # 设置开机自启 pm2 startup pm2 save这样机器人就在后台稳定运行了即使终端关闭也不会停止。pm2 logs discord-ollama-bot可以查看日志pm2 restart discord-ollama-bot可以重启。5.2 性能调优与资源管理本地运行大模型是资源密集型的尤其是GPU内存。以下是一些优化点模型选择不是所有任务都需要最大的模型。codellama:7b对于代码任务很棒mistral:7b在通用对话上表现均衡而llama2:7b是很好的起点。如果你的内存紧张比如只有8GB RAM可以尝试更小的模型如tinyllama或phi。使用ollama list查看已下载模型ollama run model-name测试效果。Ollama参数调优在调用API时options里的参数影响很大。temperature(默认0.8)控制随机性。越低如0.1输出越确定、保守越高如0.9越有创造性但也可能胡言乱语。对于技术问答建议0.4-0.7。num_predict(默认128)生成的最大token数。设得太低回答可能不完整太高又浪费资源。根据对话类型调整一般256-512够用。top_p,top_k更高级的采样参数用于控制输出词汇的选择范围通常保持默认即可除非你有特定需求。机器人并发处理如果多个用户同时机器人你的脚本需要能处理并发请求。discord.py和aiohttp都是异步的基础架构能处理一定并发。但关键瓶颈在Ollama——它默认可能一次只处理一个生成请求。你需要评估团队使用强度。如果并发需求高可以考虑搭建Ollama集群或者使用负载均衡将请求分发到多个Ollama实例这属于更高级的部署。网络与安全默认localhost:11434只在本地可访问。如果你想让其他局域网内的机器也能通过这个机器人使用Ollama需要修改Ollama的启动配置让其监听0.0.0.0并设置防火墙规则。但请注意Ollama API本身没有身份验证暴露在公网非常危险最佳实践是让Ollama和机器人运行在同一台机器或受信任的内网中。5.3 功能扩展思路基础问答机器人只是起点你可以基于此扩展很多有趣的功能文件处理让机器人能读取用户上传的文本文件、代码片段或图片通过OCR并将其内容作为prompt的一部分发送给Ollama进行分析或总结。频道特定角色为机器人设置不同的“人格”或系统提示词system prompt。例如在一个编程频道系统提示词可以是“你是一个乐于助人的编程专家”在一个游戏频道可以是“你是一个幽默的游戏向导”。这可以通过Discord的频道ID来映射不同的提示词前缀实现。命令系统除了提及可以增加斜杠命令Slash Commands。例如/ask [问题]直接提问/model [模型名]切换当前频道使用的Ollama模型/summarize总结最近N条聊天记录等。与外部工具结合让机器人不仅能聊天还能“做事”。例如结合搜索引擎API实现联网搜索结合代码执行沙箱谨慎运行简单的代码片段并返回结果。6. 常见问题排查与实战经验在实际部署和运行中你几乎一定会遇到下面这些问题。这里是我踩过坑后总结的排查清单。6.1 连接与启动问题问题1机器人登录失败提示“Invalid Token”或“401 Unauthorized”。原因Discord机器人令牌填写错误或令牌对应的机器人应用未正确设置。排查检查.env文件或代码中的DISCORD_TOKEN变量确保没有多余的空格或换行。最好直接从开发者门户的Bot页面点击“Reset Token”获取新令牌并重新复制。确认在开发者门户的“Bot”设置页面机器人已经成功创建有用户名和头像。确认你使用的邀请链接拥有足够的权限至少包含“Send Messages”和“Read Message History”。问题2机器人能登录但不响应提及。原因A消息内容意图Message Content Intent未开启。解决回到Discord开发者门户你的应用 - Bot - Privileged Gateway Intents确保“MESSAGE CONTENT INTENT”是开启状态Enabled。修改后需要保存并可能需要在服务器重新邀请机器人。原因B代码中的intents设置不正确。解决确保在初始化机器人时像前面代码示例一样设置了intents.message_content True。问题3机器人提示“无法连接到Ollama服务”。原因AOllama服务没有运行。解决在终端运行ollama serve启动服务或检查系统服务如通过systemctl status ollama在Linux上。原因BOllama服务地址或端口配置错误。解决检查代码或.env文件中的OLLAMA_URL。默认是http://localhost:11434/api/generate。如果你改了Ollama的默认端口这里也要同步修改。原因C防火墙或网络策略阻止了连接。解决如果机器人和Ollama不在同一台机器确保端口默认11434在防火墙中是开放的。6.2 模型与响应问题问题4机器人回复“模型不存在”或类似错误。原因代码中配置的MODEL_NAME与你本地Ollama拉取的模型名称不匹配。解决在终端运行ollama list查看你本地已有的模型全称。比如你拉取的是llama2:7b配置就应该是这个而不是llama2或llama-2-7b。模型名严格区分大小写和标签。问题5AI的回复质量很差答非所问或胡言乱语。原因A模型太小或不适合当前任务。解决尝试更换模型。对于通用对话mistral:7b通常比同尺寸的llama2:7b表现更好。对于代码codellama:7b是专门训练的。可以多试几个。原因Btemperature参数过高。解决在调用Ollama API的options中将temperature调低比如从0.8调到0.4让输出更确定、更聚焦。原因CPrompt构建不佳。解决尝试在用户问题前添加更明确的指令。例如将原始的prompt改为“你是一个专业的软件工程师。请用Python回答以下问题” prompt。系统提示词system prompt能显著引导模型行为。问题6响应速度非常慢或者生成到一半就断了。原因A硬件资源不足特别是GPU内存或系统内存。解决用nvidia-smi(NVIDIA GPU) 或任务管理器监控资源占用。考虑换用更小的模型或者在Ollama运行时通过环境变量限制GPU层数如OLLAMA_NUM_GPU10对于20层模型只让10层跑在GPU上。原因Bnum_predict参数设置过大。解决限制单次生成的最大token数。对于对话512通常足够。如果需要生成长文可以分多次进行。原因C网络延迟或Discord API限速。解决流式响应时如果频繁编辑消息可能触发达Discord的速率限制每频道每5秒50次编辑。实现消息更新缓冲如累积一定字符或固定时间间隔再更新。6.3 运维与稳定性问题问题7机器人运行一段时间后崩溃或无响应。原因内存泄漏、未处理的异常、或Ollama服务本身不稳定。解决使用进程管理器如前面提到的pm2它会在进程崩溃后自动重启。加强错误处理在代码中用try...except包裹所有可能出错的网络调用和逻辑记录详细日志并给用户友好的错误提示避免一个异常导致整个机器人下线。监控Ollama可以写一个简单的健康检查定期调用Ollama的/api/tags接口如果失败则尝试重启Ollama服务这需要额外的脚本。问题8对话历史混乱或占用内存越来越大。原因使用内存字典存储历史且没有做清理。解决限制历史长度如前文代码所示每个用户只保留最近N轮对话。定期清理可以设置一个定时任务清理超过一定时间如1小时未活动的用户历史。持久化存储对于需要长期记忆的场景将历史存入SQLite或Redis等轻量级数据库。部署这样一个融合了Discord和本地大模型的机器人就像搭建了一个私有的、可高度定制的AI助手前台。从环境准备、代码解析到问题排查整个过程涉及了现代AI应用开发的多个层面服务集成、异步编程、资源管理和用户体验优化。最关键的是它提供了一个极佳的试验场让你可以低成本地探索大模型在实际交互场景中的能力和局限并基于此迭代出真正有用的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2574500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…