Day01:Python 基础如何支撑 AI 工程项目的数据处理、接口调用和工具封装

重写定位:不是普通 Python 入门笔记,而是面向 AI 工程师 / AI 应用工程师 / AI 解决方案顾问的工程化复盘文档。

覆盖文件:/Users/hejunkai/Documents/AI工程师/28天每日背诵文档/Day01_Python基础.html

生成时间:2026-06-09 14:05

今天核心目标:用变量、数据类型、函数、模块化、文件读写完成一个“合同收款数据处理小项目”,并能说明它如何升级为 FastAPI 接口、悟空技能或 Agent Tool。

1. 当天学习目标

2. 精准视频定位

学习模块视频 / 分 P / 章节建议观看重点
变量2025年B站Python全套教程:只看变量相关分P重点看变量如何承接用户问题、团队名、月份、模型回答等业务流程中的中间状态。
数据类型2025年B站Python全套教程:只看数据类型相关分P重点看 str / int / float / bool / list / dict / None 如何表达业务数据、接口参数和AI处理结果。
函数2025年B站Python全套教程:只看函数相关分P重点看如何把金额计算、筛选、汇总、写文件封装成可复用能力。
模块化2025年B站Python全套教程:只看模块化相关分P重点看为什么真实项目不能把所有代码都堆在一个文件里。
文件读写2025年B站Python全套教程:只看文件读写相关分P;补充 Python JSON 解析专题:JSON 上/中/下重点看 json.load / json.dump、encoding='utf-8'、ensure_ascii=False、indent=2。

如果视频分P标题和当前描述不完全一致,请按关键词“变量 / 数据类型 / 函数 / 模块化 / 文件读写 / JSON解析”人工定位,不要全刷。

3. 背诵版核心内容:5个知识点的工程解释

1. 变量

一句话理解:变量不是简单的“容器”,而是业务流程中的中间状态名称。AI工程里,用户问题、团队名、月份、接口返回、RAG检索结果、模型回答,都需要用变量承接。变量名要表达业务含义,比如 user_question、team_name、month,而不是 a、b、x。

AI 工程里为什么必须会:这几个变量对应企业AI问答流程:用户提问被保存为 user_question,系统从问题中识别出 team_name 和 month,后续查询业务数据,最后把模型生成的结果保存为 model_answer。

项目里怎么用:

user_question = "查询4月份星辰战队合同金额"
team_name = "星辰战队"
month = "2026-04"
model_answer = "4月份星辰战队合同金额为48万元"

面试时怎么说:面试时我会说:Python变量在AI应用里主要用来承接业务流程中的状态,比如用户输入、接口参数、检索结果和模型输出。虽然Python是动态类型语言,但工程项目里变量命名必须清晰,否则接口联调和Agent工具调用很容易混乱。

面试官追问怎么答:追问:Python变量是动态类型,会不会导致项目不稳定?回答:会有这个风险,所以工程里要靠清晰命名、Pydantic校验、类型注解、测试和日志来降低风险。

2. 数据类型

一句话理解:数据类型决定一份业务数据应该如何表达。str适合用户问题、Prompt、模型回答;int/float适合金额、数量、评分、相似度;bool适合是否命中规则、是否需要人工确认;list适合多条合同、多条检索结果;dict适合一条结构化业务记录;None表示接口无返回、字段缺失或查询为空。

AI 工程里为什么必须会:dict表示一条合同记录,list表示多条合同记录。API返回JSON后,Python里通常会转成dict/list;RAG检索结果通常是list,每个片段是dict;AI表格一行数据也可以理解为一个dict。

项目里怎么用:

record = {
    "customer_name": "无锡某制造企业",
    "team_name": "星辰战队",
    "month": "2026-04",
    "contract_amount": 480000,
    "paid_amount": 320000,
    "sales_name": "张三"
}

records = [record]

面试时怎么说:面试时我会说:企业AI项目里最常见的数据结构是list和dict,因为它们最接近JSON和AI表格。dict表达一条结构化记录,list表达多条记录,这也是后续FastAPI接口、Agent Tool参数和RAG检索结果处理的基础。

