AI简介

AI五层架构

By  黄仁勋

imageimage

 基础概念

  1. 人工智能:指由人制造出来的系统或机器能够模拟人类的智能行为,如学习、推理、解决问题、感知和语言理解等。它是计算机科学的一个分支,旨在让机器像人一样思考。

  2. 机器学习:人工智能的一个子集。它不依赖于显式的编程指令,而是让算法通过大量的数据进行训练,从中学习规律,从而能够对未知数据做出预测或决策。就像教小孩认识猫,不是告诉他“猫有两只眼睛、四条腿”,而是给他看成千上万张猫的图片,让他自己总结出猫的特征。

  3. 深度学习:机器学习的一个子集。它基于模拟人脑神经元结构的人工神经网络,特别是包含多个隐藏层的“深度”神经网络。它在图像识别、语音识别等领域表现突出。

  4. 算法:解决问题或完成任务的明确指令集合。在AI中,算法是驱动模型学习的数学规则和步骤。

  5. 模型:算法在数据上训练后产生的“成果”。你可以把算法看作是“教材”,把数据看作是“练习题”,模型就是学生经过学习后掌握的“解题思维”。训练完成后,我们实际使用的就是这个模型。

核心技术

  1. 大模型:指具有巨大参数量的深度学习模型。参数可以理解为模型的“记忆”或“知识”节点。参数越多,模型通常越聪明,能容纳的知识也越多。它通常需要海量数据和强大的算力来训练。

  2. 生成式AI:专注于生成新内容的一类人工智能。它不仅能分析或识别数据,还能创造出全新的、类似人类的文本、图像、音频、视频和代码等。

  3. 大语言模型:一种专门针对人类语言训练的大模型。它通过学习海量的文本数据(如书籍、网页),学会理解语言、生成文本、回答问题、总结文档等。ChatGPT 和 Gemini 的核心都是LLM。

  4. Transformer:一种革命性的深度学习模型架构。2017年由Google提出,它引入了“自注意力”机制,能够更好地理解长文本中词语之间的关系,是几乎所有现代大语言模型的基础。

  5. 扩散模型:当前主流文生图模型背后的核心技术,如 Stable Diffusion、DALL-E、Midjourney。它的工作原理类似于:先学习如何给一张清晰的图片逐步添加噪声,直到变成完全的噪点;然后反向学习,从完全的噪点中逐步去除噪声,最终还原或生成一张符合文字描述的清晰图片。

  6. 多模态模型:能够同时理解和处理多种类型数据(模态)的模型。例如,一个多模态模型既能看懂图片,也能理解文字描述,还能将两者关联起来。GPT-4V 或 Gemini 就是典型代表

其他重要术语

  1. 神经网络:受生物大脑神经网络启发而设计的计算系统。它由大量的节点(神经元)和连接组成,分为输入层、隐藏层和输出层。深度学习中的“深度”就是指隐藏层很多。

  2. 自然语言处理:让计算机能够理解、解释和生成人类语言的技术。机器翻译、情感分析、聊天机器人都属于NLP的应用。

  3. 计算机视觉:让计算机能够“看懂”图像和视频的技术。包括人脸识别、物体检测、图像分类等。

  4. 强化学习:一种机器学习方法。它通过“智能体”与环境进行互动,根据获得的“奖励”或“惩罚”来学习最优策略。就像一个训练小狗的过程,做对了给零食,做错了不给,慢慢地小狗就知道该怎么做。AlphaGo 下围棋就是强化学习的经典应用。

  5. 微调:在一个已经训练好的通用大模型基础上,用特定领域的小规模数据对其进行进一步训练,使其在特定任务上表现得更好。比如,拿一个通用语言模型,用法律文书去训练它,把它变成一个法律咨询助手。

  6. 提示词:用户输入给大模型的指令或问题。好的提示词能让模型生成更精准、更高质量的回答。这催生了“提示词工程”这一新技能。

  7. 幻觉:指AI模型生成看似合理但实际是错误或无意义内容的現象。比如,让它介绍一本书,它可能会编造出一个不存在的书名或作者。

  8. 算力:计算能力。AI模型的训练和运行需要极其强大的计算资源,通常依赖于GPU来进行并行计算。

  9. 图灵测试:由艾伦·图灵在1950年提出的测试。如果一台机器能够与人类进行对话,而人类无法辨别对话对象是人还是机器,那么就可以说这台机器具有智能。这是衡量AI智能程度的经典思想实验。

  10. 对齐:确保AI系统的目标和行为与人类的价值观和意图相一致的过程。即如何防止强大的AI做出对人类有害的事情。

