AI初探:从传统开发者视角理解 AI
·0xPM
AI
系列AI 初探1 / 3
- 1AI初探:从传统开发者视角理解 AI
- 2Agent 到底是什么?智能体八问
- 3从 API、SDK 到 MCP:大模型时代的语义协议演进
- 查看系列 →
一、大语言模型(LLM) - 理解为"超级函数"
如果你习惯了传统编程,可以把 LLM 理解为一个非常特殊的函数:
# 传统函数 def calculate(x, y): return x + y # 逻辑明确、可预测 # LLM "函数" def llm(prompt): return "基于海量训练数据的概率性输出" # 逻辑模糊、不完全可预测
关键特点:
- 输入:自然语言文本(prompt/提示词)
- 输出:生成的文本
- 不确定性:同样的输入可能产生不同输出(可以通过参数控制)
- 能力:理解、推理、生成、翻译、总结等
主流模型厂商:
- OpenAI (GPT-4, GPT-3.5)
- Anthropic (Claude)
- Google (Gemini)
- Meta (Llama - 开源)
- 国内:百度文心、阿里通义、智谱 GLM 等
二、从 API 调用到智能应用的演进
第一阶段:简单 API 调用
# 就像调用传统 REST API response = openai.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": "今天天气怎么样?"}] )
问题:模型没有实时数据、无法执行操作、没有记忆
第二阶段:Prompt Engineering(提示工程)
# 通过精心设计的提示词来"引导"模型 prompt = """ 你是一个专业的客服。用户信息:{user_info} 历史对话:{history} 当前问题:{question} 请根据以上信息回答... """
类比:就像写超详细的函数文档,告诉"函数"该如何表现
第三阶段:RAG(检索增强生成)
用户问题 → 向量数据库检索相关文档 → 将文档+问题一起发给LLM → 生成答案
类比:给 LLM 配备了"搜索引擎"和"知识库"
第四阶段:Agent(智能体)
用户任务 → Agent 分析 → 选择工具 → 执行 → 观察结果 → 继续或结束
类比:把 LLM 从"函数"升级为"会思考的程序员"
三、关键技术概念解析
1. Token 和上下文窗口
Token:文本的最小单位,约等于 0.75 个英文单词或 0.5 个中文字
"Hello World" ≈ 2 tokens "你好世界" ≈ 4 tokens
上下文窗口:模型一次能"看到"的最大 token 数
- GPT-3.5: 4K-16K tokens
- GPT-4: 8K-128K tokens
- Claude: 200K tokens
类比:函数的最大参数长度限制
2. Embedding(向量嵌入)
把文本转换为高维数组(向量),语义相似的文本向量也相似。
text1 = "猫是可爱的动物" text2 = "小猫很萌" text3 = "今天天气不错" embedding1 = [0.2, 0.8, 0.3, ...] # 1536维向量 embedding2 = [0.3, 0.7, 0.4, ...] # 与embedding1相似 embedding3 = [0.9, 0.1, 0.8, ...] # 与前两个差异大
用途:语义搜索、文档检索、推荐系统
类比:类似于特征工程,但是自动完成的
3. 向量数据库
专门存储和检索向量的数据库。
# 传统数据库 SELECT * FROM docs WHERE title LIKE '%天气%' # 向量数据库 find_similar(query_embedding, top_k=5) # 找最相似的5个
常见产品:Pinecone, Weaviate, Chroma, Milvus
4. Function Calling / Tool Use
现代 LLM 可以"调用函数":
# 定义工具 tools = [{ "name": "get_weather", "description": "获取指定城市的天气", "parameters": { "city": {"type": "string"} } }] # LLM 会输出结构化的"函数调用请求" { "tool": "get_weather", "arguments": {"city": "北京"} } # 你的代码真正执行函数 result = get_weather("北京") # 把结果返回给 LLM,它生成最终答案
这就是 Agent 的核心机制!
四、Agent 框架的必要性
为什么需要框架?
传统开发中,你可能这样写代码:
result1 = step1(input) result2 = step2(result1) result3 = step3(result2) return result3
但 AI 应用的挑战在于:
- 流程不固定:需要根据情况动态决定下一步
- 状态管理复杂:要维护对话历史、工具调用记录等
- 错误处理困难:LLM 可能"幻觉"(编造事实)或陷入循环
- 提示词工程:每一步都需要精心设计提示
- 工具集成:需要与各种外部系统对接
LangChain 解决的问题
# 不用 LangChain - 你需要手写大量胶水代码 def my_agent(question): history = [] max_iterations = 10 for i in range(max_iterations): # 构建复杂的提示词 prompt = build_prompt(question, history, available_tools) # 调用 LLM response = call_llm(prompt) # 解析 LLM 的意图 action = parse_action(response) if action.type == "final_answer": return action.content # 执行工具 result = execute_tool(action.tool, action.input) # 更新历史 history.append(...) return "超出最大迭代次数" # 用 LangChain - 框架帮你处理这些 from langchain.agents import create_react_agent agent = create_react_agent(llm, tools, prompt) result = agent.invoke({"input": question})
五、技术栈类比
| AI 生态 | 传统开发生态 | 说明 |
|---|---|---|
| LLM (GPT-4, Claude) | 编程语言/运行时 | 核心能力提供者 |
| LangChain, LlamaIndex | Spring, Django | 应用框架 |
| Vector DB | Redis, Elasticsearch | 专用数据存储 |
| Embedding Models | 编码器/序列化器 | 数据转换 |
| Prompt Templates | ORM 查询/模板引擎 | 抽象层 |
| Tools/Functions | 第三方库/SDK | 扩展功能 |
六、当前生态的局限性
作为传统开发者,你需要意识到:
- 不确定性:LLM 输出不能 100% 保证正确
- 成本:API 调用按 token 计费,大规模应用成本可观
- 延迟:网络 + 推理时间,通常需要几秒
- 调试困难:很难像传统代码那样 debug
- 版本管理:模型更新可能改变行为
七、实践建议
从传统开发转向 AI 开发:
- 先用后造:先调用现有模型 API,理解它能做什么
- 从简单开始:先做单轮问答,再做多轮对话,最后尝试 Agent
- 重视测试:建立评估集,因为输出不确定
- 控制成本:监控 token 使用,考虑缓存策略
- 拥抱不确定性:设计容错机制,而非追求完美
评论
加载中…