面试官追问怎么答:追问:为什么不用字符串拼接保存所有数据?回答:字符串不方便校验、筛选和计算。结构化数据才能被接口、工作流和Agent稳定处理。

3. 函数

一句话理解:函数是把一段可重复逻辑封装成一个独立能力。一个函数最好只做一件事,例如计算未收款、筛选合同、汇总金额、写入JSON。AI工程里,数据清洗、字段映射、接口调用、模型调用、RAG检索都应该封装成函数。

AI 工程里为什么必须会:这个函数的输入是合同金额和已收款金额,输出是未收款金额。它是一个最小业务能力,后续可以被FastAPI接口调用,也可以包装成Agent Tool,甚至成为悟空技能后端工作流中的一个计算节点。

项目里怎么用:

def calculate_unpaid_amount(contract_amount, paid_amount):
    return contract_amount - paid_amount

面试时怎么说:面试时我会说:函数是AI工程里最小的可复用业务能力。Tool Calling、Agent工具、Skill后端,本质上都需要把业务逻辑封装成清晰的函数或接口,让模型或工作流在合适的时候调用。

面试官追问怎么答:追问:函数和Agent Tool有什么关系?回答:Agent Tool可以理解为带有名称、描述和参数Schema的函数。函数负责真正执行逻辑,模型只负责判断什么时候调用。

4. 模块化

一句话理解:模块化是把项目拆成不同职责的文件和目录。初学者可以把代码写在一个文件里,但真实AI工程项目必须拆模块,否则接口、RAG、Agent、Prompt、数据处理混在一起,后续无法维护。

AI 工程里为什么必须会:main.py负责启动入口或FastAPI路由;services放业务逻辑;utils放通用工具;schemas放请求/响应模型;data放测试数据;prompts放提示词模板;outputs放运行结果。

项目里怎么用:

project/
├── main.py
├── services/
│   └── finance_service.py
├── utils/
│   └── file_utils.py
├── schemas/
│   └── request_schema.py
├── data/
│   └── contracts.json
├── prompts/
│   └── rag_prompt.txt
└── outputs/
    └── day01_result.json

面试时怎么说:面试时我会说:模块化不是为了显得复杂,而是为了复用、维护、测试和多人协作。FastAPI项目、RAG项目、Agent项目都需要把接口层、业务层、工具层、数据层拆开。

面试官追问怎么答:追问:业务逻辑为什么不应该全写在FastAPI接口函数里?回答:接口函数应该负责接收请求和返回响应,核心业务逻辑应放到service里,方便复用、测试和后续被Agent Tool调用。

5. 文件读写

一句话理解:文件读写不是简单的open/read/write。AI工程里经常要读取JSON测试数据、Prompt模板、知识库文件、日志、配置文件,也要把模型结果、评测结果和接口结果写出来。企业项目早期常用本地JSON/CSV模拟数据,后续再替换成数据库或API。

AI 工程里为什么必须会:encoding="utf-8"用于正确处理中文;json.load用于把JSON文件读成Python对象;json.dump用于把Python对象写回JSON;ensure_ascii=False避免中文乱码;indent=2让输出更适合人阅读。

项目里怎么用:

import json

with open("data/contracts.json", "r", encoding="utf-8") as f:
    contracts = json.load(f)

with open("outputs/day01_result.json", "w", encoding="utf-8") as f:
    json.dump(result, f, ensure_ascii=False, indent=2)

面试时怎么说:面试时我会说:文件读写是RAG、接口测试、数据清洗、Prompt管理的基础。比如RAG要读取知识库文件,接口联调要保存测试JSON,Agent运行要记录工具结果和日志。

面试官追问怎么答:追问:为什么测试阶段可以用文件模拟数据库?回答:因为早期重点是验证业务流程和AI调用链路,JSON文件成本低、可控、便于演示;等流程跑通后再替换成SQLite、MySQL或真实API。

4. 必须掌握原理

原理 1:变量保存的是业务流程状态,不只是语法练习

一句话解释:变量给业务流程中的关键信息命名。