应用术语

RAG

  • 全称:Retrieval-Augmented Generation

  • 中文:检索增强生成

通俗解释:
RAG是一种让大模型在回答问题之前,先“查资料”再“开口”的技术框架。

它解决了什么问题?
大模型的知识库是训练时固定的,比如截止到2025年5月的数据。如果你问它一个最新的新闻,或者你公司内部的私密文件,它要么答错,要么直接说不知道。RAG就是用来解决这个问题的。

工作流程(就像一个开卷考试):

  1. 检索:当你提问时,系统先去你的外部知识库(比如公司文档、数据库、网页)中,搜索与问题最相关的信息片段。这一步通常依赖向量数据库和相似度计算。

  2. 增强:把检索到的信息片段和你的原始问题组合在一起,形成一个“超级提示词”。

  3. 生成:把组合好的内容交给大模型,大模型根据提供的信息来生成最终答案。

优点:

    • 知识更新快:只需要更新外部知识库,模型就能知道新知识,无需重新训练。

    • 减少幻觉:模型有了参考资料,不再凭空捏造。

    • 数据安全:企业的私有数据可以放在内部库中,不需要上传给模型厂商进行训练。

MCP

  • 全称:Model Context Protocol

  • 中文:模型上下文协议

通俗解释:
这是由AI公司Anthropic在2024年底提出的一种开放标准。你可以把它理解为AI应用程序的 “USB-C接口”。

它解决了什么问题?
在MCP出现之前,如果你想让人工智能去访问你的本地文件、操作数据库或者调用Slack/邮箱,你需要为每一种工具编写复杂的、特定的代码。每换一个数据源,就要重新“接一次线”,非常混乱。

MCP的架构(借鉴了经典的客户端-服务器模式):

  • MCP客户端:也就是你使用的AI应用(如Claude Desktop、各种AI IDE)。

  • MCP服务器:这是一个轻量级的程序,专门负责把AI应用连接到特定的数据源或工具(比如本地文件夹、GitHub、数据库)。

  • 协议:定义了客户端和服务器之间如何通信。

工作流程:
你想让AI帮你总结本地硬盘里的一个Word文档。

  1. 你的AI应用(MCP客户端)通过MCP协议,向“本地文件系统MCP服务器”发起请求。

  2. 这个MCP服务器去读取你电脑里的Word文件。

  3. 服务器将读取到的文本内容通过MCP协议返回给AI客户端。

  4. AI看到文本后,开始进行总结。

为什么重要?
MCP试图建立一个生态。一旦MCP成为标准,MCP服务器的开发者只需按标准写一次代码,所有兼容MCP的AI应用就都能直接使用这个数据源。这就像你买了一个支持USB-C的U盘,可以在所有支持USB-C的电脑上即插即用。

Embedding

嵌入/向量化。将文字、图片等内容转换成一串计算机能理解的数字列表(向量)。在RAG中,就是把文档切成块,然后变成向量存起来,方便后续进行语义搜索。

Agent

智能体。一个能够自主完成任务的AI系统。它不仅会“说话”,还会“做事”。与RAG的区别,RAG主要是为了“知道得更多”,而Agent是为了“做得更多”。一个Agent通常会包含RAG作为它的知识模块,但它还会包含规划、调用工具、自我反思等能力。

