Claude API开发实战:从模型选型到工具调用,一站式资源与代码详解

news2026/5/17 3:22:02
1. 项目概述与核心价值最近在折腾AI应用开发的朋友估计没少为Claude API的调用和管理头疼。官方文档虽然详尽但当你需要快速查找某个特定端点、对比不同模型参数或者只是想找个现成的代码片段时那种在多个页面间跳转、反复搜索的感觉确实有点“JSONbored”——面对海量的JSON响应和API文档感到既疲惫又无聊。这正是“JSONbored/claudepro-directory”这个项目诞生的背景。它不是一个官方工具而是一个由社区驱动的、针对Anthropic Claude API特别是Claude Pro及更高版本模型的“增强型速查手册”和开发资源目录。简单来说这个项目把散落在各处的Claude API关键信息——包括但不限于所有可用的模型列表及其详细规格、API端点大全、请求/响应参数详解、最佳实践代码示例、以及常见的错误码和解决方案——进行了系统化的梳理、验证和聚合。它的目标很明确让开发者无论是刚接触Claude API的新手还是正在构建复杂生产级应用的老手都能在一个地方高效地找到所需信息从而把时间花在创造性的应用逻辑上而不是浪费在查找文档和调试基础连接问题上。我自己在集成Claude 3系列模型到内部知识库系统时就深切感受到有一个集中、准确且附带实战示例的目录是多么省心。2. 项目架构与内容深度解析2.1 核心模块构成这个目录并非简单的链接合集其结构经过精心设计主要包含以下几大模块每个模块都力求解决开发中的具体痛点模型规格中心这是最常用的部分。它不仅仅列出模型名称如claude-3-opus-20240229而是提供了多维度的对比信息例如上下文窗口明确标注各模型的token限制如200K这对于规划会话历史和文件上传至关重要。功能支持清晰指出该模型是否支持图像输入vision、函数调用tool use、JSON强制输出模式等。这在设计多模态应用或需要结构化输出的场景下是决策关键。性能与成本会提供输入/输出token的大致定价参考以及模型在速度与智力上的定性定位如Opus偏重深度分析Haiku追求极速响应帮助你在预算和效果间权衡。API端点详解将/v1/messages、/v1/completions如果支持等核心端点以及可能存在的测试版或专用端点如特定于文件处理的端点独立成章。对每个端点会拆解其HTTP方法与URL最基础但不容出错。请求体Request Body结构以清晰的JSON Schema形式展示必填和可选字段并对每个字段给出通俗解释和示例值。例如max_tokens字段会说明其与模型上下文窗口的关系temperature会给出不同创意需求下的建议值范围。响应体Response Body结构解析返回的JSON标注出如id、content、stop_reason、usage等关键字段的含义让你拿到响应后能快速提取所需信息。代码实验室Code Lab这是项目的精华所在超越了文档进入了实战。它提供了多种编程语言Python、JavaScript、cURL等和不同场景下的完整、可运行的代码示例。基础对话从最简单的文本问答开始。多轮对话管理展示如何维护messages数组来实现有状态的会话。文件处理演示上传PDF、TXT、图像等文件并进行问答的完整流程包括如何准备文件、设置正确的MIME类型。工具调用Function Calling给出定义工具、解析模型建议、执行函数并回传结果的闭环示例这是构建智能代理的核心。流式响应Streaming展示如何处理SSEServer-Sent Events流实现打字机效果并处理中间可能出现的content_block_delta等事件。错误词典与排障指南整理了常见的API错误码如rate_limit_exceeded、invalid_request_error、context_length_exceeded不仅解释其含义更重要的是提供具体的排查步骤和解决建议。例如遇到context_length_exceeded时指南会建议你检查输入文本系统提示对话历史的总长度并给出估算token的简易方法或工具推荐。2.2 设计理念与优势这个目录的设计遵循了几个关键原则使其区别于单纯的文档镜像以开发者体验为中心信息组织方式完全按照开发者的工作流来设计。当你需要选型时看模型中心当你需要编码时直接拷贝代码实验室的片段并修改当你出错时查阅错误词典。路径非常直观。验证驱动的内容更新目录中的代码示例和参数说明并非从文档中机械复制而是经过实际测试验证的。维护者会随着Anthropic API的更新例如新模型发布、参数变更及时测试并更新目录确保你看到的内容是“活”的、可用的。场景化而非功能化它不满足于解释“这个参数是什么”而是告诉你“在什么场景下应该怎么设置这个参数”。例如在“构建一个客服机器人”的场景下它会推荐使用claude-3-sonnet模型以平衡成本与性能并建议将temperature设置为较低值如0.2以保证回答的稳定性同时提供处理用户可能上传票据图片的代码思路。社区知识沉淀项目通常托管在GitHub等平台这意味着开发者可以提交Issue反馈问题或通过Pull Request贡献自己实践中总结的最佳案例、遇到的边缘情况解决方案。这使得目录能够汇聚集体智慧内容越来越丰富和实用。3. 核心功能实操与代码详解3.1 环境准备与基础配置在开始使用目录中的代码前你需要完成一些基础准备。假设我们使用Python环境。首先自然是安装官方SDK。Anthropic提供了维护良好的Python包。pip install anthropic接下来获取并安全地管理你的API密钥。绝对不要将密钥硬编码在代码中或上传到版本控制系统如Git。import anthropic import os # 最佳实践从环境变量中读取API密钥 client anthropic.Anthropic( api_keyos.environ.get(ANTHROPIC_API_KEY) # 你的密钥应设置在环境变量ANTHROPIC_API_KEY中 )提示在本地开发时可以在shell配置文件如.bashrc或.zshrc中添加export ANTHROPIC_API_KEYyour-api-key-here或使用dotenv等库从.env文件加载。在生产环境中应使用云服务商提供的密钥管理服务如AWS Secrets Manager, GCP Secret Manager。3.2 执行一次标准的对话调用这是最核心的操作。我们来看一个从目录中提取并增强的示例它包含了良好的实践和注释。def basic_chat_completion(): try: message client.messages.create( modelclaude-3-sonnet-20240229, # 1. 指定模型 max_tokens1024, # 2. 控制本次生成的最大token数 temperature0.7, # 3. 控制创造性0.0更确定1.0更随机 system你是一个乐于助人且准确的助手。, # 4. 系统提示设定助手的行为和角色 messages[ { role: user, content: 请用简单的语言解释一下量子计算的基本原理。 } ] ) # 5. 访问响应内容 # 响应可能包含多个ContentBlock这里取第一个文本块的内容 for block in message.content: if block.type text: print(block.text) break # 6. 查看使用量用于监控成本和调试 print(f\n[使用统计] 输入Token: {message.usage.input_tokens}, 输出Token: {message.usage.output_tokens}) except anthropic.APIConnectionError as e: print(网络连接失败: , e.__cause__) except anthropic.RateLimitError as e: print(触发速率限制请稍后重试: , e) except anthropic.APIStatusError as e: print(fAPI返回错误状态码: {e.status_code}, 信息: {e.response.text}) except Exception as e: print(发生未知错误: , e)代码关键点解析模型选择这里用了claude-3-sonnet它在能力、速度和成本间取得了很好的平衡适合通用任务。对于需要最高推理能力的任务可换用claude-3-opus对于极速、低成本的任务claude-3-haiku是首选。max_tokens这个参数限制的是模型本次生成的token数量并非整个会话的总容量。务必将其设置为一个合理的值既要满足回答需求又要避免因设置过大而意外产生高额费用。模型的总体上下文窗口如200K限制的是你传入的messages历史总长度加上max_tokens。temperature这是控制输出随机性的关键。对于事实性问答、代码生成建议较低值0.1-0.3对于创意写作、头脑风暴可以调高0.7-0.9。temperature0会使输出完全确定但可能略显呆板。system提示词这是塑造AI行为的有力工具。好的系统提示应该清晰、具体。例如不只是“你是一个助手”而是“你是一位资深软件工程师擅长用Python和JavaScript解决问题回答应简洁并附带示例代码。”响应处理响应中的content是一个列表因为Claude支持输出多种类型的块如text、tool_use。我们通常遍历并筛选出text类型的内容。错误处理完善的错误处理是生产级应用的标志。这里捕获了连接错误、速率限制错误和API状态错误便于针对性地处理。3.3 实现多轮对话与上下文管理Claude API是无状态的维护对话历史上下文是开发者的责任。目录中会展示如何有效地管理messages数组。class ConversationManager: def __init__(self, system_prompt): self.messages [] if system_prompt: # 注意系统提示不是放在messages数组里而是单独的system参数。 # 这里我们初始化一个类变量来保存它。 self.system_prompt system_prompt else: self.system_prompt You are a helpful assistant. def add_user_message(self, content): 添加用户消息到历史 self.messages.append({role: user, content: content}) # 可选实施上下文窗口修剪逻辑防止历史过长 self._trim_context_if_needed() def add_assistant_message(self, content): 添加助手消息到历史 self.messages.append({role: assistant, content: content}) def get_response(self, client, modelclaude-3-sonnet-20240229, max_tokens500): 基于当前历史获取新的助手回复 try: response client.messages.create( modelmodel, max_tokensmax_tokens, temperature0.7, systemself.system_prompt, # 每次调用都传入系统提示 messagesself.messages # 传入完整的对话历史 ) assistant_reply for block in response.content: if block.type text: assistant_reply block.text break # 将助手的回复也加入历史以维持对话连贯性 if assistant_reply: self.add_assistant_message(assistant_reply) return assistant_reply, response.usage except anthropic.APIStatusError as e: if context_length_exceeded in str(e): print(上下文长度超限正在尝试修剪最早的历史消息...) # 简单策略移除最早的一对用户/助手消息 if len(self.messages) 2: self.messages self.messages[2:] return self.get_response(client, model, max_tokens) # 重试 else: raise e def _trim_context_if_needed(self, max_entries20): 一个简单的修剪策略限制历史消息条数 # 更复杂的策略可以基于token数来修剪 if len(self.messages) max_entries * 2: # 假设用户和助手消息成对出现 # 保留最近的一些消息移除早期的 self.messages self.messages[-(max_entries*2):] # 使用示例 manager ConversationManager(system_prompt你是一个知识渊博的历史学家。) manager.add_user_message(拿破仑是哪一年加冕称帝的) reply, usage manager.get_response(client) print(f助手: {reply}) print(f本轮消耗: {usage}) manager.add_user_message(当时欧洲的主要对手是谁) reply, usage manager.get_response(client) # 这次调用包含了上一轮的历史 print(f助手: {reply})实操心得上下文管理是成本核心每次API调用你发送的整个messages历史都会被计算输入token并计费。因此实现一个智能的上下文修剪策略至关重要。上述示例是简单的按条数修剪生产环境中可能需要根据token数可以用tiktoken库估算进行更精细的修剪或者只保留最重要的摘要即“记忆摘要”技术。系统提示的持久性系统提示需要每次调用时都传入它不会自动保存在messages历史中。ConversationManager将其作为属性保存确保了对话行为的一致性。错误处理与重试在get_response方法中我们特别捕获了上下文超限错误并尝试修剪历史后重试。这是一个非常实用的容错机制。3.4 处理文件上传与多模态输入Claude 3的视觉能力是其一大亮点。目录会详细说明支持的文件格式图像PNG, JPEG, GIF, WebP文档PDF, TXT, CSV, PPTX, DOCX等和上传流程。import base64 from pathlib import Path def analyze_image_with_claude(image_path, question): 上传本地图片并向Claude提问。 # 1. 读取并编码图片文件 image_data Path(image_path).read_bytes() base64_image base64.b64encode(image_data).decode(utf-8) # 2. 根据文件后缀判断MIME类型简化版生产环境需更完善 mime_type image/jpeg if image_path.lower().endswith(.png): mime_type image/png elif image_path.lower().endswith(.gif): mime_type image/gif elif image_path.lower().endswith(.webp): mime_type image/webp # 3. 构建包含图片内容的message message client.messages.create( modelclaude-3-sonnet-20240229, max_tokens1024, messages[ { role: user, content: [ { type: image, source: { type: base64, media_type: mime_type, data: base64_image } }, { type: text, text: question # 与图片相关的问题 } ] } ] ) for block in message.content: if block.type text: return block.text return 未收到文本回复。 # 使用示例 # answer analyze_image_with_claude(screenshot.png, 请总结这张图表的主要趋势。) # print(answer)注意事项文件大小限制API对单个文件有大小限制通常为20MB。上传前需要检查文件尺寸过大的文件需要进行压缩或分片处理。MIME类型必须准确错误的media_type会导致API解析失败。对于文档文件如PDFMIME类型可能是application/pdf。成本考量图像和文档文件会被编码成大量token。一张高分辨率图片可能消耗数千甚至上万个输入token。在上传前评估是否真的需要原图或者是否可以通过提取关键文本信息来降低成本。隐私与安全切勿通过API上传包含个人敏感信息、商业机密或任何不当内容的文件。数据会发送至Anthropic的服务器进行处理。3.5 集成工具调用函数调用功能工具调用允许Claude请求执行你定义的函数并将结果返回给它从而实现与外部系统/API的交互。这是构建智能代理Agent的基础。import json from datetime import datetime # 1. 定义你希望Claude能使用的工具函数 tools [ { name: get_current_weather, description: 获取指定城市的当前天气信息。, input_schema: { type: object, properties: { location: { type: string, description: 城市名称例如北京 San Francisco }, unit: { type: string, enum: [celsius, fahrenheit], description: 温度单位, default: celsius } }, required: [location] } }, { name: get_current_time, description: 获取当前的日期和时间。, input_schema: { type: object, properties: { timezone: { type: string, description: 时区例如Asia/Shanghai, UTC, default: UTC } }, required: [] } } ] # 2. 模拟的工具实现函数 def execute_tool(tool_name, tool_input): 根据工具名称和输入参数执行相应的工具。 if tool_name get_current_weather: # 这里模拟一个天气API调用 location tool_input.get(location, 未知) unit tool_input.get(unit, celsius) # 模拟返回数据 return json.dumps({ location: location, temperature: 22 if unit celsius else 72, unit: unit, condition: 晴朗, humidity: 65 }) elif tool_name get_current_time: timezone tool_input.get(timezone, UTC) # 简化处理实际应用中应使用pytz等库 now datetime.utcnow() return json.dumps({ timezone: timezone, current_time: now.isoformat() Z, description: fThe current time in {timezone} (模拟) }) else: return json.dumps({error: f未知工具: {tool_name}}) # 3. 主对话循环支持工具调用 def chat_with_tools(user_query, conversation_history[]): messages conversation_history.copy() messages.append({role: user, content: user_query}) while True: response client.messages.create( modelclaude-3-sonnet-20240229, max_tokens1024, messagesmessages, toolstools, # 关键将工具定义传给Claude tool_choice{type: auto} # 让Claude自动决定是否使用工具 ) message response.content[0] if message.type text: # 普通文本回复对话结束 messages.append({role: assistant, content: message.text}) return message.text, messages elif message.type tool_use: # Claude决定使用工具 tool_name message.name tool_input message.input print(f[Agent] 决定使用工具: {tool_name}, 参数: {tool_input}) # 执行工具 tool_result execute_tool(tool_name, tool_input) print(f[Tool] 执行结果: {tool_result}) # 将工具执行结果以特定格式追加到消息历史供Claude继续分析 messages.append({ role: assistant, content: [message] # 包含Claude的工具调用请求 }) messages.append({ role: user, content: [ { type: tool_result, tool_use_id: message.id, # 必须与tool_use消息的id对应 content: tool_result } ] }) # 循环继续Claude将基于工具结果生成最终回复 else: # 处理其他可能的类型 break return 对话异常结束, messages # 使用示例 history [] reply, new_history chat_with_tools(上海现在的天气怎么样, history) print(f最终回复: {reply}) print(---) reply2, new_history2 chat_with_tools(现在UTC时间呢, new_history) print(f最终回复: {reply2})核心机制解析工具定义tools列表中的每个字典都定义了一个工具包括名称、描述和输入参数的JSON Schema。清晰的描述能帮助Claude更好地理解何时调用该工具。tool_choice参数设置为{type: auto}让模型自主决定是否需要调用工具。你也可以强制它使用某个特定工具{type: tool, name: xxx}或禁止使用工具{type: none}。交互循环当Claude认为需要调用工具时它会返回一个type为tool_use的ContentBlock。你的代码需要解析出工具名和输入参数。调用本地或远程的对应函数来执行。将执行结果包装成tool_result类型的消息并关键地设置tool_use_id与之前收到的tool_use消息的id相匹配然后追加到messages历史中。再次调用APIClaude会基于工具返回的结果生成最终的文本回复。错误处理在实际应用中工具执行可能会失败。你应该在tool_result中包含错误信息Claude能够理解并尝试处理或向用户道歉。4. 高级应用、优化与排坑指南4.1 流式响应Streaming处理对于需要长时间生成或希望实现“打字机”效果的应用流式响应是必备功能。它允许你逐块接收输出而不是等待整个响应完成。def stream_chat_response(prompt): stream client.messages.stream( modelclaude-3-haiku-20240307, # 流式响应通常搭配响应速度快的模型 max_tokens500, temperature0.7, messages[{role: user, content: prompt}] ) collected_text with stream as s: for event in s: # 事件类型有多种我们主要关心文本增量 if event.type content_block_delta: # event.delta 包含文本增量 text_delta event.delta.text print(text_delta, end, flushTrue) # 逐块打印实现打字机效果 collected_text text_delta elif event.type message_stop: # 流式传输结束 print(\n\n[Stream finished]) # 此时可以获取完整消息和使用量 final_message s.get_final_message() print(f总使用量: {final_message.usage}) return collected_text # 使用示例 # stream_chat_response(给我讲一个关于太空探险的短故事。)注意事项连接保持流式响应需要保持HTTP连接开放确保你的网络环境和服务器配置如超时设置支持长连接。错误处理流式传输过程中也可能发生错误如网络中断。需要在代码中妥善处理异常并考虑重试逻辑。最终消息流式接口stream返回的是一个事件流。要获取完整的消息对象包含id、usage等需要在流结束后调用get_final_message()方法。4.2 性能优化与成本控制策略大规模使用API时性能和成本是需要精心管理的两个维度。1. 异步调用提升吞吐量如果你的应用需要同时处理多个独立的用户请求使用异步IO可以极大提升效率。import asyncio import aiohttp from anthropic import AsyncAnthropic async def async_chat_task(prompt, api_key): async with AsyncAnthropic(api_keyapi_key) as async_client: try: response await async_client.messages.create( modelclaude-3-haiku-20240307, # 对并发任务常选用更快更便宜的模型 max_tokens300, messages[{role: user, content: prompt}] ) return response.content[0].text except Exception as e: return fError: {e} async def batch_process_prompts(prompts_list): api_key os.environ.get(ANTHROPIC_API_KEY) tasks [async_chat_task(prompt, api_key) for prompt in prompts_list] results await asyncio.gather(*tasks, return_exceptionsTrue) return results # 使用示例 # prompts [问题1, 问题2, 问题3...] # results asyncio.run(batch_process_prompts(prompts))2. 精细化成本控制监控使用量每次API调用的响应中都包含usage字段输入/输出token数。务必记录这些数据用于分析和预算控制。设置预算与告警在Anthropic控制台或通过自建监控系统为API密钥设置月度预算和用量告警阈值。模型选型策略Haiku用于简单分类、摘要、路由、高风险内容的初步筛查。速度极快成本最低。Sonnet通用主力。用于复杂的问答、代码生成、数据分析、多轮对话。性价比最高。Opus用于最复杂的推理任务如高级策略分析、研究、创意构思。效果最好成本最高。优化提示词清晰、简洁的提示词包括系统提示和用户消息能减少不必要的token消耗并可能获得更准确的回答避免多次调用。实施上下文修剪如前所述积极管理对话历史长度是控制输入token成本的最有效手段。4.3 常见问题与故障排查实录在实际开发中你几乎一定会遇到下面这些问题。这里是我和社区同行们踩过坑后总结的排查清单。问题现象可能原因排查步骤与解决方案APIConnectionError或超时1. 网络连接不稳定或中断。2. 本地防火墙或代理设置阻止了连接。3. Anthropic API服务临时故障。1. 检查本地网络尝试ping或curl一个公共API测试连通性。2. 检查代码中是否错误配置了代理。确保ANTHROPIC_API_KEY正确设置。3. 访问Anthropic官方状态页面查看服务状态。稍后重试。RateLimitError(429错误)1. 免费 tier 或当前套餐的 RPM每分钟请求数/TPM每分钟token数限制被触发。2. 突发的大量请求。1.最重要的措施实现指数退避重试。捕获此错误后等待一段时间如2秒、4秒、8秒...再重试。2. 在控制台查看用量仪表盘了解限制阈值。3. 优化代码合并请求或降低调用频率。考虑对非实时任务进行队列化处理。AuthenticationError(401错误)API密钥无效、过期或未正确传递。1. 确认密钥字符串完全正确无多余空格。2. 确认密钥有足够的权限例如是否只绑定了特定模型。3. 确保密钥是通过api_key参数或ANTHROPIC_API_KEY环境变量传递的而不是放在请求头错误的位置。InvalidRequestError(400错误)请求参数不符合API规范。1.仔细阅读错误信息Anthropic的错误信息通常很详细会指出具体是哪个字段有问题如messages[0].content必须是数组。2. 检查model名称拼写是否正确、是否可用。3. 检查messages数组格式确保role是user或assistantcontent是字符串或内容块数组。4. 确保max_tokens是正整数且不超过模型上限。5. 对于文件上传检查media_type是否正确文件数据是否被正确编码为base64。ContextLengthExceededError输入的token总数历史消息系统提示本次查询超过了模型的上下文窗口。1. 计算或估算当前messages的总token数。可以使用anthropicSDK的count_tokens方法或tiktoken库针对Claude进行估算。2. 实施上下文修剪策略移除最早的消息对、只保留最近N条、或使用更高级的摘要技术将长历史压缩。3. 考虑是否真的需要如此长的历史有时重新开始一个新会话更简单。模型回复不符合预期胡言乱语、格式错误1.temperature参数设置过高导致输出随机性太大。2. 系统提示system不够清晰或矛盾。3. 存在提示词注入用户输入破坏了你的指令。1. 对于需要确定性的任务代码、事实回答将temperature降至0.1-0.3。2. 优化系统提示使其更具体、更具约束力。例如“你必须以JSON格式回答只包含answer和confidence两个键。”3. 在用户输入传入模型前进行基本的清洗和检查防止恶意提示。对于关键任务可以使用Claude的“仅JSON输出”模式如果模型支持。工具调用不触发或参数错误1. 工具定义tools的描述不够清晰。2. 用户查询的意图不明确模型无法确定是否需要调用工具。3. 工具参数的JSON Schema定义有误。1. 为每个工具编写详细、准确的description说明其用途和适用场景。2. 在系统提示中明确告知模型可以使用这些工具。3. 检查工具输入参数的schema确保类型string,number等和required字段定义正确。可以使用JSON Schema验证器进行测试。流式响应中途断开1. 客户端或服务器网络不稳定。2. 客户端处理流事件的速度太慢导致连接超时。3. 服务器端生成时间过长。1. 增加客户端的读取超时时间。2. 确保处理流事件的循环是高效的避免在循环中进行阻塞性IO操作。3. 考虑使用更小的max_tokens或更快的模型如Haiku来减少生成时间。实现断线重连逻辑从断点恢复但这需要模型支持通常较复杂。个人踩坑心得速率限制是“好朋友”初看速率限制很烦人但它保护了你的钱包和服务的稳定性。务必在代码中实现带有指数退避的重试机制这是生产环境稳定性的基石。一个简单的装饰器或使用tenacity库就能优雅地解决。Token计数是基本功不要凭感觉猜测上下文长度。在实现上下文管理功能时集成token计数功能。anthropic库提供了count_tokens方法非常准确。在每次添加消息到历史前估算一下可以提前避免ContextLengthExceededError。系统提示是方向盘花时间精心设计系统提示的收益远大于盲目调整temperature。一个好的系统提示应该像给一个聪明的新员工写的工作说明书角色、目标、约束、输出格式。把它写下来反复测试和迭代。从Haiku开始原型设计在开发初期功能验证阶段大量使用claude-3-haiku。它速度快、成本低足以验证你的应用逻辑和API集成是否正确。等到核心流程跑通后再换用Sonnet或Opus去提升最终输出的质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2608544.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…