为什么重要:AI应用通常是多步骤链路:用户提问、意图识别、参数提取、接口查询、模型回答。如果没有清晰变量,流程会混乱。

在 AI 工程里的使用场景:FastAPI接口参数、Agent Tool入参、RAG检索结果、悟空技能节点输入输出。

面试表达:我会把变量理解成AI流程中的状态承接点,而不是简单容器。

原理 2:dict/list 是 JSON、AI表格、RAG结果的基础结构

一句话解释:dict表示一条结构化记录,list表示多条记录。

为什么重要:企业AI应用要处理的不是单个字符串,而是客户、合同、订单、库存、文档片段等结构化数据。

在 AI 工程里的使用场景:API返回JSON、AI表格一行数据、RAG检索片段、制造业订单列表。

面试表达:我会用dict/list把业务数据结构化,方便筛选、汇总、传给接口或模型。

原理 3:函数是 Agent Tool 和 Skill 的底层思想

一句话解释:函数把可重复逻辑封装成独立能力。

为什么重要:AI工程不是把所有逻辑写死在Prompt里,很多计算、查询、校验都应该由函数或接口完成。

在 AI 工程里的使用场景:金额计算、字段映射、接口调用、RAG检索、Tool Calling。

面试表达:我会先把业务能力写成函数,再根据需要包装成FastAPI接口、Agent Tool或悟空技能。

原理 4:文件读写是原型验证到工程落地的过渡能力

一句话解释:文件让测试数据、Prompt、结果和日志可以被保存和复用。

为什么重要:企业项目早期不一定马上接数据库,先用JSON/CSV模拟数据能快速验证AI流程。

在 AI 工程里的使用场景:RAG文档读取、Prompt模板管理、接口测试JSON、结果输出、日志记录。

面试表达:我会先用本地文件跑通业务闭环,再逐步替换成SQLite、MySQL或真实业务系统API。

5. 当天实战小项目:Day01 完整小项目——合同收款数据处理

业务背景:客户希望查询某个销售团队某个月的合同金额、已收款金额和未收款金额。今天用最基础的 Python 能力完成最小闭环。

建议代码文件:/Users/hejunkai/Documents/AI工程师/28天每日背诵文档/Day01_合同收款数据处理小项目/day01_contract_summary.py

输出结果文件:运行后生成 day01_result.json

import json
from pathlib import Path

# 1. 用变量保存用户问题、团队名称、月份
user_question = "查询4月份星辰战队合同金额、已收款金额和未收款金额"
team_name = "星辰战队"
month = "2026-04"

# 2. 用 list + dict 保存多条合同数据
contracts = [
    {
        "customer_name": "无锡某制造企业A",
        "team_name": "星辰战队",
        "month": "2026-04",
        "contract_amount": 480000,
        "paid_amount": 320000,
        "sales_name": "张三"
    },
    {
        "customer_name": "苏州某自动化公司",
        "team_name": "星辰战队",
        "month": "2026-04",
        "contract_amount": 260000,
        "paid_amount": 260000,
        "sales_name": "李四"
    },
    {
        "customer_name": "常州某电子厂",
        "team_name": "星辰战队",
        "month": "2026-05",
        "contract_amount": 180000,
        "paid_amount": 50000,
        "sales_name": "王五"
    },
    {
        "customer_name": "无锡某新能源企业",
        "team_name": "先锋战队",
        "month": "2026-04",
        "contract_amount": 390000,
        "paid_amount": 100000,
        "sales_name": "赵六"
    },
    {
        "customer_name": "江阴某装备制造厂",
        "team_name": "星辰战队",
        "month": "2026-04",
        "contract_amount": 120000,
        "paid_amount": 0,
        "sales_name": "张三"
    }
]


def calculate_unpaid_amount(contract_amount, paid_amount):
    """计算未收款金额:合同金额 - 已收款金额。"""
    return contract_amount - paid_amount


def enrich_unpaid_amount(records):
    """为每条合同记录补充 unpaid_amount 字段。"""
    enriched = []
    for record in records:
        new_record = record.copy()
        new_record["unpaid_amount"] = calculate_unpaid_amount(
            new_record["contract_amount"],
            new_record["paid_amount"]
        )
        enriched.append(new_record)
    return enriched


