1. 从执行者到管理者我的AI Agent项目认知转变刚开始捣鼓这个AI Agent项目时我完全走错了方向。我的第一反应是怎么教AI写SQL我甚至开始列清单——“日期用BETWEEN”、“多表查询记得JOIN”、“字段名用下划线别用驼峰”……列到一半我突然觉得不对劲。这清单根本列不完。而且说实话我自己的SQL水平也就那样我凭什么去“教”一个AI呢直到我的导师点醒了我“AI不需要你教它SQL。它已经会了。它懂的比你多。”这句话让我醍醐灌顶。问题根本不在于AI不会写代码而在于它对我的数据库一无所知。这就像一个转校生数学底子扎实公式定理倒背如流。但你给他一道应用题“A、B两地相距500公里”他懵了因为他不知道A和B是什么地方。题目说“小明的速度是60公里/小时”他也不知道小明是谁。AI面临的正是这种困境。你让它“找出所有高风险患者”它不知道“高风险”在你的业务里怎么定义。你的数据库里有个risk_level字段它不知道。这个字段的值是‘高’、‘中’、‘低’它也不知道。它空有一身本领却缺少了最关键的信息背景。这个认知的转变让我从一个试图手把手教AI写代码的“执行者”变成了一个为AI高效组织、传递信息的“管理者”。这不仅仅是技术策略的调整更是一次根本性的思维模式升级。如果你也在探索如何让AI Agent真正理解你的业务并为你工作那么接下来的内容或许能帮你少走很多弯路。2. 核心问题解析AI不缺能力缺的是“上下文”我们常常高估了AI的“常识”又低估了它的“能力”。在数据库查询这个具体场景下这种错位表现得尤为明显。2.1 能力与信息的割裂现代的大语言模型LLM经过海量代码和文本的训练对SQL的语法、常见函数、甚至一些优化技巧都有相当程度的掌握。它“知道”SELECT * FROM table WHERE condition这个结构也“知道”JOIN、GROUP BY、HAVING这些关键字的用法。从这个角度看它确实不需要我们从零开始教它写SQL。然而这种知识是通用的、脱离具体环境的。当它面对你的私有数据库时它立刻变成了一个“盲人”。它不知道你的公司把用户信息存在叫users还是customers的表里不知道“订单状态”这个字段是status、order_status还是state更不知道status5在你的系统里代表“已发货”还是“已取消”。这种具体业务环境下的知识我们称之为“上下文”Context或“领域知识”Domain Knowledge。AI缺的正是这个。2.2 “转校生”困境的深入类比让我们再深入一下“转校生”这个类比。假设转校生的数学能力是研究生水平对应AI强大的代码生成能力而应用题是小学生水平对应我们日常的查询需求。问题不在于他解不了方程而在于他缺乏理解题目所需的“背景故事”。未知实体题目中的“A地”、“B地”、“小明”是未定义的符号。在数据库中这些就是表名、字段名、枚举值。AI不知道patient_id和pt_id哪个是你的主键。隐含规则题目可能隐含了“速度不变”、“同时出发”等条件。在业务中这些就是商业规则。比如“VIP客户”可能定义为“最近一年消费金额大于10万且投诉次数小于2的用户”。这条规则写在产品经理的文档里却没写在数据库的注释里。度量标准题目中的“高风险”、“高效率”需要量化定义。在系统中“高风险患者”可能是risk_score 80也可能是diagnosis IN (‘A’, ‘B’, ‘C’)。AI无法凭空猜测这些阈值和列表。因此我们的核心任务发生了根本性转变从“教授技能”Teaching How转变为“提供上下文”Providing Context。我们不再是那个解题的学生而是那个为解题者厘清题目背景的助教或出题人。注意这里存在一个常见误区即试图通过“多轮对话”或“让AI自己猜”来弥补上下文缺失。比如先让AI生成一个查询发现表名不对再告诉它正确的表名如此反复。这种方法效率极低且会让AI在错误的上下文中形成混乱的推理。正确做法是一开始就尽可能清晰、完整地提供上下文。3. 解决方案成为AI的“信息架构师”既然明确了问题是“信息缺失”那么解决方案就是“高效补全信息”。这要求我们扮演一个新的角色信息架构师。我们的工作不是写代码而是为AI编写一份它能理解的“项目说明书”。3.1 信息传递的完整框架高效地向AI传递数据库上下文需要一个结构化的框架。这个框架不仅仅是表结构而是一个包含多层次信息的“信息包”元数据概览给AI一个全局地图。数据库名称、简要描述。包含哪些主要的业务主题域如“客户管理”、“订单交易”、“风控审核”。核心表数量及关键表列表。表结构详情这是最核心的部分需要以高度压缩、格式化的方式呈现。表名清晰、准确的表名。表注释/业务含义用一句话说明这张表是干什么的。例如“orders表记录所有客户订单的核心信息包括订单状态、金额、创建时间等。”字段清单每个字段的字段名、数据类型、是否可为空、是否为主键/外键、以及最重要的——业务含义。例如“status(int, NOT NULL): 订单状态。1待支付2已支付3已发货4已完成5已取消。”表关系图明确表与表之间的关联关系。这能帮助AI理解如何正确地JOIN多张表。可以用文本简洁描述如“orders.user_id字段是外键关联到users.id。”关键业务规则与约束那些没有体现在表结构里但对查询至关重要的逻辑。计算字段逻辑如“用户年龄age由出生日期birth_date与当前日期计算得出表中不直接存储。”软删除约定如“所有表都有一个is_deleted字段默认为0标记为1的记录代表已删除常规查询应排除。”核心业务定义如“本文开头提到的‘高风险患者’定义为ob_profile.risk_level ‘high’。”3.2 信息压缩与格式化从DDL到“速记符”直接给AI扔几千字的原始数据库CREATE TABLE语句DDL是低效的。AI需要处理这些冗长的、包含大量技术细节如引擎类型、默认字符集的文本会消耗不必要的上下文窗口Token并可能分散其对核心信息的注意力。我们需要做一次“信息压缩”目标是零信息损失但体积最小化可读性最大化。原始DDL示例CREATE TABLE patient ( patient_id int(11) NOT NULL AUTO_INCREMENT COMMENT 患者唯一ID, name varchar(100) NOT NULL COMMENT 患者姓名, birth_date date DEFAULT NULL COMMENT 出生日期, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 记录创建时间, PRIMARY KEY (patient_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT患者基本信息表;压缩格式化后patient (患者基本信息表): - patient_id: int*PK, AI, NN - “患者唯一ID” - name: str(100)*NN - “患者姓名” - birth_date: date - “出生日期” - created_at: ts*NN, defaultCURRENT_TIMESTAMP - “记录创建时间”压缩技巧解析使用简写int代替int(11)str代替varcharts代替timestampAI表示AUTO_INCREMENT。符号标记关键属性用*PK表示主键*NN表示NOT NULL*FK表示外键可附带引用说明。这比文字更醒目。分离注释将字段的业务含义用引号或箭头明确标出与字段定义分开便于AI分别解析“结构”和“语义”。省略技术细节ENGINE、DEFAULT CHARSET等与查询逻辑无关的信息可以完全省略。经过这样的处理信息密度大幅提升AI能更快地抓取关键点同时为我们节省了宝贵的上下文Token可以用来传递更多其他重要信息如复杂的业务规则。3.3 动态上下文与静态上下文的管理在实际的AI Agent交互中信息传递分为两类静态上下文在Agent初始化或会话开始时一次性提供的基础信息如完整的数据库Schema压缩文档、产品核心业务 glossary术语表。这部分信息构成了AI理解你业务的基石。动态上下文在对话过程中根据当前任务需要额外补充的信息。例如用户说“帮我查一下上个月上海的销售情况”除了静态的Schema你可能需要动态地告诉AI“‘上海’在city字段中存储的值为‘上海市’‘销售情况’主要指orders表中的total_amount字段‘上个月’指当前时间的前一个自然月。”一个成熟的AI Agent系统会有一套机制来管理这两种上下文确保AI在任何时候都拥有“刚刚好”的信息来完成手头任务既不会信息不足而瞎猜也不会被海量无关信息淹没。4. 实操构建一个AI友好的数据库上下文文档理论说完了我们来点实际的。假设我们有一个简单的电商数据库包含users用户、products产品、orders订单三张表。下面我将演示如何为其构建一份AI友好的上下文文档。4.1 第一步梳理与提取原始信息首先从数据库或设计文档中整理出最原始的信息。这里我们跳过真实的DDL直接列出核心要素表users存储注册用户信息。id: 主键自增整数。username: 用户名唯一非空。email: 邮箱非空。city: 所在城市。created_at: 注册时间。表products存储商品信息。product_id: 主键。name: 商品名称。category: 商品类别如‘electronics’, ‘clothing’。price: 价格单位元。stock: 库存数量。表orders存储订单信息。order_id: 主键。user_id: 外键关联users.id。product_id: 外键关联products.product_id。quantity: 购买数量。status: 订单状态‘pending’, ‘paid’, ‘shipped’, ‘delivered’, ‘cancelled’。order_date: 下单日期。业务规则订单总价 products.price*orders.quantity。只有status为‘paid’及之后的订单才计入有效销售。users.city字段存储的是完整的城市名如“北京市”、“上海市”。4.2 第二步按照框架进行格式化压缩现在我们将上述信息转化为结构化、压缩化的文档。# 数据库上下文简易电商系统 ## 1. 概览 - **数据库名**ecommerce - **描述**包含用户、商品、订单核心数据的简易电商系统。 - **核心表**3张 (users, products, orders) ## 2. 表结构详情 ### 2.1 表: users (用户信息表) - id: int*PK, AI, NN - “用户唯一ID自增” - username: str(50)*NN, UNIQUE - “用户名用于登录唯一” - email: str(100)*NN - “用户邮箱” - city: str(50) - “用户所在城市存储完整名称如‘北京市’” - created_at: ts*NN, defaultCURRENT_TIMESTAMP - “用户注册时间” ### 2.2 表: products (商品信息表) - product_id: int*PK, AI, NN - “商品唯一ID自增” - name: str(200)*NN - “商品名称” - category: str(50) - “商品类别例如‘electronics’(电子产品), ‘clothing’(服装)” - price: decimal(10,2)*NN - “商品单价单位元” - stock: int*NN - “当前库存数量” ### 2.3 表: orders (订单信息表) - order_id: int*PK, AI, NN - “订单唯一ID自增” - user_id: int*NN, *FK - “下单用户ID关联 users.id” - product_id: int*NN, *FK - “购买的商品ID关联 products.product_id” - quantity: int*NN - “购买数量” - status: str(20)*NN - “订单状态。可选值: ‘pending’(待支付), ‘paid’(已支付), ‘shipped’(已发货), ‘delivered’(已送达), ‘cancelled’(已取消)” - order_date: date*NN - “订单创建日期年月日” ## 3. 表关系 - orders.user_id 引用 users.id (一个用户可以有多个订单) - orders.product_id 引用 products.product_id (一个商品可以被多个订单购买) ## 4. 关键业务规则 1. **订单金额计算**订单总金额 products.price * orders.quantity。数据库中无此字段需查询时计算。 2. **有效订单定义**在分析销售数据时通常只考虑状态为 ‘paid’, ‘shipped’, ‘delivered’ 的订单。‘pending’和‘cancelled’不计入有效销售。 3. **城市查询**users.city字段存储完整中文名称。查询时请使用精确名称例如 city ‘上海市’。4.3 第三步在Prompt中应用此上下文当你需要AI帮你写查询时将这个文档作为系统提示词System Prompt的一部分或者放在用户消息的开头。示例Prompt你是一个专业的SQL助手。请根据以下数据库结构信息为我编写SQL查询。 【数据库上下文开始】 此处插入上面格式化好的完整文档 【数据库上下文结束】 现在请帮我写一个查询找出2023年第四季度10月1日至12月31日在“上海市”下单最多的前5名用户显示他们的用户名、邮箱以及下单总金额按总金额降序排列。有了这样一份清晰的上下文AI就能像了解自己手掌一样了解你的数据库写出准确、高效的SQL。它知道order_date是日期字段知道city要匹配“上海市”知道总金额需要关联products表进行计算也知道要过滤掉cancelled的订单如果业务规则要求。5. 思维进阶从数据库到广义的“信息管理”通过数据库Schema传递这个案例我们可以将这种思维模式推广到几乎所有与AI协作的场景。核心原则不变AI是拥有强大通用能力的“转校生”而我们是掌握具体领域知识的“本地向导”。5.1 其他场景的应用代码生成与理解当你让AI帮你写一个函数时不要只说“写一个用户登录函数”。你需要提供项目使用的框架Flask还是Django、已有的用户模型结构、密码加密方式bcrypt、Session管理方式、以及相关的工具函数如发送邮件的send_email函数签名。你需要把这些“上下文”组织好喂给AI。文档分析与总结让AI总结一份长文档你需要先告诉它文档的类型技术报告会议纪要、你关心的核心主题是什么、需要总结成什么格式 bullets points一段话。客服问答机器人构建一个回答产品问题的Agent你需要提供的“上下文”包括产品FAQ、用户手册、最新的产品更新日志、以及一些常见的问法同义词比如“怎么付款”和“支付方式”是同一个问题。5.2 核心能力的迁移信息组织力这引出了我最大的感悟在AI时代一个程序员或者说任何知识工作者的核心竞争力正在从“具体技能的熟练度”向“信息组织与架构的能力”迁移。过去执行者模式价值体现在“我能多快写出一个复杂的SQL查询”、“我能多熟练地调试一个并发bug”。我们比拼的是对工具和语言本身的掌握深度。现在与未来管理者模式价值将更多体现在“我能否清晰地向AI描述这个复杂的业务系统”、“我能否把模糊的产品需求转化为结构化的、AI可理解的约束条件”、“我能否设计一套机制让AI在不同阶段都能获取恰到好处的信息”。这并不意味着编程技能不再重要而是它的重心发生了偏移。编程将更多地成为我们与AI沟通、对AI进行“编程”的手段。我们写的代码可能不再是直接实现业务逻辑的代码而是用来组织、筛选、传递信息给AI的“胶水代码”和“管理代码”。5.3 实践中的挑战与心得在实际操作中这种思维转变会遇到一些挑战信息过载与不足的平衡给多少信息才算够一开始容易走向两个极端要么给得太少AI不断猜错要么事无巨细把整个项目的代码库都塞进去导致AI注意力分散成本高昂。我的经验是分层递进先给最核心、最通用的上下文如数据库核心Schema、主要API接口。如果AI在执行中表现出对某部分信息的缺失例如它问“status字段有哪些可能的值”再动态补充这部分更细节的上下文。这需要你对系统的信息层次有很好的把握。动态上下文的维护在长时间的对话或多轮任务中如何让AI记住之前的对话历史和已经澄清过的信息这需要设计对话状态管理。简单的做法是在每次提问时都把关键的、已确定的信息摘要再次附上。复杂的则需要引入向量数据库等工具来存储和检索历史上下文。“未知的未知”最难的部分是你有时甚至不知道AI缺什么信息。直到它产生一个看起来合理但完全错误的输出时你才恍然大悟“哦我忘了告诉它我们这个表里有个软删除标记”这要求我们具备极强的同理心和换位思考能力要时刻以AI的视角来审视我们提供的信息是否完备。踩过几次坑之后我养成了一个习惯在让AI执行任何任务之前先花几分钟时间像给一个新入职的同事做培训一样在脑子里过一遍——“要完成这件事他需要知道哪些最基本的信息” 把这些信息条理清晰地列出来往往事半功倍。这个从“Doer”到“Manager”的转变起初会有些不适应仿佛自己的“硬技能”被削弱了。但当你看到AI在你提供的清晰上下文指引下高效、准确地完成一个个复杂任务时你会体会到一种更高层次的掌控感和杠杆效应。你不再只是一个码农你成了一个指挥智能资源的架构师。这或许就是AI时代给我们带来的最深刻的职业进化方向。
从执行者到管理者:AI Agent项目中的信息架构思维转变
发布时间:2026/5/28 15:47:38
1. 从执行者到管理者我的AI Agent项目认知转变刚开始捣鼓这个AI Agent项目时我完全走错了方向。我的第一反应是怎么教AI写SQL我甚至开始列清单——“日期用BETWEEN”、“多表查询记得JOIN”、“字段名用下划线别用驼峰”……列到一半我突然觉得不对劲。这清单根本列不完。而且说实话我自己的SQL水平也就那样我凭什么去“教”一个AI呢直到我的导师点醒了我“AI不需要你教它SQL。它已经会了。它懂的比你多。”这句话让我醍醐灌顶。问题根本不在于AI不会写代码而在于它对我的数据库一无所知。这就像一个转校生数学底子扎实公式定理倒背如流。但你给他一道应用题“A、B两地相距500公里”他懵了因为他不知道A和B是什么地方。题目说“小明的速度是60公里/小时”他也不知道小明是谁。AI面临的正是这种困境。你让它“找出所有高风险患者”它不知道“高风险”在你的业务里怎么定义。你的数据库里有个risk_level字段它不知道。这个字段的值是‘高’、‘中’、‘低’它也不知道。它空有一身本领却缺少了最关键的信息背景。这个认知的转变让我从一个试图手把手教AI写代码的“执行者”变成了一个为AI高效组织、传递信息的“管理者”。这不仅仅是技术策略的调整更是一次根本性的思维模式升级。如果你也在探索如何让AI Agent真正理解你的业务并为你工作那么接下来的内容或许能帮你少走很多弯路。2. 核心问题解析AI不缺能力缺的是“上下文”我们常常高估了AI的“常识”又低估了它的“能力”。在数据库查询这个具体场景下这种错位表现得尤为明显。2.1 能力与信息的割裂现代的大语言模型LLM经过海量代码和文本的训练对SQL的语法、常见函数、甚至一些优化技巧都有相当程度的掌握。它“知道”SELECT * FROM table WHERE condition这个结构也“知道”JOIN、GROUP BY、HAVING这些关键字的用法。从这个角度看它确实不需要我们从零开始教它写SQL。然而这种知识是通用的、脱离具体环境的。当它面对你的私有数据库时它立刻变成了一个“盲人”。它不知道你的公司把用户信息存在叫users还是customers的表里不知道“订单状态”这个字段是status、order_status还是state更不知道status5在你的系统里代表“已发货”还是“已取消”。这种具体业务环境下的知识我们称之为“上下文”Context或“领域知识”Domain Knowledge。AI缺的正是这个。2.2 “转校生”困境的深入类比让我们再深入一下“转校生”这个类比。假设转校生的数学能力是研究生水平对应AI强大的代码生成能力而应用题是小学生水平对应我们日常的查询需求。问题不在于他解不了方程而在于他缺乏理解题目所需的“背景故事”。未知实体题目中的“A地”、“B地”、“小明”是未定义的符号。在数据库中这些就是表名、字段名、枚举值。AI不知道patient_id和pt_id哪个是你的主键。隐含规则题目可能隐含了“速度不变”、“同时出发”等条件。在业务中这些就是商业规则。比如“VIP客户”可能定义为“最近一年消费金额大于10万且投诉次数小于2的用户”。这条规则写在产品经理的文档里却没写在数据库的注释里。度量标准题目中的“高风险”、“高效率”需要量化定义。在系统中“高风险患者”可能是risk_score 80也可能是diagnosis IN (‘A’, ‘B’, ‘C’)。AI无法凭空猜测这些阈值和列表。因此我们的核心任务发生了根本性转变从“教授技能”Teaching How转变为“提供上下文”Providing Context。我们不再是那个解题的学生而是那个为解题者厘清题目背景的助教或出题人。注意这里存在一个常见误区即试图通过“多轮对话”或“让AI自己猜”来弥补上下文缺失。比如先让AI生成一个查询发现表名不对再告诉它正确的表名如此反复。这种方法效率极低且会让AI在错误的上下文中形成混乱的推理。正确做法是一开始就尽可能清晰、完整地提供上下文。3. 解决方案成为AI的“信息架构师”既然明确了问题是“信息缺失”那么解决方案就是“高效补全信息”。这要求我们扮演一个新的角色信息架构师。我们的工作不是写代码而是为AI编写一份它能理解的“项目说明书”。3.1 信息传递的完整框架高效地向AI传递数据库上下文需要一个结构化的框架。这个框架不仅仅是表结构而是一个包含多层次信息的“信息包”元数据概览给AI一个全局地图。数据库名称、简要描述。包含哪些主要的业务主题域如“客户管理”、“订单交易”、“风控审核”。核心表数量及关键表列表。表结构详情这是最核心的部分需要以高度压缩、格式化的方式呈现。表名清晰、准确的表名。表注释/业务含义用一句话说明这张表是干什么的。例如“orders表记录所有客户订单的核心信息包括订单状态、金额、创建时间等。”字段清单每个字段的字段名、数据类型、是否可为空、是否为主键/外键、以及最重要的——业务含义。例如“status(int, NOT NULL): 订单状态。1待支付2已支付3已发货4已完成5已取消。”表关系图明确表与表之间的关联关系。这能帮助AI理解如何正确地JOIN多张表。可以用文本简洁描述如“orders.user_id字段是外键关联到users.id。”关键业务规则与约束那些没有体现在表结构里但对查询至关重要的逻辑。计算字段逻辑如“用户年龄age由出生日期birth_date与当前日期计算得出表中不直接存储。”软删除约定如“所有表都有一个is_deleted字段默认为0标记为1的记录代表已删除常规查询应排除。”核心业务定义如“本文开头提到的‘高风险患者’定义为ob_profile.risk_level ‘high’。”3.2 信息压缩与格式化从DDL到“速记符”直接给AI扔几千字的原始数据库CREATE TABLE语句DDL是低效的。AI需要处理这些冗长的、包含大量技术细节如引擎类型、默认字符集的文本会消耗不必要的上下文窗口Token并可能分散其对核心信息的注意力。我们需要做一次“信息压缩”目标是零信息损失但体积最小化可读性最大化。原始DDL示例CREATE TABLE patient ( patient_id int(11) NOT NULL AUTO_INCREMENT COMMENT 患者唯一ID, name varchar(100) NOT NULL COMMENT 患者姓名, birth_date date DEFAULT NULL COMMENT 出生日期, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 记录创建时间, PRIMARY KEY (patient_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT患者基本信息表;压缩格式化后patient (患者基本信息表): - patient_id: int*PK, AI, NN - “患者唯一ID” - name: str(100)*NN - “患者姓名” - birth_date: date - “出生日期” - created_at: ts*NN, defaultCURRENT_TIMESTAMP - “记录创建时间”压缩技巧解析使用简写int代替int(11)str代替varcharts代替timestampAI表示AUTO_INCREMENT。符号标记关键属性用*PK表示主键*NN表示NOT NULL*FK表示外键可附带引用说明。这比文字更醒目。分离注释将字段的业务含义用引号或箭头明确标出与字段定义分开便于AI分别解析“结构”和“语义”。省略技术细节ENGINE、DEFAULT CHARSET等与查询逻辑无关的信息可以完全省略。经过这样的处理信息密度大幅提升AI能更快地抓取关键点同时为我们节省了宝贵的上下文Token可以用来传递更多其他重要信息如复杂的业务规则。3.3 动态上下文与静态上下文的管理在实际的AI Agent交互中信息传递分为两类静态上下文在Agent初始化或会话开始时一次性提供的基础信息如完整的数据库Schema压缩文档、产品核心业务 glossary术语表。这部分信息构成了AI理解你业务的基石。动态上下文在对话过程中根据当前任务需要额外补充的信息。例如用户说“帮我查一下上个月上海的销售情况”除了静态的Schema你可能需要动态地告诉AI“‘上海’在city字段中存储的值为‘上海市’‘销售情况’主要指orders表中的total_amount字段‘上个月’指当前时间的前一个自然月。”一个成熟的AI Agent系统会有一套机制来管理这两种上下文确保AI在任何时候都拥有“刚刚好”的信息来完成手头任务既不会信息不足而瞎猜也不会被海量无关信息淹没。4. 实操构建一个AI友好的数据库上下文文档理论说完了我们来点实际的。假设我们有一个简单的电商数据库包含users用户、products产品、orders订单三张表。下面我将演示如何为其构建一份AI友好的上下文文档。4.1 第一步梳理与提取原始信息首先从数据库或设计文档中整理出最原始的信息。这里我们跳过真实的DDL直接列出核心要素表users存储注册用户信息。id: 主键自增整数。username: 用户名唯一非空。email: 邮箱非空。city: 所在城市。created_at: 注册时间。表products存储商品信息。product_id: 主键。name: 商品名称。category: 商品类别如‘electronics’, ‘clothing’。price: 价格单位元。stock: 库存数量。表orders存储订单信息。order_id: 主键。user_id: 外键关联users.id。product_id: 外键关联products.product_id。quantity: 购买数量。status: 订单状态‘pending’, ‘paid’, ‘shipped’, ‘delivered’, ‘cancelled’。order_date: 下单日期。业务规则订单总价 products.price*orders.quantity。只有status为‘paid’及之后的订单才计入有效销售。users.city字段存储的是完整的城市名如“北京市”、“上海市”。4.2 第二步按照框架进行格式化压缩现在我们将上述信息转化为结构化、压缩化的文档。# 数据库上下文简易电商系统 ## 1. 概览 - **数据库名**ecommerce - **描述**包含用户、商品、订单核心数据的简易电商系统。 - **核心表**3张 (users, products, orders) ## 2. 表结构详情 ### 2.1 表: users (用户信息表) - id: int*PK, AI, NN - “用户唯一ID自增” - username: str(50)*NN, UNIQUE - “用户名用于登录唯一” - email: str(100)*NN - “用户邮箱” - city: str(50) - “用户所在城市存储完整名称如‘北京市’” - created_at: ts*NN, defaultCURRENT_TIMESTAMP - “用户注册时间” ### 2.2 表: products (商品信息表) - product_id: int*PK, AI, NN - “商品唯一ID自增” - name: str(200)*NN - “商品名称” - category: str(50) - “商品类别例如‘electronics’(电子产品), ‘clothing’(服装)” - price: decimal(10,2)*NN - “商品单价单位元” - stock: int*NN - “当前库存数量” ### 2.3 表: orders (订单信息表) - order_id: int*PK, AI, NN - “订单唯一ID自增” - user_id: int*NN, *FK - “下单用户ID关联 users.id” - product_id: int*NN, *FK - “购买的商品ID关联 products.product_id” - quantity: int*NN - “购买数量” - status: str(20)*NN - “订单状态。可选值: ‘pending’(待支付), ‘paid’(已支付), ‘shipped’(已发货), ‘delivered’(已送达), ‘cancelled’(已取消)” - order_date: date*NN - “订单创建日期年月日” ## 3. 表关系 - orders.user_id 引用 users.id (一个用户可以有多个订单) - orders.product_id 引用 products.product_id (一个商品可以被多个订单购买) ## 4. 关键业务规则 1. **订单金额计算**订单总金额 products.price * orders.quantity。数据库中无此字段需查询时计算。 2. **有效订单定义**在分析销售数据时通常只考虑状态为 ‘paid’, ‘shipped’, ‘delivered’ 的订单。‘pending’和‘cancelled’不计入有效销售。 3. **城市查询**users.city字段存储完整中文名称。查询时请使用精确名称例如 city ‘上海市’。4.3 第三步在Prompt中应用此上下文当你需要AI帮你写查询时将这个文档作为系统提示词System Prompt的一部分或者放在用户消息的开头。示例Prompt你是一个专业的SQL助手。请根据以下数据库结构信息为我编写SQL查询。 【数据库上下文开始】 此处插入上面格式化好的完整文档 【数据库上下文结束】 现在请帮我写一个查询找出2023年第四季度10月1日至12月31日在“上海市”下单最多的前5名用户显示他们的用户名、邮箱以及下单总金额按总金额降序排列。有了这样一份清晰的上下文AI就能像了解自己手掌一样了解你的数据库写出准确、高效的SQL。它知道order_date是日期字段知道city要匹配“上海市”知道总金额需要关联products表进行计算也知道要过滤掉cancelled的订单如果业务规则要求。5. 思维进阶从数据库到广义的“信息管理”通过数据库Schema传递这个案例我们可以将这种思维模式推广到几乎所有与AI协作的场景。核心原则不变AI是拥有强大通用能力的“转校生”而我们是掌握具体领域知识的“本地向导”。5.1 其他场景的应用代码生成与理解当你让AI帮你写一个函数时不要只说“写一个用户登录函数”。你需要提供项目使用的框架Flask还是Django、已有的用户模型结构、密码加密方式bcrypt、Session管理方式、以及相关的工具函数如发送邮件的send_email函数签名。你需要把这些“上下文”组织好喂给AI。文档分析与总结让AI总结一份长文档你需要先告诉它文档的类型技术报告会议纪要、你关心的核心主题是什么、需要总结成什么格式 bullets points一段话。客服问答机器人构建一个回答产品问题的Agent你需要提供的“上下文”包括产品FAQ、用户手册、最新的产品更新日志、以及一些常见的问法同义词比如“怎么付款”和“支付方式”是同一个问题。5.2 核心能力的迁移信息组织力这引出了我最大的感悟在AI时代一个程序员或者说任何知识工作者的核心竞争力正在从“具体技能的熟练度”向“信息组织与架构的能力”迁移。过去执行者模式价值体现在“我能多快写出一个复杂的SQL查询”、“我能多熟练地调试一个并发bug”。我们比拼的是对工具和语言本身的掌握深度。现在与未来管理者模式价值将更多体现在“我能否清晰地向AI描述这个复杂的业务系统”、“我能否把模糊的产品需求转化为结构化的、AI可理解的约束条件”、“我能否设计一套机制让AI在不同阶段都能获取恰到好处的信息”。这并不意味着编程技能不再重要而是它的重心发生了偏移。编程将更多地成为我们与AI沟通、对AI进行“编程”的手段。我们写的代码可能不再是直接实现业务逻辑的代码而是用来组织、筛选、传递信息给AI的“胶水代码”和“管理代码”。5.3 实践中的挑战与心得在实际操作中这种思维转变会遇到一些挑战信息过载与不足的平衡给多少信息才算够一开始容易走向两个极端要么给得太少AI不断猜错要么事无巨细把整个项目的代码库都塞进去导致AI注意力分散成本高昂。我的经验是分层递进先给最核心、最通用的上下文如数据库核心Schema、主要API接口。如果AI在执行中表现出对某部分信息的缺失例如它问“status字段有哪些可能的值”再动态补充这部分更细节的上下文。这需要你对系统的信息层次有很好的把握。动态上下文的维护在长时间的对话或多轮任务中如何让AI记住之前的对话历史和已经澄清过的信息这需要设计对话状态管理。简单的做法是在每次提问时都把关键的、已确定的信息摘要再次附上。复杂的则需要引入向量数据库等工具来存储和检索历史上下文。“未知的未知”最难的部分是你有时甚至不知道AI缺什么信息。直到它产生一个看起来合理但完全错误的输出时你才恍然大悟“哦我忘了告诉它我们这个表里有个软删除标记”这要求我们具备极强的同理心和换位思考能力要时刻以AI的视角来审视我们提供的信息是否完备。踩过几次坑之后我养成了一个习惯在让AI执行任何任务之前先花几分钟时间像给一个新入职的同事做培训一样在脑子里过一遍——“要完成这件事他需要知道哪些最基本的信息” 把这些信息条理清晰地列出来往往事半功倍。这个从“Doer”到“Manager”的转变起初会有些不适应仿佛自己的“硬技能”被削弱了。但当你看到AI在你提供的清晰上下文指引下高效、准确地完成一个个复杂任务时你会体会到一种更高层次的掌控感和杠杆效应。你不再只是一个码农你成了一个指挥智能资源的架构师。这或许就是AI时代给我们带来的最深刻的职业进化方向。