从零构建AI应用:LangChain、RAG与多智能体实战指南

news2026/4/30 8:41:40
1. 项目概述一个为开发者准备的AI应用实战宝库如果你和我一样在过去一年里被各种AI新闻和概念轰炸从GPT到Claude从LangChain到CrewAI感觉什么都懂一点但真要自己动手从零搭建一个能解决实际问题的AI应用时却不知从何下手——那么你遇到rohitg00/awesome-ai-apps这个项目算是来对地方了。这不是又一个罗列API调用教程的清单而是一个由超过100个完整、可运行、可直接复现的AI应用项目组成的实战仓库。它就像一个AI应用开发的“乐高积木箱”把那些听起来高大上的“智能体”、“多智能体协作”、“RAG增强”等概念拆解成了一个个你可以直接运行、修改甚至组合的代码模块。这个项目的核心价值在于“去虚向实”。它不空谈理论而是用实实在在的代码展示了如何将OpenAI、Google Gemini、Anthropic Claude乃至本地运行的Llama等大模型与具体的业务场景如内容创作、竞品分析、视频理解相结合。无论你是想快速验证一个AI点子还是希望为你现有的产品增加一个智能功能或是单纯想深入学习现代AI应用的技术栈这里面的案例都能给你提供一条清晰的路径。接下来我将带你深入这个宝库拆解它的设计思路、核心模块并分享如何最高效地利用这些资源来加速你的开发。2. 项目架构与设计哲学解析2.1 核心设计思路从“玩具”到“工具”的渐进之路浏览这个项目的目录结构你首先会注意到它清晰的分类逻辑。这并非随意划分而是暗含了一条从易到难、从单一到复杂的学习与实践路径。这种设计非常贴心它模拟了一个开发者接触AI应用的典型成长曲线。起步阶段Starter Agents这里存放的是“单功能智能体”。比如一个只负责调用OpenAI API进行对话的聊天助手或者一个专门用Claude模型审查代码的机器人。这些项目的代码通常非常精简核心文件可能就一个Python脚本专注于解决一个问题如何正确地与大模型API进行交互。对于新手而言这是消除恐惧感的最佳方式。你能在几分钟内跑通一个程序看到AI的响应理解最基本的Prompt构造、API密钥配置和响应解析流程。这比任何教科书式的API文档都要直观。进阶阶段Advanced Agents RAG Applications当你掌握了基础对话后自然会想“如果任务很复杂一步完成不了怎么办”于是你来到了“高级智能体”和“RAG应用”区域。这里的项目引入了**工作流Workflow和外部知识Knowledge**的概念。例如“博客视频写作器”这个项目它演示的不是简单对话而是一个管道先提取视频内容再生成博客大纲接着润色文案最后可能还会建议配图。这背后通常使用了像LangChain这样的框架来编排多个步骤。而RAG应用则更进一层它解决了大模型“幻觉”和知识滞后的问题教你如何将自定义的数据如公司文档、产品手册转换成向量存入数据库并在提问时让模型优先从这些可靠信息中寻找答案。这类项目是你构建真正可用工具的关键。协作阶段Multi-Agent Teams Multimodal Apps这是目前AI应用开发的前沿地带。“多智能体团队”模拟了一个公司或团队的工作模式让不同的AI智能体扮演不同角色如分析师、写手、设计师协同完成一个项目。“多模态应用”则突破了纯文本的界限开始处理图像、音频、视频。例如有一个项目能让你画个草图AI就帮你生成一段对应的动画视频。这部分项目技术栈更复杂集成了多种工具和模型但它们展示了AI应用的终极形态成为一个能理解多维度信息、并能进行分工协作的虚拟生产力团队。注意不要试图一口气吃成胖子。我建议的学习路径是严格按照这个目录顺序来。先跑通2-3个Starter Agents确保你完全理解环境配置、API调用和基础错误处理。然后再挑选一个你业务相关的Advanced或RAG项目深入研究最后再去挑战多智能体和多模态项目。这样能建立扎实的信心和技术栈基础。2.2 技术栈选型为什么是这些框架和工具项目里大量使用了LangChain、CrewAI、Agno等框架而不是直接裸调API。这背后有深刻的考量。直接使用requests库调用OpenAI API虽然直接但在构建复杂应用时你很快会陷入重复造轮子的困境需要自己管理对话历史、设计工具调用逻辑、处理异步流式输出等。LangChain可以把它看作是AI应用的“粘合剂”和“工具箱”。它的核心价值在于提供了大量标准化、可复用的组件称为“链”和“智能体”。比如你需要做一个RAG应用LangChain已经提供了十几种文本分割器、几十种向量数据库的连接器、以及多种检索器。使用它你可以用很少的代码搭建一个原型把精力集中在业务逻辑而非底层基础设施上。这个项目中的许多RAG和高级智能体都基于LangChain因为它生态最成熟社区资源最丰富。CrewAI 与 Agno当你的智能体不止一个并且需要它们像团队一样工作时就需要一个“协调者”。这就是CrewAI这类多智能体框架的用武之地。它允许你定义每个智能体的角色Role、目标Goal、后台故事Backstory以及它们执行的任务Task并自动处理智能体之间的任务传递和协作。Agno是另一个类似但可能更轻量级的选择。项目中的“内容创作团队”就是一个典型的CrewAI应用它清晰地展示了如何设定一个主编、一个写手和一个编辑让它们共同完成一篇报道。本地模型Llama为什么在云API如此方便的今天还要包含本地模型的项目这主要出于三个现实考虑成本控制对于高频调用本地部署一次投入长期受益、数据隐私敏感数据不出本地、以及网络可靠性。项目中的Local Llama Chat示例通常使用Ollama或llama.cpp这样的工具来运行量化后的模型它告诉你如何在消费级显卡甚至只有CPU上运行一个可用的对话模型这对于开发离线应用或进行原型验证极具价值。向量数据库的选择在RAG类应用中你会频繁看到Chroma、Pinecone、Weaviate等名字。这个项目的示例往往使用ChromaDB原因在于它简单易用可以纯内存运行或持久化到磁盘非常适合快速原型开发。但在生产环境中你需要根据数据规模、查询性能、分布式需求来评估是否换用Pinecone全托管云服务或Weaviate功能更强大的开源方案。3. 核心模块深度剖析与实操指南3.1 Starter Agents你的第一个AI应用“Hello World”我们以最经典的openai-chat-assistant为例拆解一个入门级智能体的全部构成。虽然它的代码可能只有100行但每一行都至关重要。项目结构通常如下openai-chat-assistant/ ├── app.py # 主应用逻辑 ├── requirements.txt # Python依赖包列表 ├── .env.example # 环境变量示例文件 └── README.md # 项目说明和运行指南核心代码解读以app.py为例import os from openai import OpenAI from dotenv import load_dotenv # 1. 加载环境变量 load_dotenv() client OpenAI(api_keyos.getenv(OPENAI_API_KEY)) # 2. 初始化对话历史 conversation_history [{role: system, content: 你是一个乐于助人的助手。}] def chat_with_ai(user_input): # 3. 更新历史 conversation_history.append({role: user, content: user_input}) try: # 4. 调用API核心 response client.chat.completions.create( modelgpt-4o-mini, # 模型选择平衡性能与成本 messagesconversation_history, temperature0.7, # 创造性0.0最确定1.0最随机 max_tokens500 # 控制响应长度避免过长 ) # 5. 解析响应 ai_reply response.choices[0].message.content conversation_history.append({role: assistant, content: ai_reply}) return ai_reply except Exception as e: # 6. 错误处理 return f请求出错: {str(e)} # 7. 简单的CLI交互循环 if __name__ __main__: print(AI助手已启动输入 quit 退出。) while True: user_input input(\n你: ) if user_input.lower() quit: break reply chat_with_ai(user_input) print(f助手: {reply})实操要点与避坑指南环境变量是命门永远不要将API密钥硬编码在代码中。使用.env文件并通过python-dotenv加载是行业标准做法。.env文件务必加入.gitignore防止意外提交到公开仓库。模型选择有讲究示例中用了gpt-4o-mini它成本低、速度快适合对话。但对于需要深度推理的任务可能需要换用gpt-4o或claude-3-5-sonnet。项目里其他示例会展示不同模型的调用方式注意比较它们的参数差异。Temperature参数这是新手最容易忽略但影响巨大的参数。简单任务如分类、提取建议设为0.1-0.3保证输出稳定创意任务如写作、头脑风暴可设为0.7-0.9。在starter-agents里多尝试修改这个值观察输出变化这是培养“模型手感”的重要一步。流式输出体验更佳在together-ai-chat这个示例中你会看到“流式响应”的实现。对于网页应用流式输出一个字一个字地显示能极大提升用户体验。实现原理是使用API的streamTrue参数然后迭代响应块。当你从CLI转向Web开发时这个技巧必须掌握。3.2 RAG Applications打造拥有“长期记忆”的专家系统RAG检索增强生成是当前让AI应用变得真正有用的核心技术。我们以contextual-video-rag项目为例看看一个完整的RAG管道是如何构建的。一个典型RAG管道的步骤文档加载与分割原始视频通过语音识别ASR转为文字稿。长文本需要被分割成有重叠的小块如每块500字符重叠50字符以保证检索的准确性。向量化与嵌入使用嵌入模型如OpenAI的text-embedding-3-small将每个文本块转换为一个高维向量一串数字。语义相似的文本其向量在空间中的距离也更近。向量存储将这些向量及其对应的原始文本块存入向量数据库如Chroma。检索当用户提问时将问题也转换为向量并在数据库中查找与之最相似的几个文本块通常使用余弦相似度计算。增强提示与生成将检索到的相关文本块作为“上下文”和用户问题一起构造成一个详细的Prompt发送给大模型让其基于此上下文生成答案。项目中的关键实现细节# 伪代码展示核心流程 from langchain.document_loaders import YoutubeLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAI # 1. 从视频加载文字 loader YoutubeLoader.from_youtube_url(视频URL) transcript loader.load() # 2. 分割文本 text_splitter RecursiveCharacterTextSplitter( chunk_size1000, chunk_overlap200, separators[\n\n, \n, 。, , , , , ] ) docs text_splitter.split_documents(transcript) # 3. 创建向量库 embeddings OpenAIEmbeddings() vectorstore Chroma.from_documents(docs, embeddings, persist_directory./chroma_db) # 4. 创建检索链 llm ChatOpenAI(modelgpt-4o, temperature0) qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, # 还有其他如 map_reduce, refine 等适合不同场景 retrievervectorstore.as_retriever(search_kwargs{k: 4}) # 检索前4个相关片段 ) # 5. 提问 answer qa_chain.run(视频中提到的核心观点是什么)实操心得与进阶技巧分割策略是成败关键chunk_size不是越大越好。太大会引入无关信息太小会丢失上下文。对于技术文档按章节分割可能更好对于对话记录按说话人转折点分割更佳。这个项目里的contextual-compression示例就展示了更高级的重排序和过滤技术能进一步提升检索质量。检索并非只是“相似度”简单的向量相似度检索有时会漏掉关键信息。高级RAG技术会引入重排序Re-ranking即先用向量检索出20个候选块再用一个更精细的交叉编码器模型对这20个块进行相关性打分和重排最后取前3个。这能显著提升答案的准确性。“幻觉”并未完全消失即使提供了上下文模型仍可能“胡编乱造”。 mitigation策略包括在Prompt中强指令“仅根据提供的上下文回答”以及实现一个引用溯源功能在返回答案的同时标注出自哪个原文片段方便用户核查。这在competitive-intelligence-platform项目中有所体现。3.3 Multi-Agent Teams像管理团队一样编排AI当你需要完成一个涉及多步骤、多技能的任务时单智能体就显得力不从心了。content-creation-team项目完美展示了多智能体协作的威力。智能体团队的角色设计 在这个内容创作团队里通常定义三个角色研究员Researcher负责从网络或给定资料中搜集、整理信息。它的工具可能是搜索引擎API、网页抓取函数。撰稿人Writer负责根据研究员提供的大纲和资料撰写初稿。它需要强大的文案生成能力。编辑Editor负责审核和润色撰稿人的初稿确保风格一致、没有错误并最终定稿。使用CrewAI框架的实现骨架from crewai import Agent, Task, Crew, Process from langchain_openai import ChatOpenAI # 1. 定义智能体 researcher Agent( role资深市场研究员, goal找出关于{主题}的最新趋势、数据和竞争对手信息, backstory你是一名经验丰富的研究员擅长从海量信息中提炼关键洞察。, llmChatOpenAI(modelgpt-4o, temperature0.3), verboseTrue # 打印详细执行日志 ) writer Agent( role技术内容作家, goal根据研究员的发现撰写一篇结构清晰、引人入胜的博客文章, backstory你是一名受欢迎的科技博客作者擅长将复杂概念转化为通俗易懂的文字。, llmChatOpenAI(modelgpt-4o, temperature0.7), ) editor Agent( role主编, goal确保文章质量检查事实准确性、语法和风格一致性, backstory你是一名苛刻的主编对文字质量有极高的要求。, llmChatOpenAI(modelgpt-4o, temperature0.2), ) # 2. 定义任务并指定执行者和依赖关系 research_task Task( description针对主题“{主题}”进行全面的市场调研并输出一份包含关键数据点和引用来源的详细报告。, agentresearcher, expected_output一份结构化的调研报告。 ) write_task Task( description基于调研报告撰写一篇约1500字的博客文章标题要吸引人内容要有深度。, agentwriter, context[research_task], # 依赖研究任务 expected_output一篇完整的博客文章草稿。 ) edit_task Task( description对博客文章草稿进行严格的编辑和校对确保其达到发布标准。, agenteditor, context[write_task], # 依赖写作任务 expected_output最终可发布的博客文章。 ) # 3. 组建团队并执行 crew Crew( agents[researcher, writer, editor], tasks[research_task, write_task, edit_task], processProcess.sequential # 顺序执行也支持并行hierarchical ) result crew.kickoff(inputs{主题: 2024年人工智能在医疗健康领域的应用}) print(result)管理多智能体的经验成本与效率的平衡多智能体意味着多次API调用成本是单智能体的数倍。务必为每个智能体选择合适的模型。研究员和编辑可以用更便宜、更确定的模型如gpt-4o-mini低temperature撰稿人可以用更有创造性的模型如claude-3-haiku中等temperature。避免“循环依赖”与“扯皮”智能体之间传递的信息质量至关重要。如果研究员输出的报告质量太差撰稿人和编辑的工作就会很困难。在实践中你需要精心设计每个任务的expected_output尽可能结构化例如“请用Markdown列表列出前三大趋势”并为智能体提供更详细的指令和示例。日志与调试将每个智能体的verbose设为True这样你能看到每个智能体的思考过程ReAct模式和工具调用记录。当结果不理想时这是你排查问题最重要的依据。4. 从零开始复现与定制化开发实战4.1 环境搭建与项目克隆第一步是准备好你的开发环境。我强烈建议使用Conda或**Python虚拟环境venv**来管理依赖避免包冲突。# 1. 克隆仓库 git clone https://github.com/rohitg00/awesome-ai-apps.git cd awesome-ai-apps # 2. 创建并激活虚拟环境以venv为例 python -m venv venv # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate # 3. 进入你感兴趣的项目目录安装依赖 cd starter-agents/openai-chat-assistant pip install -r requirements.txt # 4. 配置环境变量 # 复制示例文件并填入你的真实API密钥 cp .env.example .env # 然后用文本编辑器打开 .env 文件填入类似以下内容 # OPENAI_API_KEYsk-your-actual-key-here # ANTHROPIC_API_KEYyour-claude-key-here # GOOGLE_API_KEYyour-gemini-key-here关键依赖解析openai/anthropic/google-generativeai各家大模型的官方Python SDK。langchain/langchain-communityAI应用框架提供了大量模块化组件。crewai多智能体编排框架。chromadb轻量级向量数据库常用于RAG原型开发。python-dotenv管理环境变量的神器。streamlit/gradio快速构建Web界面的框架很多演示项目会用到。4.2 以“品牌视频监控”项目为例的二次开发假设你对advanced-agents/brand-video-monitor品牌视频监控感兴趣它用Gemini分析YouTube视频中是否提及特定品牌。但你想把它改造成一个“行业动态追踪器”监控多个竞品频道的视频内容。原始项目核心功能输入一个YouTube视频URL和品牌关键词列表。下载视频并提取字幕。使用Gemini分析字幕判断是否提及品牌并总结提及的上下文。输出报告。定制化开发步骤步骤一扩展输入源。原项目可能只处理单个URL。我们可以修改为读取一个配置文件如channels.yaml里面列出需要监控的YouTube频道ID。# channels.yaml monitored_channels: - id: UC_x5XG1OV2P6uZZ5FSM9Ttw # 示例频道ID name: 竞品A官方频道 keywords: [产品X, 技术Y, 品牌A] - id: UCkngxfPdbTs-8u2H5a-EeZA name: 科技媒体B keywords: [行业趋势, 市场分析]步骤二实现定期监控。将脚本改造成一个定时任务如使用schedule库或Celery。添加一个简单的数据库如SQLite来记录已经分析过的视频避免重复处理。import sqlite3 import schedule import time def init_db(): conn sqlite3.connect(monitor.db) c conn.cursor() c.execute(CREATE TABLE IF NOT EXISTS processed_videos (video_id TEXT PRIMARY KEY, channel_id TEXT, analyzed_at TIMESTAMP)) conn.commit() conn.close() def is_video_processed(video_id): # 检查视频是否已分析 conn sqlite3.connect(monitor.db) c conn.cursor() c.execute(SELECT 1 FROM processed_videos WHERE video_id?, (video_id,)) exists c.fetchone() is not None conn.close() return exists def job(): # 1. 读取 channels.yaml # 2. 遍历每个频道获取最新视频列表使用YouTube Data API # 3. 对每个未处理的新视频运行原有的分析逻辑 # 4. 将结果保存到数据库或发送邮件/钉钉通知 # 5. 标记视频为已处理 print(执行监控任务...) # 每天上午9点执行 schedule.every().day.at(09:00).do(job) while True: schedule.run_pending() time.sleep(60)步骤三增强分析维度。原项目只分析字幕。我们可以利用Gemini的多模态能力让它同时分析视频的缩略图或关键帧需要额外下载判断视频的整体情绪倾向积极/消极或者识别屏幕上出现的Logo。步骤四优化输出与告警。将简单的控制台输出改为生成一份HTML日报或当检测到竞品有重大产品发布关键词匹配度高且情感积极时自动发送一条钉钉/飞书群消息告警。通过这样的改造你就从一个示例项目得到了一个能为你的业务服务的自动化监控工具。这个过程的核心思想是理解原有项目的核心逻辑视频下载、文本分析、AI调用然后替换或扩展它的输入、输出和调度部分。4.3 集成到现有系统以“代码审查助手”为例starter-agents/claude-code-reviewer是一个用Claude审查代码的简单智能体。如何将它集成到你团队的GitHub工作流中实现提交代码时自动审查方案创建GitHub Action在项目根目录创建.github/workflows/code-review.yml。编写Action脚本在pull_request事件触发时运行。在Action中设置你的ANTHROPIC_API_KEY为GitHub仓库的Secret。编写Python脚本提取PR中变更的代码调用Claude API进行审查。将审查结果以评论的形式提交到该PR中。# .github/workflows/code-review.yml name: AI Code Review on: [pull_request] jobs: review: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Set up Python uses: actions/setup-pythonv4 with: python-version: 3.10 - name: Install dependencies run: | pip install anthropic - name: Run AI Code Review env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | python .github/scripts/review.py# .github/scripts/review.py import os import sys import anthropic from github import Github # 需要使用PyGithub库 # 获取PR信息 # ... (使用PyGithub获取diff代码) client anthropic.Anthropic(api_keyos.environ[ANTHROPIC_API_KEY]) prompt f请你扮演一个资深{language}开发工程师审查以下代码变更 {diff_code} 请从代码风格、潜在bug、性能问题、安全性、以及是否符合最佳实践等角度给出具体、可操作的审查意见。 # 调用Claude API... # 将结果提交为PR评论...这样你就将一个独立的AI应用无缝嵌入到了团队的开发流程中实现了自动化代码质量检查。5. 常见问题、故障排查与性能优化在复现和运行这些项目的过程中你几乎一定会遇到下面这些问题。这里我总结了一份“避坑指南”。5.1 环境与依赖问题问题1ImportError或ModuleNotFoundError原因这是最常见的问题通常是Python版本不匹配或依赖包版本冲突。解决严格使用项目提供的requirements.txt。如果项目没有查看app.py顶部的import语句手动安装。使用虚拟环境是必须的它能完美隔离不同项目的依赖。如果遇到某个库的最新版不兼容可以尝试指定稍旧的版本例如pip install langchain0.1.0。在项目的README或issue中有时会提到兼容的版本。问题2API密钥错误或配额不足症状返回AuthenticationError,RateLimitError,InsufficientQuota。解决检查.env文件确保变量名与代码中os.getenv(VARIABLE_NAME)的名字完全一致且没有多余的空格或换行。检查API密钥权限确保你使用的API密钥有权限调用对应的模型例如某些旧密钥可能无法访问最新的GPT-4o模型。查看用量仪表盘登录OpenAI、Anthropic等平台的控制台检查额度是否用完。新注册账户通常有免费额度但很快会用完。设置预算和速率限制在代码中主动添加延迟避免频繁调用触发限流。对于生产应用必须监控API成本。5.2 模型响应相关问题问题3模型回答“我不知道”或胡言乱语原因Prompt指令不清晰或温度Temperature设置过高。解决优化Prompt使用更明确、更结构化的指令。例如不只是“总结这段文字”而是“请以不超过三点的列表形式总结这段文字的核心观点”。参考项目中的优秀Prompt写法。调整Temperature对于需要确定答案的任务代码生成、数据提取将temperature设为0或接近0如0.1。对于创意任务可以调高。使用系统消息System Message在对话历史开头用role: system来定义AI的角色和行为准则这比在用户消息中说明更有效。问题4RAG应用检索不到正确答案原因文本分割策略不当或检索到的上下文不相关。排查步骤检查分割后的文本块打印出分割后的docs看是否被不合理地切断导致语义不完整。检查检索结果在调用qa_chain.run之前先手动测试检索器retriever.get_relevant_documents(“你的问题”)看看返回的文本块是否真的相关。调整检索参数增加search_kwargs{k: 6}来检索更多片段。或者尝试不同的检索方法如MMR最大边际相关性它在相似性的基础上增加多样性。升级嵌入模型如果使用的是免费的、性能较弱的嵌入模型考虑换用OpenAI的text-embedding-3-small或Cohere的嵌入模型效果提升显著。5.3 性能与成本优化优化1缓存嵌入向量场景RAG应用中文档库不变但每次启动都重新计算嵌入耗时耗钱。方案使用支持持久化的向量数据库如将Chroma的persist_directory参数设置为一个本地路径。这样嵌入向量只需计算并存储一次。优化2对长文档使用“Map-Reduce”链场景单个文档很长超过模型上下文长度直接“stuff”会丢失信息。方案在LangChain中将chain_type从stuff改为map_reduce。它会先将文档分成多个块分别总结每个块map再总结所有的中间总结reduce。虽然API调用次数变多但能处理超长文档。优化3使用更便宜的模型进行预处理场景多智能体流程中并非所有步骤都需要最强的模型。方案让“研究员”和“编辑”使用便宜快速的模型如gpt-4o-mini,claude-3-haiku只让核心的“撰稿人”使用能力更强的模型如gpt-4o,claude-3-5-sonnet。这能在保证质量的同时大幅降低成本。优化4实现异步调用场景需要同时处理多个独立的任务如分析100个视频的字幕。方案使用asyncio和异步版本的SDK如openai.AsyncOpenAI。这能极大提升I/O密集型任务的吞吐量减少总等待时间。import asyncio from openai import AsyncOpenAI async def analyze_video_async(video_url): async_client AsyncOpenAI() # ... 异步处理逻辑 return result async def main(): video_urls [...] # 100个视频 tasks [analyze_video_async(url) for url in video_urls] results await asyncio.gather(*tasks) # 并发执行这个项目库的价值远不止于提供可运行的代码。它更像一张精心绘制的地图标明了从AI概念到落地应用之间那些最可行的路径。我的建议是不要仅仅满足于运行它而是把它当作一个起点。选择一个最贴近你工作需求的案例深入阅读它的每一行代码理解其设计取舍然后动手改造它——增加功能、修改逻辑、集成到你自己的系统中。在这个过程中遇到的每一个错误和解决的每一个问题都会让你对AI应用开发有更深刻的理解。真正的成长始于你开始动手搭建属于自己的第一个“Awesome AI App”之时。

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