def filter_contracts(records, target_team_name, target_month):
    """筛选指定团队和月份的合同记录。"""
    result = []
    for record in records:
        if record["team_name"] == target_team_name and record["month"] == target_month:
            result.append(record)
    return result


def summarize_contracts(records):
    """汇总合同金额、已收款金额、未收款金额。"""
    total_contract_amount = 0
    total_paid_amount = 0
    total_unpaid_amount = 0

    for record in records:
        total_contract_amount += record["contract_amount"]
        total_paid_amount += record["paid_amount"]
        total_unpaid_amount += record["unpaid_amount"]

    return {
        "contract_count": len(records),
        "total_contract_amount": total_contract_amount,
        "total_paid_amount": total_paid_amount,
        "total_unpaid_amount": total_unpaid_amount
    }


def build_answer(question, target_team_name, target_month, matched_records, summary):
    """生成结构化结果,后续可交给大模型生成自然语言回答。"""
    return {
        "user_question": question,
        "query_condition": {
            "team_name": target_team_name,
            "month": target_month
        },
        "matched_records": matched_records,
        "summary": summary,
        "model_answer_draft": (
            f"{target_month} {target_team_name}共有{summary['contract_count']}条合同,"
            f"合同总额{summary['total_contract_amount']}元,"
            f"已收款{summary['total_paid_amount']}元,"
            f"未收款{summary['total_unpaid_amount']}元。"
        )
    }


def write_json_file(data, output_path):
    """把结果写入 JSON 文件,方便接口、工作流或AI表格后续读取。"""
    output_path = Path(output_path)
    output_path.parent.mkdir(parents=True, exist_ok=True)
    with open(output_path, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)


def main():
    enriched_contracts = enrich_unpaid_amount(contracts)
    matched_records = filter_contracts(enriched_contracts, team_name, month)
    summary = summarize_contracts(matched_records)
    result = build_answer(user_question, team_name, month, matched_records, summary)
    write_json_file(result, "day01_result.json")
    print(result["model_answer_draft"])


if __name__ == "__main__":
    main()

6. 当天必须会写 / 会操作的内容

操作任务要求验收方式
写变量保存用户问题、团队名、月份使用 user_question、team_name、month 这类有业务含义的变量能解释每个变量在企业AI问答流程里的作用
设计 list + dict 合同数据至少5条合同记录,每条包含 customer_name、team_name、month、contract_amount、paid_amount、unpaid_amount、sales_name能说明dict是一条记录,list是多条记录
封装 calculate_unpaid_amount 函数输入合同金额和已收款金额,返回未收款金额能用多条数据测试计算正确
封装 filter_contracts 函数按 team_name 和 month 筛选合同数据能筛出星辰战队2026-04的3条记录
封装 summarize_contracts 函数汇总合同总额、已收款总额、未收款总额输出合同总额860000、已收款580000、未收款280000
写入 day01_result.json使用 json.dump,ensure_ascii=False,indent=2文件中中文不乱码,结构清晰可读
说明升级路径说明如何升级成FastAPI接口、Agent Tool、悟空技能或AI表格问答能把Python基础自然连接到AI工程落地

7. 当天验收标准:8道硬题

验收题 1:变量理解题
问题:为什么不能只用 a、b、x、y 这种变量名?请用 user_question、team_name、month 解释变量在AI问答流程中的作用。
操作过程 / 思考过程:
  1. 先说明变量是业务状态名称。
  2. 再说明用户问题、团队名、月份如何在流程中传递。
  3. 最后说明清晰命名对接口和Agent调试的重要性。
标准答案:
变量不是简单容器,而是业务流程中的状态承接点。user_question保存原始问题,team_name和month保存从问题中抽取出来的查询条件,后续接口查询、AI表格筛选、Agent Tool调用都依赖这些变量。
掌握标准:能把变量和AI问答流程联系起来,而不是只说“变量保存数据”。
面试官可能追问:Python是动态类型,变量名清晰是否就够了?
追问回答:不够。工程里还要结合类型注解、Pydantic校验、测试和日志,保证数据传递可靠。
验收题 2:数据类型判断题
问题:请判断用户问题、合同金额、是否需要人工确认、多条合同记录、一条合同记录分别适合用什么数据类型。
操作过程 / 思考过程:
  1. 逐个分析数据的业务含义。
  2. 判断是文本、数字、布尔、多条记录还是单条记录。
  3. 说明这些类型如何对应JSON和API。
