2026/4/8 14:18:21
网站建设
项目流程
按月网站建设,武威建设网站的网站,摄影网站设计思想,广告公司经营范围在大模型与智能体日常使用场景层出不穷的今天#xff0c;作为一名不断学习的信息化数字化从业者#xff0c;我们可以实践一下AI Agent基本开发流程#xff0c;理论联系实践#xff0c;以加深我们对AI Agent的了解。
Chaiys同学基于一个实际业务场景详细描述了AI Agent的开…在大模型与智能体日常使用场景层出不穷的今天作为一名不断学习的信息化数字化从业者我们可以实践一下AI Agent基本开发流程理论联系实践以加深我们对AI Agent的了解。Chaiys同学基于一个实际业务场景详细描述了AI Agent的开发实践案例可以用于熟悉RAG、工具调用、ReAct等概念可以体验LangChain和QwenAgent、AgentScope等AI Agent主流开发框架。简要回顾前文中高考查询小助手的业务背景准备两张表分别是每年的高考参加人数信息表college_entrance_examination以及每年高考的录取信息表college_entrance_admission然后开发一个AI Agent要求实现一个简单逻辑就是依据用户查询意图通过向量化语义匹配到最合适的表然后基于匹配到的表生成相应SQL再执行这个SQL得到结果最后对结果做个简单分析和输出。一、开发实践基于AgentScope框架前文中我们通过手写代码、LangChain框架顺序链SequentialChain和Agent、QwenAgent框架等方式实现了高考小助手智能体下面我们探索使用AgentScope来实现我们的小助手学习了解一下AgentScope框架。什么是AgentScopeAgentScope 是阿里通义实验室推出的开源智能体开发框架聚焦多智能体应用场景提供覆盖开发、部署与监控全生命周期的生产级解决方案。该框架以开发者为核心采用模块化设计原则与ReAct范式构建智能体体系支持动态工具配置、并行工具调用及自动化状态管理包含消息、模型、记忆和工具四大基础组件。核心优势对 ReAct 范式的深度集成与工程化支持实时介入Realtime Steering允许用户在智能体执行过程中例如当工具调用耗时过长或结果偏离预期时通过 CtrlC 或调用 interrupt 方法进行中断。框架会自动捕获中断信号保存当前状态和记忆并通过 handle_interrupt 方法进行优雅的后处理极大地提升了人机交互的灵活性和可控性。并行工具调用Parallel Tool Calls通过设置 parallel_tool_callsTrue当大模型生成多个工具调用指令时AgentScope 会使用 asyncio.gather 并行执行这些工具显著提高效率尤其适用于处理多个独立的、耗时的任务。结构化输出Structured Output与工具调用紧密结合允许开发者传入一个 pydantic.BaseModel 的子类作为参数。智能体会严格按照该模型的结构生成输出并将结果存储在返回消息的 metadata 字段中方便后续程序化处理确保了输出的可靠性和一致性。自主记忆与状态管理支持智能体自主管理其长期记忆和自动进行状态管理这对于构建复杂的、多轮对话的智能体至关重要。开箱即用的 ReActAgent框架直接提供了 ReActAgent 类将 ReAct 范式所需的“思考Reasoning”和“行动Acting”环节进行了系统性的封装和实现开发者无需从零开始搭建复杂的逻辑。丰富的内置功能ReActAgent 集成了多项高级功能包括但不限于高度的灵活性与可扩展性清晰的抽象基类提供了 AgentBase 和 ReActAgentBase 两个抽象基类。AgentBase 定义了所有智能体的基本接口如 reply, observe而 ReActAgentBase 则在此基础上增加了 _reasoning 和 _acting 等抽象方法专为 ReAct 范式设计。强大的钩子Hook机制在基类中预置了丰富的前置pre_和后置post_钩子函数例如 pre_reply, post_reasoning 等。开发者可以通过覆盖这些钩子在不修改核心逻辑的情况下轻松地插入自定义的监控、日志记录、数据预处理或后处理等逻辑。易于自定义开发者可以根据具体需求选择继承 AgentBase 或 ReActAgentBase 来创建完全自定义的智能体框架提供了坚实的底层支持让开发者可以专注于业务逻辑的实现。开发者友好优雅的错误与中断处理如前所述其基于 asyncio 的中断机制和抽象的 handle_interrupt 方法使得处理异常和用户干预变得非常规范和简单保证了程序的稳定性和用户体验。模块化设计框架将模型model、记忆memory、格式化器formatter、工具包toolkit等组件解耦开发者可以自由组合和替换例如使用不同的大模型API或内存存储方案。二、架构设计我们基于AgentScope实现我们的智能体主要实现多轮对话、问题拆分学习一些工具调用能力和记忆能力。总体设计设计如下三、代码实践具体代码实现如下import jsonimport asynciofrom agentscope.message import TextBlock, Msgfrom agentscope.tool import ToolResponse, Toolkitfrom agentscope.agent import AgentBase, ReActAgentfrom agentscope.formatter import OllamaChatFormatterfrom agentscope.memory import InMemoryMemoryfrom agentscope.model import OllamaChatModelfrom api_service import QueryService, SemanticService, AnalysisService# 初始化服务queryService QueryService()semanticService SemanticService()analysisService AnalysisService()# 自定义工具类# 根据输入文本语义匹配表结构每次返回一个最相关的表结构。对于需要多表查询的问题需要多次调用此工具。async def match_metadata(user_query: str) - ToolResponse: table semanticService.hybrid_search(user_query, 1) return ToolResponse( content[ TextBlock( typetext, textf{[t[table_info] for t in table]}, ), ], )# 根据输入的SQL进行执行。async def execute_sql(query_sql: str) - ToolResponse: result json.dumps(queryService.query_with_column(query_sql)) return ToolResponse( content[ TextBlock( typetext, textf{result}, ), ], )async def interactive_react_agent() - None: 创建一个支持多轮对话的ReAct智能体。 # 准备工具 toolkit Toolkit() toolkit.register_tool_function(match_metadata) toolkit.register_tool_function(execute_sql) jarvis ReActAgent( nameJarvis, sys_prompt 你是一个数据分析助手负责帮助用户查询数据库信息。 请特别注意用户的问题可能需要从多个表中查询数据。 1. 首先确定需要查询哪些数据 2. 使用match_metadata工具分别匹配包含这些数据的表结构 3. 对每个表生成相应的SQL查询语句 4. 执行查询并汇总结果 5. 最后计算并给出答案 请确保逐步执行不要跳过任何步骤。 , modelOllamaChatModel( model_nameqwen3:32b, # 指定模型名称 streamTrue, # 根据需要设置是否流式输出 enable_thinkingTrue, # 为Qwen3启用思考功能可选 # hosthttp://localhost:11434 # 如果Ollama不在默认地址需指定 ), formatterOllamaChatFormatter(), toolkittoolkit, memoryInMemoryMemory(), ) print(数据分析助手已启动输入问题进行查询输入exit退出) print(- * 50) while True: # 使用run_in_executor处理阻塞的input调用 user_input await asyncio.get_event_loop().run_in_executor( None, input, 用户: ) # 检查是否退出指令 [[1]] if user_input.strip().lower() exit: print(正在退出程序...) break if not user_input.strip(): continue # 创建消息并发送给智能体 msg Msg( nameuser, contentuser_input, roleuser, ) print(\nJarvis正在思考...) # 获取智能体响应 response await jarvis(msg) # 显示回答 print(f\nJarvis: {response.content}\n) print(- * 50)# 运行交互式智能体if __name__ __main__: asyncio.run(interactive_react_agent())AgentScope依赖于Python的3.10版本及以上版本这里我们使用Python3.13版本。pip官方库版本0.x比较旧直接源码安装AgentScope最新1.x版本安装git clone -b main https://github.com/agentscope-ai/agentscopecd agentscopepip install -e .该智能体基于 AgentScope 框架使用了以下核心组件ReActAgent具备“思考-行动”循环能力的智能体可调用工具并基于结果推理下一步指定推理次数max_iters默认循环10次。OllamaChatModel本地运行的大语言模型Qwen3:32b负责推理与生成 SQL封装ollama调用。Toolkit 自定义工具封装数据库操作能力执行 SQL、语义检索能力执行RAG检索。InMemoryMemory会话记忆保存对话历史。ReActAgent内每次问答后缓存推理时自动获取缓存的对话历史。OllamaChatFormatter格式化模型输入输出。自定义服务层QueryService, SemanticService, AnalysisService —— 提供底层数据库查询与语义检索能力。此智能体的核心是 ReActAgent 类它实现了 ReAct 范式即通过交替进行推理Reasoning和行动Acting来解决问题 。智能体会接收用户请求并启动“思考→行动→观察”的循环直到生成最终响应。四、测试结果QA1: 2016年考生人数 – 测试AgentScope基本工具调用能力QA2: 那一年录取人数有多少 – 测试AgentScope上下文记忆能力QA3: 2017年考生人数和录取人数分别有多少-- 测试推理能力数据分析助手已启动输入问题进行查询输入exit退出--------------------------------------------------用户: 2016年考生人数Jarvis正在思考...Jarvis(thinking): 好的我现在需要处理用户的问题“2016年考生人数”。首先我需要明确用户想要查询的是2016年的考生总人数还是某个特定地区或类型的考生人数。不过根据问题本身用户可能只是想知道全国范围内的总考生人数。接下来按照步骤我需要确定需要查询哪些数据。这里显然需要考生的记录可能涉及考生表表中应该包含年份和考生人数的信息。因此第一步是使用match_metadata工具来查找包含这些数据的表结构。调用match_metadata函数参数是用户的问题“2016年考生人数”。假设返回的表结构是exam_applicants其中包含year和number_of_applicants两个字段。接下来我需要生成相应的SQL查询语句从exam_applicants表中查询year为2016年的记录的number_of_applicants值。然后使用execute_sql工具执行这个SQL查询。假设查询结果返回的是2016年的考生人数为940万人。最后将结果通过generate_response工具返回给用户给出明确的答案并说明数据来源和可能的注意事项比如数据是否为最终统计等。需要注意的是如果存在多个相关表比如不同地区的考生表可能需要进行汇总。但根据问题描述用户可能只需要总人数因此可能只需要查询主表。如果存在数据不一致或多个表的情况可能需要进一步确认但当前情况下按最简处理。{ type: tool_use, id: 0_match_metadata, name: match_metadata, input: { user_query: 2016年考生人数 }}调用大模型llama2向量化2016年考生人数地址http://localhost:11434/api/embeddings自然语言语义检索字段成功匹配到的元数据信息[{score: 0.6198425, table_info: {表名: college_entrance_admission, 表备注: 录取人数与普通高校数信息表包含字段录取年份(主键)、录取人数(万人)、招生高\\n校数、本科录取人数(万人)、专科录取人数(万人), 字段列表: [{字段名: admission_year, 字段类型: int, 字段备注: 录取年份}, ...}, {score: 0.6008911, table_info: {表名: college_entrance_examination, 表备注: 考生人数与复读人数信息表包含字段高考年份(主键)、考生人数(万人)、复读人数\\n(万人), 字段列表: [{字段名: examination_year, 字段类型: int, 字段备注: 高考年份}, ...}]自然语言分词搜索字段成功匹配到的元数据信息[{score: 1.4999503, table_info: {表名: college_entrance_examination, 表备注: 考生人数与复读人数信息表包含字段高考年份(主键)、考生人数(万人)、复读人数\\n(万人), 字段列表: [{字段名: examination_year, 字段类型: int, 字段备注: 高考年份}, ...]}]}, {score: 0.33530667, table_info: {表名: college_entrance_admission, 表备注: 录取人数与普通高校数信息表包含字段录取年份(主键)、录取人数(万人)、招生高\\n校数、本科录取人数(万人)、专科录取人数(万人), 字段列表: [{字段名: admission_year, ...]}]}]自然语言混合检索字段成功匹配到的元数据信息[{id: JAFTZpkBNpD6YtdVxbQU, table_info: {表名: college_entrance_examination, 表备注: 考生人数与复读人数信息表包含字段高考年份(主键)、考生人数(万人)、复读人数\\n(万人), 字段列表: [{字段名: examination_year, 字段类型: int, 字段备注: 高考年份}, {字段名: candidates_count, 字段类型: decimal(10,2), 字段备注: 考生人数(万\\n人)}, {字段名: retake_count, 字段类型: decimal(10,2), 字段备注: 复读人数(万人)}]}, semantic_score: 0.6008911, keyword_score: 1.4999503, combined_score: 0.8706088600000002, ...]}]system: { type: tool_result, id: 0_match_metadata, name: match_metadata, output: [ { type: text, text: } ]}2025-09-24 19:54:24,041 | WARNING | _ollama_formatter:_format:121 - Unsupported block type thinking in the message, skipped.Jarvis(thinking): 好的用户需要查询2016年的考生人数。首先我需要确定数据存储的表结构。通过调用match_metadata工具发现有一个名为college_entrance_examination的表其中包含examination_year、candidates_count和retake_count三个字段。用户的问题只需要考生人数所以接下来需要生成对应的SQL查询语句。应该使用SELECT语句从该表中查询examination_year等于2016年的candidates_count。然后执行这个SQL获取结果。假设查询结果返回了940万人那么最终答案就是2016年的考生人数为940万人。需要确保步骤正确没有遗漏。{ type: tool_use, id: 0_execute_sql, name: execute_sql, input: { query_sql: SELECT candidates_count FROM college_entrance_examination WHERE examination_year 2016; }}system: { type: tool_result, id: 0_execute_sql, name: execute_sql, output: [ { type: text, text: } ]}Jarvis(thinking): 好的用户问的是2016年的考生人数。首先我需要确定数据存储在哪个表里。之前调用了match_metadata工具找到了college_entrance_examination表里面有examination_year、candidates_count和retake_count字段。接下来我需要构造一个SQL查询从该表中筛选出examination_year等于2016年的记录并获取candidates_count的值。执行这个SQL后返回的结果是940.0单位是万人。所以2016年的考生人数就是940万人。最后将结果以自然的方式呈现给用户确保数值和单位都正确无误。Jarvis: 2016年的考生人数为940万人。--------------------------------------------------用户: 那一年录取人数有多少Jarvis正在思考...Jarvis(thinking): 好的用户现在问的是“那一年录取人数有多少”这里的“那一年”应该指的是之前提到的2016年。我需要先确认用户的问题是否需要从数据库中查询数据。首先用户之前询问了2016年的考生人数现在想知道同一年的录取人数。因此我需要查找2016年的录取人数数据。接下来我需要确定数据库中是否有相关的表和字段。使用match_metadata工具来匹配包含录取人数信息的表结构。用户的问题涉及“录取人数”所以需要查找表中是否有相关字段。可能的表名可能是与高考相关的比如之前提到的college_entrance_examination或者另一个表比如admission_statistics。执行match_metadata工具参数是“2016年录取人数”。根据返回的结果如果存在相关表比如admission_statistics包含字段如enrollment_year年份和admitted_count录取人数那么就可以生成相应的SQL查询。假设返回的表结构是admission_statistics包含年份和录取人数字段。然后需要构造SQL查询选择2016年的录取人数。例如SELECT admitted_count FROM admission_statistics WHERE enrollment_year 2016;执行这个SQL查询后获取结果比如返回录取人数是749万人。最后生成响应告诉用户2016年的录取人数并可能计算录取率比如749/940≈79.7%。需要确保步骤正确先匹配元数据再执行查询最后生成回答。同时注意字段名和表名的正确性以及可能的计算步骤。{ type: tool_use, id: 0_match_metadata, name: match_metadata, input: { user_query: 2016年录取人数 }}调用大模型llama2向量化2016年录取人数地址http://localhost:11434/api/embeddings自然语言语义检索字段成功匹配到的元数据信息[{score: 0.5988846, table_info: {表名: college_entrance_admission, 表备注: 录取人数与普通高校数信息表包含字段录取年份(主键)、录取人数(万人)、招生高\\n校数、本科录取人数(万人)、专科录取人数(万人), 字段列表: [{字段名: admission_year, 字段类型: int, 字段备注: 录取年份},...}, {score: 0.59373474, table_info: {表名: college_entrance_examination, 表备注: 考生人数与复读人数信息表包含字段高考年份(主键)、考生人数(万人)、复读人数\\n(万人), 字段列表: [{字段名: examination_year, 字段类型: int, 字段备注: 高考年份},...}]自然语言分词搜索字段成功匹配到的元数据信息[{score: 1.2747635, table_info: {表名: college_entrance_admission, 表备注: 录取人数与普通高校数信息表包含字段录取年份(主键)、录取人数(万人)、招生高\\n校数、本科录取人数(万人)、专科录取人数(万人), 字段列表: [...{字段名: admission_count, 字段类型: decimal(10,2), 字段备注: 录取人数(万\\n人)},...}]自然语言混合检索字段成功匹配到的元数据信息[{id: IwFTZpkBNpD6YtdVw7R2, table_info: {表名: college_entrance_admission, 表备注: 录取人数与普通高校数信息表包含字段录取年份(主键)、录取人数(万人)、招生高\\n校数、本科录取人数(万人)、专科录取人数(万人), 字段列表: [..., {字段名: admission_count, 字段类型: decimal(10,2), 字段备注: 录取人数(万\\n人)}, ...]}, semantic_score: 0.5988846, keyword_score: 1.2747635, combined_score: 0.80164827, highlight: ...]system: { type: tool_result, id: 0_match_metadata, name: match_metadata, output: [ { type: text, text: } ]}Jarvis(thinking): 好的用户现在问的是“那一年录取人数有多少”也就是2016年的录取人数。之前已经处理过2016年考生人数的查询现在需要处理录取人数。首先我需要确定用户的问题涉及哪些数据这里显然是2016年的录取人数。接下来使用match_metadata工具来查找包含录取人数的表结构。用户的问题关键词是“录取人数”所以调用match_metadata函数参数是“2016年录取人数”。根据返回的结果找到了表college_entrance_admission其中包含admission_count字段即录取人数万人并且表中有admission_year字段作为年份。现在需要生成对应的SQL查询语句。需要从college_entrance_admission表中查询admission_count条件是admission_year等于2016。因此构造的SQL语句应该是SELECT admission_count FROM college_entrance_admission WHERE admission_year 2016;。执行这个SQL语句后预期会得到2016年的录取人数数据。假设返回的结果是749万人那么最终的回答就是2016年的录取人数为749万人。需要确保所有步骤正确特别是表名和字段名的准确性以及条件的正确应用。如果有任何错误比如表名或字段名不正确或者年份条件错误都会导致结果不准确所以需要仔细检查每个步骤。{ type: tool_use, id: 0_execute_sql, name: execute_sql, input: { query_sql: SELECT admission_count FROM college_entrance_admission WHERE admission_year 2016; }}system: { type: tool_result, id: 0_execute_sql, name: execute_sql, output: [ { type: text, text: } ]}Jarvis(thinking): 好的用户现在问的是“那一年录取人数有多少”也就是2016年的录取人数。之前已经处理过2016年考生人数的查询现在需要处理录取人数。首先我需要确定用户的问题涉及哪些数据。用户提到的“录取人数”应该对应数据库中的某个表。根据之前的步骤用户的问题可能需要查询不同的表所以需要先用match_metadata工具来找到正确的表结构。调用match_metadata工具参数是“2016年录取人数”。根据返回的结果找到了表college_entrance_admission其中包含admission_count字段即录取人数。接下来需要生成SQL查询语句从该表中选取admission_year为2016年的admission_count。然后执行这个SQL查询得到结果。根据返回的数据2016年的录取人数是772万人。最后使用generate_response工具将结果以自然语言回复给用户确保信息准确且完整。Jarvis: 2016年的录取人数为772万人。--------------------------------------------------用户: 2017年考生人数和录取人数分别有多少Jarvis正在思考...Jarvis(thinking): 好的用户现在问的是2017年的考生人数和录取人数。首先我需要处理考生人数的部分。根据之前的对话用户询问过2016年的考生人数当时的表是college_entrance_examination字段是examination_year和candidates_count。所以2017年的考生人数应该也是从这个表中查询只需要把年份改成2017。接下来是录取人数。用户之前问过2016年的录取人数对应的表是college_entrance_admission字段是admission_year和admission_count。同样2017年的录取人数应该查询这个表年份改为2017。现在需要确认这两个表是否都有2017年的数据。可能需要分别调用match_metadata工具来验证表结构是否包含所需的字段但根据之前的回复这两个表的结构已经明确包含年份和对应的人数字段所以可以直接生成SQL查询。对于考生人数SQL语句应该是SELECT candidates_count FROM college_entrance_examination WHERE examination_year 2017; 对于录取人数SQL语句是SELECT admission_count FROM college_entrance_admission WHERE admission_year 2017;。执行这两个查询后将结果汇总分别给出考生人数和录取人数。假设数据库中有数据应该返回对应的数值。最后用generate_response将结果组合成自然语言的回答。...... plaintext Jarvis(thinking): 好的用户现在问的是2017年的考生人数和录取人数分别有多少。我需要先处理考生人数的部分。根据之前的对话流程用户之前询问过2016年的考生人数和录取人数我分别通过查询两个不同的表得到了结果。现在用户转向2017年应该同样需要查询这两个表。首先用户的问题提到了“考生人数”这应该对应到“college_entrance_examination”表这个表包含高考年份和考生人数等字段。我需要使用match_metadata工具来确认表结构是否正确。根据用户之前的问题已经知道这个表的字段有examination_year、candidates_count和retake_count。接下来需要生成SQL查询语句选择2017年的考生人数。之前的例子中用户查询2016年时用了SELECT candidates_count FROM college_entrance_examination WHERE examination_year 2016;所以这里应该类似把年份改为2017。接下来是录取人数的部分用户之前询问2016年录取人数时我通过match_metadata找到了“college_entrance_admission”表该表包含admission_year和admission_count等字段。同样现在需要查询2017年的录取人数应该使用相同的表并生成对应的SQL语句SELECT admission_count FROM college_entrance_admission WHERE admission_year 2017;。需要注意的是用户的问题同时询问了考生人数和录取人数所以需要分别执行两次查询分别获取这两个数据。然后将结果汇总给出一个包含两者的回答。另外必须确保两次查询的年份都是2017年避免混淆。如果其中一个表没有2017年的数据可能需要进一步处理但根据之前的表结构假设数据是存在的。最后生成响应时要明确说明两个数字确保用户的问题得到完整回答。{ type: tool_use, id: 0_execute_sql, name: execute_sql, input: { query_sql: SELECT candidates_count FROM college_entrance_examination WHERE examination_year 2017; }}system: { type: tool_result, id: 0_execute_sql, name: execute_sql, output: [ { type: text, text: } ]}现在需要分别执行这两个SQL查询。先执行考生人数的查询得到结果后再执行录取人数的查询。然后把两个结果合并形成最终的回答。需要确保两个年份都是2017年避免混淆。最后用generate_response返回结果。{ type: tool_use, id: 0_execute_sql, name: execute_sql, input: { query_sql: SELECT admission_count FROM college_entrance_admission WHERE admission_year 2017; }}system: { type: tool_result, id: 0_execute_sql, name: execute_sql, output: [ { type: text, text: } ]}Jarvis(thinking): 好的用户现在问的是2017年的考生人数和录取人数。我需要先处理这两个数据点。首先考生人数。之前用户问过2016年的所以结构应该是类似的。使用match_metadata工具查找对应的表应该是college_entrance_examination表字段是candidates_count条件是examination_year2017。执行SQL后得到的结果是940.0万人和2016年一样可能那几年考生人数稳定。然后是录取人数。对应的表是college_entrance_admission字段admission_count条件admission_year2017。执行后得到761.49万人比2016年的772万略少。需要注意这里的数据是否有小数点后的变化可能反映了录取率的变化。接下来需要将这两个结果整合到回答中确保数字准确并且用清晰的语句分开说明考生和录取人数。同时检查是否有其他相关数据需要补充比如本科和专科的录取人数但用户只问了总录取人数所以可能不需要额外信息。最后生成回答确认无误后返回。Jarvis: 2017年的考生人数为940万人录取人数为761.49万人。--------------------------------------------------用户: Process finished with exit code 137 (interrupted by signal 9:SIGKILL)QA1: 2016年考生人数 – 测试AgentScope基本工具调用能力回答正确流程调用match_metadata语义检索匹配元数据然后生成SQL再调用execute_sql执行查询数据后分析。QA2: 那一年录取人数有多少 – 测试AgentScope上下文记忆能力回答符合我们的预期根据上下文判断那一年是2026年。QA3: 2017年考生人数和录取人数分别有多少-- 测试推理能力回答正确根据历史对话的回答中的表结构判断需要进行问题的拆分然后使用之前相同的表只需要把条件从2016改为2017然后分别生成SQL再调用execute_sql执行查询数据后再合并分析。五、总结从上述测试中我们体验了AgentScope框架的优雅之处包括上下文记忆支持多轮对话数据传递等能力此外AgentScope还有长期记忆、MCP调用等更多实用能力同学们可以自行学习探索~如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…学习是一个过程只要学习就会有挑战。天道酬勤你越努力就会成为越优秀的自己。如果你能在15天内完成所有的任务那你堪称天才。然而如果你能完成 60-70% 的内容你就已经开始具备成为一名大模型 AI 的正确特征了。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】