AI 编程应用入门

面向社科与商科的计算思维与工程实践

尹俊贺

第一部分:认知重构

从“聊天机器人”到“概率计算组件”

1. 课程概览与核心目标

为什么社科/商科学生需要学这个?

  • 现状:AI 已成为像 Excel 或 SPSS 一样的基础工具。
  • 痛点:只会“聊天”无法处理大规模数据,也无法保证结果的可复现性 (Reproducibility)

核心目标 (Learning Objectives)

  1. 去魅:理解 LLM 的数学本质是概率预测,而非“智能”。
  2. 控制:掌握通过 Token、Temperature 和 Prompt 结构控制输出的工程方法。
  3. 集成:学会用代码(R/Python)自动化调用 AI,处理数据分析任务。

2. 什么是 LLM:技术定义的拆解

Large Language Model (大语言模型)

  • 本质:一个基于深度神经网络的概率分布预测器
  • 训练目标:Next-Token Prediction(下一个词预测)。
    • 给定上文 \(X\),计算下一个词 \(Y\) 的条件概率 \(P(Y|X)\)

它“不是”什么

  • 不是数据库:它不存储“事实”,只存储语言出现的“统计规律”。
  • 不是逻辑机:它不进行三段论推理,它只是在模仿推理文本的句法结构

3. 核心机制:自回归与非真理

自回归 (Autoregressive) 生成

  • 模型每生成一个词,都会把这个词加回到输入中,作为生成下一个词的依据。
  • 后果:一步错,步步错(Error Propagation)。

幻觉 (Hallucination) 的必然性

  • 定义:模型生成了符合语法逻辑,但与事实相悖的内容。
  • 成因
    1. 数据稀疏:训练数据中缺乏相关事实。
    2. 概率强制:模型必须输出一个概率最高的词,哪怕它是错的。

4. 关键认知总结:概率系统 vs. 确定性系统

维度 传统软件 (Excel/SPSS) 生成式 AI (LLM)
输出特性 确定性 (Deterministic)
输入不变,输出永远不变
随机性 (Stochastic)
输入不变,输出可能波动
错误类型 报错 (Syntax Error) 幻觉 (Silent Failure)
适用场景 精确计算、统计检验 文本生成、非结构化数据清洗
验证方式 逻辑检查 概率验收 / 形式化验证

工程准则:在社科研究中,严禁直接使用未经代码验证的 AI 输出作为结论。

第二部分:计算单位与物理约束

Token 与 上下文窗口

5. Token:AI 的“货币”与“原子”

什么是 Token (词元)?

  • LLM 不读“字符”,读的是 Token。
  • 换算关系
    • 1,000 Tokens \(\approx\) 750 英文单词
    • 1,000 Tokens \(\approx\) 500-600 汉字
  • 经济意义:API 调用是按 Token 计费的(输入+输出)。

可视化示例

  • Word: ingest -> Token: [in, gest]
  • Word: 苹果 -> Token: [苹, 果]

6. 上下文窗口 (Context Window)

定义与限制

  • 容量:模型一次性能够“看见”并处理的最大 Token 数量(含 Prompt + History + Answer)。
  • 物理边界
    • GPT-4o / Gemini 1.5 Pro: 128k - 1M+ Tokens
    • Open Source Models: 8k - 32k Tokens

挤出效应 (Eviction)

  • 当对话长度超过窗口,最早的信息(通常是 System Prompt 或原始设定)会被物理丢弃。
  • 现象:“越聊越忘”,逻辑前后矛盾。

7. “迷失在中间”现象 (Lost in the Middle)

注意力机制的缺陷

  • 研究表明,LLM 对位于 Context 开头结尾的信息关注度最高。
  • 位于中间的长文本容易被忽略。

社科应用启示

  • 错误做法:把 50 页的访谈记录一次性扔给 AI 让他总结。
  • 正确做法 (分块处理)
    1. 将长文本切分为小块(Chunking)。
    2. 分别总结每一块。
    3. 最后汇总总结(Map-Reduce 模式)。

第三部分:提示工程 (Prompt Engineering)

自然语言编程范式

8. 范式转移:从 Chat 到 Programming

什么是提示工程?

  • 它不是“以此类推”的玄学,而是自然语言编程 (Natural Language Programming)
  • 核心目标:降低输出的熵 (Entropy),提高确定性。

结构化框架:RTCF

我们将一个完美的 Prompt 拆解为四个模块: 1. Role (角色设定) 2. Task (任务定义) 3. Constraint (边界约束) 4. Format (输出格式)

3.2 提示工程的四大支柱:RTCF 框架

像写“派工单”一样写 Prompt

一个好的 Prompt 不是在聊天,而是在下达标准作业指令。请务必包含以下四个要素:

1. Role (身份设定) —— 你是谁?

  • 通俗解释:给 AI 一个具体的职业头衔。
  • 作用:决定了它说话的专业程度。找“网友”聊财报只会得到八卦,找“CFA 分析师”才能得到数据。
  • 例子:“你是一位资深宏观经济研究员…”