标准答案:
用户问题适合str,合同金额适合int或float,是否需要人工确认适合bool,多条合同记录适合list,一条合同记录适合dict。None可以表示接口无返回、查询为空或字段缺失。
掌握标准:能准确说出str/int/float/bool/list/dict/None的业务用途。
面试官可能追问:为什么AI工程里dict/list特别常见?
追问回答:因为API返回JSON后通常会变成dict/list,AI表格一行像dict,多行像list,RAG检索结果也是list包dict。
验收题 3:dict/list 结构设计题
问题:请设计一条合同记录和一个合同列表,字段包含customer_name、team_name、month、contract_amount、paid_amount、unpaid_amount、sales_name。
操作过程 / 思考过程:
  1. 先用dict表示一条合同。
  2. 再用list包裹多条dict。
  3. 确保金额字段是数字,不是带“万元”的字符串。
标准答案:
record = {
  "customer_name": "无锡某制造企业",
  "team_name": "星辰战队",
  "month": "2026-04",
  "contract_amount": 480000,
  "paid_amount": 320000,
  "unpaid_amount": 160000,
  "sales_name": "张三"
}
records = [record]
掌握标准:能写出结构正确的数据,并解释dict/list和JSON的关系。
面试官可能追问:金额为什么不要写成“48万元”这种字符串?
追问回答:因为字符串不方便计算。工程里应先用数字计算,展示时再格式化成万元。
验收题 4:函数封装题
问题:请写函数 calculate_unpaid_amount(contract_amount, paid_amount),返回未收款金额。
操作过程 / 思考过程:
  1. 定义函数。
  2. 设置两个输入参数。
  3. 返回contract_amount - paid_amount。
  4. 用480000和320000测试。
标准答案:
def calculate_unpaid_amount(contract_amount, paid_amount):
    return contract_amount - paid_amount

print(calculate_unpaid_amount(480000, 320000))  # 160000
掌握标准:能写出函数并说清输入、输出、业务意义。
面试官可能追问:这个函数如何升级成Agent Tool?
追问回答:给它加工具名称、描述和参数Schema,让Agent在需要计算未收款时调用;真实执行仍由Python函数完成。
验收题 5:模块化设计题
问题:如果后续把Day01小项目升级成FastAPI项目,你会如何拆目录?
操作过程 / 思考过程:
  1. 先区分入口、业务逻辑、工具函数、数据模型、数据文件、输出文件。
  2. 画出目录结构。
  3. 解释每个目录职责。
标准答案:
project/
├── main.py
├── services/finance_service.py
├── utils/file_utils.py
├── schemas/request_schema.py
├── data/contracts.json
├── prompts/rag_prompt.txt
└── outputs/day01_result.json
掌握标准:能说明main.py不应该塞满业务逻辑,services负责财务汇总,utils负责文件读写。
面试官可能追问:为什么业务逻辑不应该全写在接口函数里?
追问回答:因为接口层负责接收请求和返回响应,业务逻辑放services里更方便复用、测试,也方便包装成Agent Tool。
验收题 6:文件读取操作题
问题:请写代码读取 data/contracts.json,并把结果写入 outputs/day01_result.json。
操作过程 / 思考过程:
  1. 导入json。
  2. 用open读取文件,encoding=utf-8。
  3. 用json.load读取。
  4. 用json.dump写出,ensure_ascii=False,indent=2。
标准答案:
import json

with open("data/contracts.json", "r", encoding="utf-8") as f:
    contracts = json.load(f)

with open("outputs/day01_result.json", "w", encoding="utf-8") as f:
    json.dump(result, f, ensure_ascii=False, indent=2)
