目录
  • 说明
  • 环境前置准备
  • AI Agent代码实现与功能说明
  • 写在最后


说明


    本篇文章介绍使用Ollama本地部署DeepSeek-R1 8B通用大模型,作为Agent智能大脑,基于Python3.11(虚拟环境管理工具Conda)、Langchain开发框架、Chroma向量数据库、ReAct提示词模版等工具进行开发AI Agent人工智能体。为了便于理解智能体相关知识,本文以“上海今天天气情况”简单问询为例,去剖析AI agent思考过程和执行任务过程。如agent接到用户指令后,一步一步思考分解任务,去调用天气情况API、检索知识库Rag系统或LLM自身知识回答与执行任务,同时本文也会详细展示与分析AI Agent再执行任务的整个详细思考过程。

    要学习AI Agent,首先弄清楚AI Agen是什么,有哪些功能,AI agent是人工智能代理,是一种能自主感知环境、做出决策并执行任务的智能系统,其核心功能体现在以下方面:

  1. 自主感知与理解

  • 接收外部信息用户指令(自然语言,说白点就是人话),并进行解析(如自然语言理解、数据提取)做任务拆解,明确任务目标。
    例:查询上海天气情况,agent提取地点:上海 Shanghai,cn,再去调用天气网站API去查询
  • 决策与规划

    • 根据目标和环境,制定分步执行计划,选择最优策略。
      例:用户一次问两个问题:1)上海天气情况,2)上海人工智能发展如何(同时问两个不相关的问题)。agent规划先去解决第一个天气问题“上海天气情况”;再去解决“上海人工智能发展如何”等
  • 工具调用与执行

    • 调用外部工具(如 API、数据库、RAG)完成具体操作,无需人工介入,这些部署DeepSeek作为智能体大脑来去执行。
      例:用户一次问两个问题:1)上海天气情况,2)上海人工智能发展如何。AI agent思考用调用天气网站API回答第一个天气问题;思考用Rag知识库回答第二问题AI发展如何,如Rag知识库中没有检索到相关知识,最后智能基于DeepSeek本地部署大模型去回答用户问题
  • 动态调整与迭代

    • 监控任务执行过程,根据反馈(如操作失败、信息变更)调整策略。
      例:股票监控 Agent 发现价格波动超出预期,自动重新分析并调整提醒阈值。
  • 多任务协同

    • 多个 Agent 协作完成复杂任务,分工处理不同环节。
      例:项目管理 Agent 协调 “文档整理 Agent”“进度跟踪 Agent”“提醒 Agent”,同步推进项目。
    本文AI Agent例子中Tools箱工具涉及三个功能:
      • 通用知识或问题可由DeepSeek大模型直接回答
      • 由大模型思考与执行可调用API查询工具(这里接入免费天气API)
      • 由大模型执行与可查询的本地部署RAG增强检索知识库系统

    环境前置准备


         本文演示一个基于DeepSeek-R1的AI Agent智能体,根据用户指令(以问询上海天气情况为例)Agent会调用两个工具,即天气API、RAG增强检索知识库系统。所以这里需要本地部署DeepSeek-R1,Rag系统需要向量数据库、还要Langchain开发框架,Python环境(conda构建即可)。以上这些环境,在上一篇构建Rag系统有介绍,下文有相关链接。环境准备好,还需一个可调用天气API keys。

    • 免费天气API key注册

    我们在官网:https:///注册一个免费可调用的天气API接口获取API keys,傻瓜式如下注册就好:

        首先,注册账号,按照要求进行认证即可,注册完成登录即可有个免费的API keys,如图:

        其次,笔者注册后,点击账号后,获取的免费香的My API keys,如图:

        最后,通过下面链接填写想要查询的城市,以及你的API keys验证是否生效,刚注册不是立即生效,一般要几分钟才会生效。

    https://api./data/2.5/weather?q=Beijing,cn&APPID=你的API keys

    尝试是否生效如:查看上海天气,返回结果如下(json串):

    {"coord":{"lon":120.3972,"lat":30.9075},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"base":"stations","main":{"temp":302.55,"feels_like":306.17,"temp_min":302.55,"temp_max":302.55,"pressure":999,"humidity":67,"sea_level":999,"grnd_level":994},"visibility":10000,"wind":{"speed":2.17,"deg":38,"gust":1.59},"clouds":{"all":56},"dt":1754188875,"sys":{"country":"CN","sunrise":1754169272,"sunset":1754220397},"timezone":28800,"id":1816670,"name":"Shanghai","cod":200}
    • Rag增强检索系统搭建

        本文利用Ollama在本地部署DeepSeek-R1推理模型,搭建一个Rag增强检索知识库系统,同时此Rag系统也是本文智能体的Tools工具之一。

    基于DeepSeek手搓一个Rag知识库(手把手,个人电脑也能玩哦)

        笔者之前有篇文章,已经讲过本地搭建一个基于DeepSeek部署Rag知识库的内容,其中有讲如何利用Ollama在本地部署DeepSeek-R1推理模型,笔者这里不再赘述。


    AI Agent功能说明与代码实现

        

           这里讲述AI Agent以查询天气为例,不代表智能体仅仅只能做这些,也不代表做这些就够了,若结合实际生产可用的场景做复杂的智能体,还有很多工作要做如多种工具实现,提示词工程(如解决反提示攻击、提示词注入问题),结合垂直领域大模型训练、微调、模型稳定性等等问题。这里便于读者简单快速上手,可从以下几个方面入手:

    • 本地部署DeepSeek-R1通用大模型,作为智能体大脑,理解用户指令,规划和执行任务等

    • 为Agent准备可执行调用的工具,如本文天气查询工具函数,还有一个Rag调用函数在上篇构建Rag文章,通过from lang_ollama_chroma import lang_rag引入。

    • 使用拉取ReAct提示模版,为用户指令添加上下文信息,引导大模型更智能拆解任务,对齐目标执行任务。

    • 用LLM、Tools可调用工具以及提示词模版来创建AI Agent智能体对象

    • 给智能体提问题,运行代码,查看结果

    代码实现部分,直接附上可执行代码(环境准备好、包导入直接可运行的):

    from langchain import hub
    from langchain.agents import Tool, create_react_agent, AgentExecutor
    from langchain_ollama import OllamaLLM
    import requests

    from lang_ollama_chroma import lang_rag



    # 1. 配置本地DeepSeek模型(通过Ollama
    llm = OllamaLLM(
    model=“deepseek-r1”,  确保已通过ollama pull deepseek下载模型
    base_url=“http://localhost:11434”,
    temperature=0.5
    )

    # 2. 天气查询工具函数
    def get_weather(city: str) -> str:
    “””获取指定城市的天气信息“””
    try:
    替换为你的自己的OpenWeatherMap API密钥
    api_key = “xxxxxxxxx94271055d4bc24628abf4”
    调用天气API
    response = requests.get(
    “https://api./data/2.5/weather”,
    params={
    “q”: city,
    # “q”: “Shanghai,cn”,
    “appid”: api_key,
    “units”“metric”,  摄氏度
    “lang”“zh_cn”  中文结果
    }
            )
            data = response.json()

    提取关键信息
    return (
    f”{data[‘name’]}当前天气:n
                f”温度:{data[‘main’][‘temp’]}°Cn
                f”状况:{data[‘weather’][0][‘description’]}n
                f”湿度:{data[‘main’][‘humidity’]}%”
    )
    except Exception as e:
    return f”查询失败:{str(e)}


    # 3. 注册工具,这里可以注册多个工具(这里注册两个工具,一个API;一个Rag知识库)
    tools = [
        Tool(    #查询天气API接口工具
    name=“WeatherQuery”,
    func=get_weather,
    description=查询城市天气的工具,输入参数为城市名称(如北京:Beijing,cn、上海:Shanghai,cn
    ),
    Tool(    #查询本地部署增强检索Rag知识库
    name=“RAG_Retrieval”,
    func=lang_rag,
    description=用于检索本地文档中的信息上海人工智能发展情况,输入应为具体查询问题
    )
    ]

    # 4. 获取最新的ReAct提示词模板(从LangChain Hub)这是新版的核心变化:使用标准化提示词模板
    prompt = hub.pull(“hwchase17/react”)

    # 5. 创建Agent
    agent = create_react_agent(
    llm=llm,
    tools=tools,
    prompt=prompt
    )

    # 6. 创建Agent执行器(负责运行Agent并处理输出)
    agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True  显示思考过程,False不显示思考过程
    )

    # 7. 测试
    if __name__ == “__main__”:
        result = agent_executor.invoke({
    “input”上海今天的天气怎么样?上海人工智能发展怎么样?
    })
    print(结果:, result[“output”])

    执行结果解析:

    1)问题场景一:上海今天的天气怎么样?


    这里需要说明一下天气API参数需要填写Shanghai,cn拼音,填写上海汉子是无法识别的。以下注释掉描述部分description=查询城市天气的工具,输入参数为城市名称(如北京:Beijing,cn、上海:Shanghai,cn

    如果没在描述内,说明对应的编码,智能体没有上下文信息,以下是Agent的思考过程,回答不尽人意的,并没有调用正确的工具并提出正确的答案。

    注:think标签 是agent思考过程;Action标签是去执行工具


    2)问题场景二:上海今天的天气怎么样?


    这里使用了description=查询城市天气的工具,输入参数为城市名称(如北京:Beijing,cn、上海:Shanghai,cn。再看Agent思考过程有点智能了。调用正确的工具并给出满意答案。

    一起看一下大模型的思考过程:
    “啊对了,系统提示中明确要求城市名称要转换成“Shanghai,cn”格式,这个细节不能错。虽然看起来简单,但天气工具每次调用都要精确匹配参数才行。“

    3)场景问题三:上海今天的天气怎么样?上海人工智能发展怎么样?


    Agent经过思考调用天气API;调用检索Rag知识库系统寻找答案,结果没找到答案,然后基于通用大模型DeepSeek的理解给出了答案。以下是Agent的思考过程:

    附上文字版思考过程:

    <think>嗯,用户问的是“上海今天的天气怎么样?上海人工智能发展怎么样?”这个问题看起来是两个部分:一个是实时天气查询,另一个是关于上海AI发展的现状和趋势。
    用户可能正在计划去上海旅游或者出差,想先了解当地的天气情况。同时ta对上海的科技产业感兴趣,特别是人工智能领域的发展状况,可能是为了考察就业机会、投资环境,或者是学术研究需要。
    对于天气部分,直接调用WeatherQuery工具就能得到准确信息了。“人工智能发展”这部分属于本地文档知识库的内容,应该使用RAG_Retrieval工具来查询。不过用户把两个问题混在一起问了,可能希望一次性获得完整回答。
    考虑到用户同时询问了天气和AI发展这两个性质完全不同的事情,在回复时需要明确区分两部分信息,并分别说明数据来源的不同可靠性。天气是实时的,而AI发展属于历史知识库内容。</think>好的,我现在将开始分析这个问题并逐步解决。
    首先,我需要查询上海今天的天气情况,这可以通过调用 WeatherQuery 工具来实现。对于人工智能发展的部分,则可能需要从本地文档中检索相关信息,因此我会使用 RAG_Retrieval 工具。接下来,让我一步步执行这些操作。</think>Thought: 我需要分别处理这两个问题:查询上海今天的天气和了解上海人工智能的发展状况。
    - 对于"上海今天的天气怎么样?"这个问题,我应该调用 `WeatherQuery` 工具,并输入城市名称 "Shanghai,cn" 来获取最新的天气信息。- 对于"上海人工智能发展怎么样?"这个问题,它涉及本地文档中的知识(如旅游攻略或特定领域的介绍),所以我需要使用 `RAG_Retrieval` 工具。输入应该是具体的查询问题,比如"上海的人工智能产业现状和发展趋势是什么?"
    现在,我会先执行天气查询。
    Action: WeatherQueryAction Input: Shanghai,cnShanghai当前天气:温度:29.29°C状况:多云湿度:80%<think>嗯,用户让我查上海今天的天气和人工智能发展情况。首先得拆分成两个问题处理。
    先看第一个问题,“上海今天的天气怎么样”。这个应该用WeatherQuery工具,输入Shanghai,cn就行。不过我得确认一下返回的数据格式是不是标准的,比如温度、湿度这些数值是否准确显示。
    然后是“上海人工智能发展怎么样”,这属于需要本地文档的信息,所以要用RAG_Retrieval工具。用户可能想知道的是当前的发展状况,包括政策支持、企业情况或者研究成果之类的。不过我得注意输入的问题描述要具体,不能太笼统,比如直接问"上海的人工智能产业现状和发展趋势是什么?"会更准确。
    接下来我要执行WeatherQuery的查询。假设返回的数据是温度29°C,多云,湿度80%,这些信息应该没问题。然后处理RAG_Retrieval的部分,用户的问题需要明确指向人工智能发展的情况,可能涉及到政府政策、企业布局或者学术研究等方面。比如可以查"上海的人工智能产业现状和发展趋势是什么?"来获取更详细的信息。
    不过要注意的是,用户这两个问题的性质完全不同:一个是实时天气,另一个是历史知识库的内容。所以回答时要分开说明,并且指出天气信息可能有变化而AI发展情况相对稳定,但需要引用本地文档才能准确回答。另外,用户可能是游客或商务人士,在计划行程前想了解当地气候和科技环境,这样能帮助ta做更好的准备。</think>好的,我现在将开始分析这个问题并逐步解决。
    首先,我需要查询上海今天的天气情况,这可以通过调用 `WeatherQuery` 工具来实现。对于人工智能发展的部分,则可能需要从本地文档中检索相关信息,因此我会使用 `RAG_Retrieval` 巛具。接下来,让我一步步执行这些操作。</think>Action: WeatherQuery  Action Input: Shanghai,cn  Shanghai当前天气:温度:29.29°C状况:多云湿度:80%<think>嗯,用户现在问的是上海今天的天气和人工智能发展情况。首先得分开处理这两个部分。
    先看天气查询的部分。刚才我调用了WeatherQuery工具,结果显示上海今天是多云,温度大概在29°C左右,湿度80%。这个数据应该是比较准确的,但需要确认是否是最新的信息,因为用户可能是在实时获取天气来安排行程或者活动。
    接下来是人工智能发展的情况。这个问题属于本地文档的内容,比如旅游攻略或产业报告里可能会提到上海作为中国科技中心的发展情况。这时候应该用RAG_Retrieval工具,输入一个明确的问题,例如“上海的人工智能产业现状和发展趋势是什么?”。不过要注意用户可能想知道的是当前的政策支持、主要企业或者学术研究进展,而不仅仅是历史数据。
    然后需要考虑回答的结构。天气部分已经得到结果,但AI发展这部分需要引用本地文档的信息,并且要说明这些信息是基于知识库的内容,而不是实时数据。同时,应该提醒用户如果有更具体的问题,比如某个公司的技术或具体的政策变化,可能需要进一步查询。
    另外,用户可能是游客或者商务人士,在计划去上海之前想了解当地的天气情况和科技环境,这样能帮助ta做出更好的行程安排或商业决策。不过也有可能是本地居民关注AI产业动态,或者是学生做相关研究需要参考资料。
    最后要确保回答清晰分开两部分,并且指出信息来源的不同可靠性:实时天气可能有变化,而AI发展的情况则基于历史知识库数据。</think>Action: RAG_Retrieval  Action Input: 上海的人工智能产业现状和发展趋势是什么?  提示词模板创建向量数据库检索器{'query': '上海的人工智能产业现状和发展趋势是什么?  n', 'result': "<think>n嗯,用户问的是上海人工智能产业的现状和发展趋势。这个问题看起来挺专业的,可能是个科技行业从业者、投资人或者学生在做相关研究。nn用户提供的上下文全是关于HNSW算法的重复描述,和问题完全无关啊。这种情况下,我需要先确认自己是否理解正确——看来用户要么是误传了资料,要么是在测试我的信息筛选能力?nn作为DeepSeek助手,看到这个问题时确实有点困惑。因为当前提供的所有内容都是在详细解释HNSW(Hierarchical Navigable Small World)算法的原理和运作方式,与上海人工智能产业现状完全无关。nn这种情况下最好的回应就是诚实地告诉用户我无法回答这个问题,并建议他们提供相关领域的资料。毕竟作为负责任的知识助手,不能为了应付问题而给出不准确的回答。n</think>nI don't know."}<think>好的,现在需要处理用户的查询:“上海今天的天气怎么样?上海人工智能发展怎么样?”。
    首先看第一个部分“上海今天的天气怎么样”。根据之前的工具调用记录,我注意到在第一次交互中已经成功使用了 `WeatherQuery` 工具来获取了上海市的最新天气信息。这些信息应该是准确且实时更新的,因此我可以直接引用并总结这部分内容。
    接着是第二个问题“上海人工智能发展怎么样?”。在这个部分里,用户似乎希望了解上海在人工智能领域的整体发展情况,包括产业现状、政策支持或未来趋势等。然而,在提供的上下文和检索结果中,并没有找到任何与上海人工智能产业发展相关的有效信息。这可能是因为相关资料并未包含在我当前访问到的本地文档知识库中。
    基于DeepSeek-R1手搓AI Agent智能体(手把手,个人电脑也能玩哦)
    在这种情况下,我应该明确告知用户哪些部分得到了回答,以及哪些问题无法解决的原因。对于天气部分可以给出清晰、准确的回答;而对于AI发展的问题,则需要说明缺乏相关信息,并建议用户提供更多背景或上下文以便更好地理解和回答。</think>Thought: I now know the final answer
    Final Answer: 好的,我已经分别查询了上海今天的天气和人工智能发展情况:
    1. **上海今天天气**:   - 根据最新的气象数据,上海市当前的天气是多云,温度约为29°C,湿度在80%左右。建议您根据实时变化调整行程。
    2. **上海人工智能发展**:   - 抱歉,在我检索到的相关资料中没有找到关于“上海人工智能产业发展现状和趋势”的有效信息。   - 如果你能提供更多背景或上下文(比如具体的公司、技术方向或者时间段),我可以更好地理解和回答这个问题。
    > Finished chain.结果: 好的,我已经分别查询了上海今天的天气和人工智能发展情况:
    1. **上海今天天气**:   - 根据最新的气象数据,上海市当前的天气是多云,温度约为29°C,湿度在80%左右。建议您根据实时变化调整行程。
    2. **上海人工智能发展**:   - 抱歉,在我检索到的相关资料中没有找到关于“上海人工智能产业发展现状和趋势”的有效信息。   - 如果你能提供更多背景或上下文(比如具体的公司、技术方向或者时间段),我可以更好地理解和回答这个问题。
    Process finished with exit code 0

    另,通过同样问题多次提问,每次思考过程不一样,这也说明大模型思考不可解释性。同一个问题执行多次,Agent回答不一样,这也是其缺点之一,但都能正确地去调用相关工具执行,以下是运行两次思考过程

    运行第一次:
    运行第二次:
    写在最后

        

        在人工智能浪潮中,与其焦虑替代风险,不如拥抱技术浪潮主动进化。AI 不是对手,而是解放创造力的工具 —— 它能高效处理重复劳动,让我们聚焦更具价值的思考与创新。

        保持学习热情,将 AI 视为协作伙伴:用大模型提升工作效率,借数据工具洞察趋势,靠编程能力拓展技术边界。同时深耕独特优势,人类的共情力、创造力和复杂决策能力,仍是 AI 难以替代的核心竞争力。以开放心态拥抱变化,在人机协作中找到新定位,在技术迭代中积累跨界能力。

        每一次技术革命都孕育新机遇,积极融入、持续成长,方能在智能时代立于潮头,收获更广阔的发展空间。

    与君共勉!

    往期文章分享

    AI系列

    基于DeepSeek手搓一个Rag知识库(手把手,个人电脑也能玩哦)

    数据治理系列

    数据质量监控好,数据开发背锅少

    数据全生命周期管理(一)

    元数据:数据治理的基石

    数据血缘关系:图数据库Neo4j存储实现

    健康医疗数据治理之数据标准化(附35页PPT)

    数据质量:数据治理的核心

    数据治理系列:一个数据质量监控系统的自我修养

    数据治理系列:流!流!流数据质量检测系统,Flink引擎实现动态加载规则

    数据探查:让数据分析师羽扇纶巾,谈笑间,樯橹灰飞烟…

    重磅!《数据安全法(草案)》全文发布(带附件)

    数据安全治理的九大要素

    阿里B2B电商算法首次对外公开

    数据中台:基于标签体系的360°用户画像

    元数据管理|Hive Hooks和Metastore监听器介绍

    元数据:跨引擎超完备字段级血缘关系解题方法

    数据仓库系列

    数仓建模系列:关于维度,别再傻傻分不清楚啦!

    数仓建模系列:构建总线矩阵时,业务过程是到底个啥,这里摊牌了

    美团点评 Flink 实时数仓应用经验分享

    实时数仓在滴滴的实践和落地

    实时数仓|基于Flink1.11的SQL构建实时数仓探索实践

    金融数仓体系建设

    数据中台:浅析数据湖和数据中台的关系

    数据中台系列

    数据中台:基于标签体系的360°用户画像

    滴滴数据仓库指标体系建设实践

    爱奇艺数据中台建设组合拳:日志投递、统一数仓、大数据平台

    Antlr4实战系列

    Antlr4实战:统一SQL路由多引擎

    Flink系列

    Flink分布式系统一致性快照Checkpoint机制详解

    字节跳动基于Flink的MQ-Hive实时数据集成

    Flink优化器与源码解析系列–让Flink飞奔起来这篇文章就够啦(一)

    Flink优化器与源码解析系列–Flink相关基本概念

    Flink优化器与源码解析系列–内存模型详解

    Flink优化器与源码解析系列–算子Chain策略优化

    春晚活动下,快手实时链路保障实践,首次揭秘!

    趣头条基于 Flink+ClickHouse 构建实时数据分析平台

    Flink 指标、监控与告警详解

    美团点评 Flink 实时数仓应用经验分享

    图数据库

    字节跳动自研万亿级图数据库 & 图计算实践

    数据血缘关系:图数据库Neo4j存储实现

    其他

    ClickHouse快速入门

    优化器优化规则系列

    Hive优化器原理与源码解析系列–优化规则SortRemoveRule(一)

    Hive优化器原理与源码解析系列–优化规则SortJoinReduceRule(二)

    Hive优化器原理与源码解析系列–优化规则SortProjectTransposeRule(三)

    Hive优化器原理与源码解析系列–优化规则SortUnionReduceRule(四)

    Hive优化器原理与源码解析系列–优化规则SortMergeRule(五)

    Hive优化器原理与源码解析系列–优化规则ProjectFilterPullUpConstantsRule(六)

    Hive优化器原理与源码解析系列–优化规则SortLimitPullUpConstantsRule(七)

    Hive优化器原理与源码解析系列–优化规则UnionPullUpConstantsRule(八)

    Hive优化器原理与源码解析系列–优化规则ProjectOverIntersectRemoveRule(九)

    Hive优化器原理与源码解析系列–优化规则ProjectSortTransposeRule(十)

    Hive优化器原理与源码解析系列–优化规则HiveProjectMergeRule(十一)

    Hive优化器原理与源码解析系列–优化规则HiveJoinAddNotNullRule(十二)

    Hive优化器原理与源码解析系列–优化规则HiveJoinCommuteRule(十三)

    Hive优化器原理与源码解析系列–优化规则PartitionPruneRule(十四)

    Hive优化器原理与源码解析系列–优化规则HivePreFilteringRule(十五)

    Hive优化器原理与源码解析系列–优化规则HiveAggregateProjectMergeRule(十六)

    Hive优化器原理与源码解析系列–优化规则AggregateProjectPullUpConstantsRule(十七)

    Hive优化器原理与源码解析系列–优化规则HiveFilterAggregateTransposeRule(十八)

    Hive优化器原理与源码解析系列–优化规则HiveIntersectMergeRule(十九)

    Hive优化器原理与源码解析系列–优化规则HiveFilterSetOpTransposeRule(二十)

    Hive优化器原理与源码解析系列–优化规则HiveFilterSortTransposeRule(二十一)

    Hive优化器原理与源码解析系列–优化规则FilterReduceExpressionsRule(二十二)

    Hive优化器原理与源码解析系列–优化规则HiveReduceExpressionsWithStatsRule(二十三)

    Hive优化器原理与源码解析系列–优化规则HivePointLookupOptimizerRule(二十四)

    优化器成本模型系列

    Hive优化器原理与源码解析系列—统计信息带谓词选择率Selectivity

    Hive优化器原理与源码解析系列—统计信息之选择性

    Hive优化器原理与源码解析系列—统计模块内存成本估算

    Hive优化器原理与源码解析系列–统计信息中间结果大小计算

    Hive优化器原理与源码解析系列—CBO成本模型CostModel(一)

    Hive优化器原理与源码解析系列—CBO成本模型CostModel(二)

    Hive优化器原理与源码解析系列—统计信息UniqueKeys列集合

    Hive优化器原理与源码解析—统计信息Parallelism并行度计算

    Hive优化器原理与源码解析—统计信息NDV唯一值数估