2. Task (行动指令) —— 做什么?

  • 通俗解释:用精准的动词拆解任务。
  • 作用:避免模糊。不要说“分析一下”,要说“提取净利润,计算增长率,对比行业平均值”。
  • 例子:“请先总结核心观点,再列出反驳论据…”

3. Constraint (边界红线) —— 不做什么?

  • 通俗解释:给 AI 立规矩,过滤噪音。
  • 作用:AI 很啰嗦,你必须让它闭嘴。这在数据清洗中至关重要。
  • 例子:“严禁输出‘好的’等客套话,严禁使用解释性文字,只给结果。”

4. Format (输出规范) —— 长啥样?

  • 通俗解释:规定结果的“包装”形式。
  • 作用:为了让 R 或 Excel 能直接用。人类喜欢看段落,但电脑喜欢看表格。
  • 例子:“请按 Markdown 表格输出,列名为:年份, GDP, 增速。”

一句话总结\[Prompt = \text{专业身份} + \text{具体动作} + \text{禁止废话} + \text{标准格式}\]

9. Role (角色):激活参数子空间

原理

  • LLM 存储了人类所有的知识。设定角色相当于告诉模型:“请只在‘经济学’或‘统计学’的参数空间内进行采样”。

对比示例

  • :“帮我看看这个数据。”
  • :“你是一位专精于计量经济学的资深研究员,熟悉时间序列分析。”

作用:奠定回答的专业术语风格和逻辑深度。

10. Task (任务):原子化与思维链

原子化 (Atomicity)

  • 不要给一个模糊的大任务。
  • 拆解:将复杂任务拆解为具体的动词步骤。

思维链 (Chain of Thought, CoT)

  • 指令:“请一步步思考 (Let’s think step by step)”。
  • 原理:强制模型生成更多的 Token 来展示推理过程,这实际上是给了模型更多的“计算时间”。

示例

Task: 分析附件中的财报,先提取去年的净利润,再计算同比增长率,最后判断是否符合市场预期。

11. Constraint (约束):负面提示

为什么需要约束?

  • 模型倾向于“讨好”用户,说废话。
  • 在数据处理中,废话就是噪音。

常用社科/商科约束

  • “禁止输出任何开场白(如‘好的,这是您的结果’)。”
  • “如果文中未提及相关数据,直接输出‘N/A’,严禁编造。”
  • “禁止使用解释性语言,仅输出代码/数据。”

12. Format (格式):机器可读性

人类可读 vs. 机器可读

  • 人类:喜欢段落、形容词、排版。
  • 机器 (R/Python):喜欢 JSON, CSV, Markdown Table。

结构化输出模板 (Markdown)

# Output Format
请严格遵守以下 Markdown 结构:
## 1. 核心观点
- (Point 1)
## 2. 情感倾向
| 维度 | 分数 (1-5) | 证据句 |
| :--- | :--- | :--- |
## 3. 风险提示
> (引用原文)

13. Demo 1: 非结构化文本的结构化提取 (R)

场景

我们有一段混乱的访谈记录,需要提取受访者的年龄、职业和对政策的态度。

R 代码与 Prompt 配合

raw_text <- "受访者A:我觉得这个政策不行,太激进了。哦对了,我今年45岁,是个出租车司机。"

Prompt: Context: {raw_text} Task: 提取受访者画像。 Format: JSON {"age": int, "job": string, "sentiment": "positive/negative"}

预期输出

{"age": 45, "job": "出租车司机", "sentiment": "negative"}

第四部分:泛化 vs. 精准

控制输出的随机性

14. 熵的控制:Temperature 参数

Temperature (温度系数)

  • 定义:控制采样概率分布平滑度的超参数。
  • 直觉理解
  • 低温 = 冷静、保守、死板。
  • 高温 = 狂野、随机、创造性。

15. Temperature 决策矩阵

任务类型 建议 T 值 业务目标 风险
数据清洗 / 实体提取 0.0 精准 (Precision) 毫无创造力
代码生成 (R/Python) 0.0 - 0.2 可运行 (Executability) 语法错误
文本摘要 / 润色 0.5 - 0.7 流畅 (Fluency) 细节丢失
广告创意 / 剧本 1.0 + 新颖 (Novelty) 逻辑崩坏

社科研究铁律:凡是涉及数据处理、编码分类,T 必须设为 0。

16. 案例对比:同一任务,不同 T 值

任务:解释 “P-value”

  • T = 0.0 (精准) > “P值是在原假设为真时,观察到当前统计量或更极端情况的概率。” (标准教科书定义)

  • T = 1.0 (泛化) > “想象你在抛硬币… P值就像是一个惊奇指数,告诉我们这件事是不是纯属巧合…” (比喻丰富,但可能不严谨)

结论

  • 写论文 Method 部分用 T=0。
  • 做科普演讲用 T=0.7。