掌握标准:能解释json.load/json.dump、encoding、ensure_ascii、indent。
面试官可能追问:为什么测试阶段可以用JSON文件模拟数据库?
追问回答:因为早期重点是验证业务流程和AI调用链路,JSON成本低、可控、便于演示,后续再替换数据库或API。
验收题 7:小项目综合题
问题:给你5条合同数据,请用Python筛选出星辰战队2026-04的合同记录,并计算合同总额、已收款总额、未收款总额,最后输出JSON文件。
操作过程 / 思考过程:
  1. 准备5条list+dict数据。
  2. 补充unpaid_amount。
  3. 按team_name和month筛选。
  4. 汇总三个金额。
  5. 写入day01_result.json。
标准答案:
标准结果:筛选出3条星辰战队2026-04记录,合同总额860000元,已收款580000元,未收款280000元,输出JSON文件中包含查询条件、匹配记录、summary和model_answer_draft。
掌握标准:能完整运行day01_contract_summary.py,并得到正确JSON结果。
面试官可能追问:这个小项目怎么升级成FastAPI接口?
追问回答:把team_name和month作为请求参数或Body,接口调用service函数,返回summary JSON,再由模型生成自然语言回答。
验收题 8:面试综合表达题
问题:面试官问:你怎么理解Python基础在AI工程项目里的作用?请完整回答。
操作过程 / 思考过程:
  1. 先说明Python基础不是孤立语法。
  2. 覆盖变量、数据类型、函数、模块化、文件读写。
  3. 关联FastAPI、RAG、Agent、悟空技能、AI表格。
  4. 用合同收款小项目举例。
标准答案:
Python基础支撑AI工程的数据处理、接口调用和工具封装。变量保存流程状态,dict/list承接JSON和AI表格数据,函数封装可复用业务能力,模块化保证项目可维护,文件读写用于测试数据、Prompt、知识库和结果输出。合同收款项目可以进一步升级成FastAPI接口、Agent Tool或悟空技能。
掌握标准:能用3分钟讲清楚,并能展示代码或JSON结果。
面试官可能追问:你如何证明自己不是只会语法?
追问回答:我能用Python完成一个业务数据处理闭环,并说明如何升级成接口、工作流和Agent工具。

8. 面试高频问法:候选人现场回答版

  1. 面试官可能问:你做AI项目时,Python主要承担什么角色?
    候选人现场回答版:我会说Python在我的AI项目里主要承担工程胶水层和业务处理层:一方面用FastAPI封装接口,另一方面处理JSON、AI表格、RAG文档和Agent工具函数。它不是只用来训练模型,而是把用户问题、业务数据、模型输出和企业系统连接起来。
  2. 面试官可能问:为什么接口返回JSON后,Python里经常用dict/list处理?
    候选人现场回答版:因为JSON对象进入Python后通常就是dict,多条记录就是list包dict。比如一条合同是一 个dict,多条合同是list。这样才能筛选、汇总、校验,再传给FastAPI、Agent Tool或大模型。
  3. 面试官可能问:你怎么理解函数和Agent Tool的关系?
    候选人现场回答版:函数是最小业务能力,Agent Tool可以理解成带名称、描述和参数Schema的函数。模型判断什么时候调用,真正的计算或查询由Python函数执行。
  4. 面试官可能问:你做FastAPI时,业务逻辑为什么不应该全写在接口函数里?
    候选人现场回答版:接口函数应该负责接收请求和返回响应,核心业务逻辑应该放services里。这样同一段逻辑既能被FastAPI调用,也能被测试脚本、Agent Tool或悟空技能后端复用。
  5. 面试官可能问:RAG项目中文件读取通常解决什么问题?
    候选人现场回答版:RAG需要读取知识库文档、Prompt模板、测试问题和评测结果。文件读写是文档解析、Prompt管理和结果落盘的基础,早期也可以用JSON文件模拟知识库或业务数据。
  6. 面试官可能问:你如何组织一个最小AI应用项目目录?
    候选人现场回答版:我会把入口、业务逻辑、工具函数、请求模型、数据文件、Prompt和输出结果分开,例如main.py、services、utils、schemas、data、prompts、outputs。这样后续接FastAPI、RAG或Agent都更容易维护。
  7. 面试官可能问:你如何向非技术客户解释Python在AI系统里的作用?
    候选人现场回答版:我会说Python像AI系统背后的业务处理和接口连接工具。客户用自然语言提问后,Python负责整理参数、查询数据、计算结果、调用模型,再把结构化结果返回给前端或工作流。
  8. 面试官可能问:你如何用Python处理AI表格导出的数据?
    候选人现场回答版:我会把AI表格每一行理解成一个dict,多行就是list。Python可以按团队、月份、客户筛选数据,计算金额,再输出JSON给接口、报表或模型生成分析结论。
  9. 面试官可能问:你如何把一个金额计算函数升级成API接口?
    候选人现场回答版:先把金额计算封装成函数,再在FastAPI里定义接口,接收contract_amount和paid_amount,调用函数返回unpaid_amount。如果进一步做Agent Tool,就再给这个接口或函数定义工具描述和参数Schema。
  10. 面试官可能问:你如何判断自己不是只会语法,而是能用Python做工程落地?
    候选人现场回答版:我会看自己能不能用Python完成一个业务闭环:接收问题、整理数据、封装函数、计算汇总、输出JSON,并说明如何升级成FastAPI接口、悟空技能或Agent Tool。能做出这个闭环,就不是只停留在语法。