Skills 

Skills 是指大模型在执行任务时,不仅仅进行文字对话,还可以主动调用外部工具、API或执行特定代码块来获取实时信息、操作软件或影响外部世界的能力。

Skills 与 Agent 的关系

  • Agent(智能体):是负责思考、规划和决策的大脑。

  • Skills:是Agent可以调用的四肢和工具。

一个典型的Agent工作流是:思考 -> 决策(调用Skill)-> 执行Skill -> 观察结果 -> 再次思考...

例如,一个旅行规划Agent,它可能会依次调用以下Skills:

  1. 网络搜索Skill:查询目的地的天气和热门景点。

  2. API调用Skill:查询机票和酒店的价格。

  3. 代码计算Skill:计算总预算。

  4. 邮件Skill:把行程单发送到用户的邮箱。

   demo:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from datetime import datetime
from typing import Dict, List, Tuple

class TravelPlanner:
    """旅行规划Agent,依次调用多个技能完成行程规划"""
    
    def __init__(self, user_email: str, destination: str, departure: str, travel_date: str, return_date: str):
        """
        初始化旅行规划Agent
        
        :param user_email: 用户邮箱,用于发送行程单
        :param destination: 目的地
        :param departure: 出发地
        :param travel_date: 出发日期 (YYYY-MM-DD)
        :param return_date: 返回日期 (YYYY-MM-DD)
        """
        self.user_email = user_email
        self.destination = destination
        self.departure = departure
        self.travel_date = travel_date
        self.return_date = return_date
        self.weather_info = None
        self.attractions = None
        self.flight_price = None
        self.hotel_price = None
        self.total_budget = None
        self.itinerary = None

    def network_search_skill(self) -> Tuple[str, List[str]]:
        """
        技能1:网络搜索Skill - 查询目的地的天气和热门景点
        模拟网络搜索,返回天气信息和景点列表
        """
        print(f"正在搜索 {self.destination} 的天气和热门景点...")
        # 模拟网络搜索,实际可替换为调用天气API或爬虫
        # 这里根据目的地简单模拟
        weather_data = {
            "北京": "晴,25°C",
            "上海": "多云,28°C",
            "广州": "雷阵雨,30°C",
            "成都": "阴,22°C",
            "默认": "晴,20°C"
        }
        attractions_data = {
            "北京": ["故宫", "长城", "颐和园"],
            "上海": ["外滩", "迪士尼乐园", "东方明珠"],
            "广州": ["广州塔", "长隆野生动物世界", "沙面"],
            "成都": ["大熊猫繁育基地", "宽窄巷子", "都江堰"],
            "默认": ["当地著名景点A", "当地著名景点B"]
        }
        
        self.weather_info = weather_data.get(self.destination, weather_data["默认"])
        self.attractions = attractions_data.get(self.destination, attractions_data["默认"])
        print(f"天气:{self.weather_info}")
        print(f"热门景点:{', '.join(self.attractions)}")
        return self.weather_info, self.attractions

    def api_call_skill(self) -> Tuple[float, float]:
        """
        技能2:API调用Skill - 查询机票和酒店价格
        模拟API调用,返回机票价格和酒店每晚价格
        """
        print(f"正在查询从 {self.departure} 到 {self.destination} 的机票和酒店价格...")
        # 模拟价格数据,实际可调用携程、飞猪等API
        import random
        # 根据出发地和目的地生成随机价格,但保持一致性
        seed = hash(self.departure + self.destination + self.travel_date) % 1000
        random.seed(seed)
        flight_price = random.randint(800, 3000)  # 单程机票价格
        hotel_price = random.randint(300, 1200)   # 每晚酒店价格
        
        # 往返机票按双倍计算(简化)
        self.flight_price = flight_price * 2
        # 计算住宿天数
        start = datetime.strptime(self.travel_date, "%Y-%m-%d")
        end = datetime.strptime(self.return_date, "%Y-%m-%d")
        days = (end - start).days
        self.hotel_price = hotel_price * days
        print(f"往返机票总价:{self.flight_price}元")
        print(f"{days}晚酒店总价:{self.hotel_price}元")
        return self.flight_price, self.hotel_price

    def code_calculation_skill(self) -> float:
        """
        技能3:代码计算Skill - 计算总预算
        基于机票、酒店和景点花费估算总预算
        """
        print("正在计算总预算...")
        # 估算景点门票和餐饮等其他费用
        attraction_cost = len(self.attractions) * 150  # 每个景点约150元
        daily_meals = 200  # 每天餐饮预算
        start = datetime.strptime(self.travel_date, "%Y-%m-%d")
        end = datetime.strptime(self.return_date, "%Y-%m-%d")
        days = (end - start).days
        meal_cost = daily_meals * days
        
        self.total_budget = self.flight_price + self.hotel_price + attraction_cost + meal_cost
        print(f"总预算约为:{self.total_budget}元")
        return self.total_budget

    def email_skill(self) -> None:
        """
        技能4:邮件Skill - 把行程单发送到用户的邮箱
        使用SMTP发送邮件,这里模拟发送,实际需配置邮箱服务器
        """
        print(f"正在生成行程单并发送至 {self.user_email}...")
        
        # 构建行程单内容
        itinerary = f"""
        ===== 旅行行程单 =====
        目的地:{self.destination}
        出发地:{self.departure}
        日期:{self.travel_date} 至 {self.return_date}
        
        天气:{self.weather_info}
        热门景点推荐:{', '.join(self.attractions)}
        
        机票总价:{self.flight_price}元
        酒店总价:{self.hotel_price}元
        其他费用(景点+餐饮):估算中已包含
        总预算:{self.total_budget}元
        
        祝您旅途愉快!
        ====================
        """
        self.itinerary = itinerary
        print(itinerary)
        
        # 实际发送邮件(需配置SMTP)
        # 这里仅模拟发送,取消注释以下代码并填写真实信息可实际发送
        """
        try:
            # 邮箱配置
            sender_email = "your_email@example.com"
            sender_password = "your_password"
            smtp_server = "smtp.example.com"
            smtp_port = 587
            
            msg = MIMEMultipart()
            msg['From'] = sender_email
            msg['To'] = self.user_email
            msg['Subject'] = f"您的{self.destination}旅行行程单"
            
            msg.attach(MIMEText(self.itinerary, 'plain', 'utf-8'))
            
            server = smtplib.SMTP(smtp_server, smtp_port)
            server.starttls()
            server.login(sender_email, sender_password)
            server.send_message(msg)
            server.quit()
            print("邮件发送成功!")
        except Exception as e:
            print(f"邮件发送失败:{e}")
        """
        print("(邮件发送模拟完成)")

    def plan_trip(self) -> None:
        """
        执行完整的旅行规划流程,依次调用四个技能
        """
        print("开始规划您的旅行...\n")
        try:
            self.network_search_skill()
            print()
            self.api_call_skill()
            print()
            self.code_calculation_skill()
            print()
            self.email_skill()
            print("\n旅行规划完成!")
        except Exception as e:
            print(f"规划过程中出现错误:{e}")

# 使用示例
if __name__ == "__main__":
    # 用户输入(实际可从命令行或GUI获取)
    user_email = "user@example.com"
    destination = "北京"
    departure = "上海"
    travel_date = "2025-07-01"
    return_date = "2025-07-05"
    
    planner = TravelPlanner(user_email, destination, departure, travel_date, return_date)
    planner.plan_trip()
View Code

 

posted @ 2026-03-20 12:53  鄙人取个名字好难  阅读(2)  评论(0)    收藏  举报