第五部分:API 与工程集成

像开发者一样思考

17. 为什么要使用 API?

网页聊天 vs. API 调用

维度 网页聊天 (ChatGPT/Gemini Web) API 调用 (Python/R)
可复现性 低 (同样的输入,结果可能不同) (可固定 Seed 和 Temperature)
批量处理 难 (需手动复制粘贴) (循环处理 10k+ 数据)
参数控制 弱 (很多参数不可见) (完全控制所有超参数)
隐私 默认用于训练 (通常) 企业级隐私保护 (通常)

18. 开发环境:Google AI Studio

认识你的 IDE

  • Google AI Studio 是谷歌提供的免费、可视化的 Prompt 开发环境。
  • 核心功能
  1. System Instructions:独立的系统指令区。
  2. Get Code:一键生成代码。

工作流

  1. 在 AI Studio 中调试 Prompt,直到效果满意。
  2. 固定 Temperature = 0。
  3. 点击 Get Code,复制代码到 R/Python 项目中。

19. Python API 最小示例

import google.generativeai as genai

# 1. 配置
genai.configure(api_key="YOUR_API_KEY")

# 2. 模型初始化 (锁定参数)
model = genai.GenerativeModel(
    'gemini-1.5-flash',
    generation_config={"temperature": 0.0} 
)

# 3. 调用
response = model.generate_content("将这段文本的情感分类为:正面/负面/中性")

# 4. 结果
print(response.text)

20. R 与 API 的协同工作流

我们不建议直接在 R 里做所有事,而是采用混合架构

  1. R (数据准备)
  • 读取 .csv / .xlsx
  • 数据清洗、筛选样本。
  1. API (智能处理)
  • 将 R 处理好的文本发送给 LLM。
  • 接收 JSON 结果。
  1. R (分析与可视化)
  • 解析 JSON。
  • 运行回归分析 (lm)。
  • 绘制图表 (ggplot2)。

第六部分:Agent (智能体)

迈向自主循环

21. 什么是 Agent?

定义

  • Prompt 是单次函数调用:\(Output = f(Input)\)
  • Agent 是一个循环系统:它有目标、有记忆,并且可以使用工具。

核心公式

\[Agent = LLM + Memory + Tools + Planning\]

22. ReAct 架构:推理与行动

ReAct (Reason + Act) 循环

  1. Thought (思考):模型分析当前情况(例如:“我需要查找 2023 年中国的 GDP”)。
  2. Action (行动):模型生成调用搜索工具的代码。
  3. Observation (观察):工具返回搜索结果。
  4. Reflect (反思):模型判断数据是否足够,如果不够,回到第 1 步。

23. 何时使用 Agent?何时不用?

决策指南

  • 使用 Agent

  • 任务需要多步推理(如“分析这家公司的财报并与同行业对比”)。

  • 需要实时联网获取数据。

  • 不使用 Agent (使用简单 API)

  • 任务是确定性的(如“提取这段话里的人名”)。

  • 需要极高的稳定性及低成本。

警示:对于大一/大二学生,Agent 极易陷入死循环(Infinite Loop),建议先精通 API 调用。

25. Demo 2: 自动化验收 (Automated Validation)

核心思想

不要人工检查 AI 的输出,用代码检查。

R 验收代码示例

# 假设 AI 输出
ai_result <- '{"sentiment": "positive", "score": 4.5}'

# 验收函数
validate_output <- function(json_str) {
  # 1. 尝试解析
  parsed <- try(jsonlite::fromJSON(json_str), silent=TRUE)
  if(inherits(parsed, "try-error")) return(FALSE)
  
  # 2. 检查字段
  if(is.null(parsed$score)) return(FALSE)
  
  # 3. 检查数值范围
  if(parsed$score < 1 || parsed$score > 5) return(FALSE)
  
  return(TRUE)
}

27. 数据隐私与学术诚信

隐私红线

  • 严禁:上传包含个人身份信息 (PII) 的数据(身份证、电话、病历)。
  • 严禁:上传未发表的、保密的原始科研数据。

学术诚信

  • AI 是 Co-pilot (副驾驶),不是 Ghostwriter (代笔)
  • 引用规范:在论文/作业中声明:“本研究的数据清洗代码由 Gemini 1.5 Pro 辅助生成,并经人工校验。”

28. 课程总结:工程化思维图谱

  1. 认知层:理解 LLM 的概率本质 \(\rightarrow\) 祛除迷信。
  2. 控制层:利用 Temperature=0 和 RTCF 框架 \(\rightarrow\) 降低熵值。
  3. 工具层:使用 AI Studio 和 API \(\rightarrow\) 批量自动化。
  4. 验证层:实施自动化验收 \(\rightarrow\) 确保可靠性。

30. Q&A 与 参考资源

推荐资源

  • Google AI Studio: aistudio.google.com
  • DeepLearning.AI: Prompt Engineering for Developers (课程)
  • OpenAI Cookbook: API 使用的最佳实践手册