9. 当天易忘点提醒

易忘点正确理解错误理解
变量命名变量名要表达业务含义,如team_name、month用a、b、x、y导致后续流程看不懂
dict/listdict是一条记录,list是多条记录dict和list随便混用
金额类型金额用于计算时应使用int/float金额写成“48万元”字符串再计算
函数职责一个函数最好只做一件事一个函数里又筛选又汇总又写文件又调模型
模块化接口层、业务层、工具层要分开所有代码都写在main.py
JSON写中文json.dump用ensure_ascii=False避免中文转义看到中文变成\u开头也不管
测试数据早期可用JSON模拟数据库必须一开始就接真实ERP才算项目
Agent ToolTool底层仍然要有函数或API执行大模型自己会真的执行Python函数

10. 当天复盘背诵稿

我对Python基础在AI工程项目里的理解,不是停留在变量、数据类型、函数这些语法本身,而是看它们如何支撑企业AI应用落地。变量在项目里用来保存业务流程的中间状态,比如用户问题、团队名称、月份、接口返回、RAG检索结果和模型回答。数据类型决定业务数据怎么表达,str适合用户问题和Prompt,int和float适合金额、数量和相似度,bool适合是否命中规则或是否需要人工确认,dict表示一条结构化业务记录,list表示多条记录,这和API返回的JSON、AI表格数据、RAG检索结果非常接近。



函数是把可重复的业务逻辑封装成独立能力。比如合同收款项目里,计算未收款金额、筛选指定团队和月份、汇总合同金额,都应该写成函数。这个思想和Agent Tool、Function Calling、悟空技能后端是一致的:模型不一定负责计算,真正稳定的业务逻辑应该由函数或接口执行。模块化则决定项目能不能维护,真实FastAPI、RAG、Agent项目不能把所有代码写在一个文件里,而要拆成接口层、业务服务层、工具层、数据层和Prompt层。



文件读写也不是简单的open和write。AI工程里经常要读取JSON测试数据、Prompt模板、知识库文件、日志和配置,也要把模型结果或接口结果写成JSON。项目早期可以先用本地JSON模拟数据,跑通业务闭环,后续再替换成SQLite、MySQL或真实ERP/CRM接口。以合同收款数据处理小项目为例,我可以用变量保存用户问题、用list和dict保存合同数据、用函数计算和汇总、最后把结果写入JSON。这个小项目后续可以升级成FastAPI接口,也可以包装成Agent Tool,或者接入悟空/DEAP工作流,让用户通过自然语言查询某个销售团队某个月的合同金额、已收款和未收款情况。所以我理解Python基础的价值,是把AI从“会聊天”推进到“能处理业务数据、调用接口、封装工具和支撑企业应用落地”。