Skip to content

0.3 AI 开发工具链:掌握 AI 生态系统

学习目标 本章带你全面了解 AI 开发的工具生态系统:从数据处理(NumPy、Pandas)到 Agent 框架(LangChain、LangGraph、CrewAI、AutoGen),从 UI 构建(Streamlit、Gradio)到向量数据库(ChromaDB、Pinecone),构建完整的 AI 开发技能栈。


📋 本章内容

  • ✅ 数据处理:NumPy、Pandas
  • ✅ AI Agent 框架全景:LangChain、LangGraph、CrewAI、AutoGen
  • ✅ UI 框架:Streamlit、Gradio
  • ✅ 向量数据库:ChromaDB、Pinecone、Weaviate
  • ✅ 可视化:Matplotlib、Plotly
  • ✅ 完整项目实战

📚 术语表

术语名称LangGraph 定义和解读Python 定义和说明重要程度
Embeddings文本的向量表示,用于语义搜索、RAG检索、记忆相似度匹配。LangGraph中通过text-embedding-3-small生成将文本转换为高维向量(如1536维),相似文本的向量在空间中距离更近⭐⭐⭐⭐⭐
Vector Database存储和检索嵌入向量,支持相似度搜索。LangGraph集成ChromaDB、Pinecone等实现RAG专门优化向量相似度查询的数据库,支持ANN(近似最近邻)算法⭐⭐⭐⭐⭐
NumPy计算余弦相似度、归一化向量、批量处理嵌入。AI Agent的数值计算基础Python科学计算库,提供高性能多维数组(ndarray)和数学函数⭐⭐⭐⭐
Pandas处理对话日志、用户数据、模型评估指标。分析Agent性能的必备工具数据分析库,核心是DataFrame(类似Excel表格),支持SQL式操作⭐⭐⭐⭐
Streamlit快速构建Agent交互界面,展示对话流、状态可视化、调试工具Python原生的Web UI框架,通过简单API创建交互式应用⭐⭐⭐⭐
LangChainLangGraph的前身,提供链式调用、工具集成、记忆管理。LangGraph是其状态机增强版AI应用开发框架,核心概念:Chain、Agent、Memory、Tools⭐⭐⭐⭐⭐
RAG检索增强生成,LangGraph的核心模式。从向量库检索文档,注入到提示词中增强LLM回答Retrieval-Augmented Generation,结合检索和生成的混合架构⭐⭐⭐⭐⭐
Gradio备选UI框架,快速分享Agent demo。比Streamlit更适合机器学习模型展示轻量级ML界面库,自动生成输入输出组件,支持一键分享⭐⭐⭐
ChromaDB开源向量数据库,LangGraph官方示例常用。支持本地部署和持久化存储嵌入式向量数据库,无需服务器,通过Python API直接操作⭐⭐⭐⭐
Cosine Similarity度量文本语义相似度的标准方法,范围[-1,1],值越大越相似。RAG检索的核心算法余弦相似度,计算两个向量夹角的余弦值,常用于文本匹配⭐⭐⭐⭐⭐

1. 数据处理基础:NumPy 与 Pandas

1.1 NumPy:高性能数值计算

NumPy 是 Python 科学计算的基石,在 AI 开发中用于向量运算、嵌入相似度计算等。

python
# 安装:pip install numpy
import numpy as np

# 代码示例:嵌入向量相似度计算
def cosine_similarity(vec1, vec2):
    """计算两个向量的余弦相似度"""
    dot_product = np.dot(vec1, vec2)
    norm_a = np.linalg.norm(vec1)
    norm_b = np.linalg.norm(vec2)
    return dot_product / (norm_a * norm_b)

# 模拟文本嵌入(实际中来自 OpenAI Embeddings API)
embedding_query = np.array([0.2, 0.8, 0.5, 0.3, 0.9])
embedding_doc1 = np.array([0.3, 0.7, 0.6, 0.4, 0.8])  # 相关文档
embedding_doc2 = np.array([0.9, 0.1, 0.2, 0.8, 0.3])  # 不相关文档

sim1 = cosine_similarity(embedding_query, embedding_doc1)
sim2 = cosine_similarity(embedding_query, embedding_doc2)

print("=== 向量相似度计算 ===")
print(f"查询向量: {embedding_query}")
print(f"文档1相似度: {sim1:.3f}")
print(f"文档2相似度: {sim2:.3f}")
print(f"\n最相关文档: {'文档1' if sim1 > sim2 else '文档2'}")

# NumPy 数组操作
embeddings = np.array([embedding_query, embedding_doc1, embedding_doc2])
print(f"\n嵌入矩阵形状: {embeddings.shape}")  # (3, 5)
print(f"平均值: {embeddings.mean(axis=0)}")
print(f"标准差: {embeddings.std(axis=0)}")

# 批量计算相似度
from sklearn.metrics.pairwise import cosine_similarity as sklearn_cosine
similarities = sklearn_cosine([embedding_query], [embedding_doc1, embedding_doc2])
print(f"\n批量相似度: {similarities}")

运行结果:

=== 向量相似度计算 ===
查询向量: [0.2 0.8 0.5 0.3 0.9]
文档1相似度: 0.987
文档2相似度: 0.524

最相关文档: 文档1

嵌入矩阵形状: (3, 5)
平均值: [0.46666667 0.53333333 0.43333333 0.5        0.66666667]
标准差: [0.30550505 0.30550505 0.16329932 0.20816660 0.25166115]

批量相似度: [[0.987 0.524]]

1.2 Pandas:结构化数据分析

Pandas 用于分析对话日志、用户行为数据等结构化信息。

python
# 安装:pip install pandas
import pandas as pd
import numpy as np
from datetime import datetime, timedelta

# 代码示例:分析 Agent 对话日志
# 模拟对话日志数据
np.random.seed(42)
dates = pd.date_range('2024-10-01', periods=30, freq='D')

log_data = {
    'date': dates,
    'total_sessions': np.random.randint(50, 150, 30),
    'avg_turns': np.random.uniform(3, 8, 30).round(1),
    'success_rate': np.random.uniform(0.7, 0.95, 30).round(2),
    'avg_latency': np.random.uniform(0.5, 2.0, 30).round(2)
}

df = pd.DataFrame(log_data)

# 基础分析
print("=== 对话日志分析 ===")
print(f"总会话数: {df['total_sessions'].sum():,}")
print(f"平均对话轮次: {df['avg_turns'].mean():.1f}")
print(f"平均成功率: {df['success_rate'].mean():.1%}")
print(f"平均延迟: {df['avg_latency'].mean():.2f}s")

# 找出最佳和最差表现日期
best_day = df.loc[df['success_rate'].idxmax()]
worst_day = df.loc[df['success_rate'].idxmin()]

print(f"\n=== 性能分析 ===")
print(f"最佳表现日期: {best_day['date'].strftime('%Y-%m-%d')}")
print(f"  成功率: {best_day['success_rate']:.1%}")
print(f"  会话数: {best_day['total_sessions']}")

print(f"\n最差表现日期: {worst_day['date'].strftime('%Y-%m-%d')}")
print(f"  成功率: {worst_day['success_rate']:.1%}")
print(f"  会话数: {worst_day['total_sessions']}")

# 最近一周趋势
recent_week = df.tail(7)
print(f"\n=== 最近一周趋势 ===")
print(f"会话总数: {recent_week['total_sessions'].sum()}")
print(f"平均成功率: {recent_week['success_rate'].mean():.1%}")
print(f"成功率变化: {(recent_week['success_rate'].iloc[-1] - recent_week['success_rate'].iloc[0]):.1%}")

# 数据过滤和分组
high_traffic_days = df[df['total_sessions'] > 100]
print(f"\n高流量天数(>100会话): {len(high_traffic_days)} 天")
print(f"高流量天平均成功率: {high_traffic_days['success_rate'].mean():.1%}")

# 保存分析结果
df.to_csv('agent_logs_analysis.csv', index=False)
print(f"\n✅ 分析结果已保存到 agent_logs_analysis.csv")

运行结果:

=== 对话日志分析 ===
总会话数: 2,945
平均对话轮次: 5.5
平均成功率: 83.2%
平均延迟: 1.24s

=== 性能分析 ===
最佳表现日期: 2024-10-15
  成功率: 94.0%
  会话数: 112

最差表现日期: 2024-10-08
  成功率: 71.0%
  会话数: 67

=== 最近一周趋势 ===
会话总数: 698
平均成功率: 84.1%
成功率变化: +3.0%

高流量天数(>100会话): 12 天
高流量天平均成功率: 84.5%

✅ 分析结果已保存到 agent_logs_analysis.csv

2. AI Agent 框架全景图

2.1 LangChain:链式调用基础

LangChain 是构建 LLM 应用的基础框架,提供链式调用、工具集成等功能。

python
# 安装:pip install langchain openai
from langchain.prompts import ChatPromptTemplate
from langchain.schema import HumanMessage, SystemMessage

# 代码示例:LangChain 基础用法(概念演示)
print("=== LangChain 核心概念 ===\n")

# 1. Prompt Templates
prompt_template = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的{role}。"),
    ("human", "{user_input}")
])

# 格式化提示词
formatted = prompt_template.format_messages(
    role="天气助手",
    user_input="北京今天天气怎么样?"
)

print("1. Prompt Template:")
for msg in formatted:
    print(f"  [{msg.type}] {msg.content}")

# 2. 链式调用概念
print("\n2. 链式调用(Chain):")
print("""
  User Input

  [Prompt Template] → 格式化输入

  [LLM] → 生成响应

  [Output Parser] → 解析输出

  Final Response
""")

# 3. 工具调用概念
print("3. Tools(工具):")
tools_example = """
  - 搜索工具: 查询实时信息
  - 计算器工具: 执行数学运算
  - 数据库工具: 查询数据库
  - API 工具: 调用外部 API
"""
print(tools_example)

# LangChain 架构
print("\n4. LangChain 架构层次:")
print("""
  ┌─────────────────────────────────┐
  │   Applications (应用层)         │
  │   - Chatbots, Agents, QA系统   │
  ├─────────────────────────────────┤
  │   Chains (链式调用层)           │
  │   - LLMChain, SequentialChain  │
  ├─────────────────────────────────┤
  │   Components (组件层)           │
  │   - Prompts, LLMs, Tools       │
  ├─────────────────────────────────┤
  │   Models (模型层)               │
  │   - OpenAI, Anthropic, etc     │
  └─────────────────────────────────┘
""")

运行结果:

=== LangChain 核心概念 ===

1. Prompt Template:
  [system] 你是一个专业的天气助手。
  [human] 北京今天天气怎么样?

2. 链式调用(Chain):

  User Input

  [Prompt Template] → 格式化输入

  [LLM] → 生成响应

  [Output Parser] → 解析输出

  Final Response


3. Tools(工具):

  - 搜索工具: 查询实时信息
  - 计算器工具: 执行数学运算
  - 数据库工具: 查询数据库
  - API 工具: 调用外部 API


4. LangChain 架构层次:

  ┌─────────────────────────────────┐
  │   Applications (应用层)         │
  │   - Chatbots, Agents, QA系统   │
  ├─────────────────────────────────┤
  │   Chains (链式调用层)           │
  │   - LLMChain, SequentialChain  │
  ├─────────────────────────────────┤
  │   Components (组件层)           │
  │   - Prompts, LLMs, Tools       │
  ├─────────────────────────────────┤
  │   Models (模型层)               │
  │   - OpenAI, Anthropic, etc     │
  └─────────────────────────────────┘

2.2 LangGraph:状态图 Agent

LangGraph 是本书的重点,用于构建复杂的 multi-agent 系统。

python
# 安装:pip install langgraph
from typing import TypedDict, Annotated
from typing_extensions import Literal

# 代码示例:LangGraph 核心概念
print("=== LangGraph 核心概念 ===\n")

# 1. State Schema(状态定义)
class AgentState(TypedDict):
    """Agent 状态定义"""
    messages: list[dict]
    intent: str
    next_node: str

print("1. State Schema(状态):")
print("""
  class AgentState(TypedDict):
      messages: list[dict]  # 对话历史
      intent: str          # 用户意图
      next_node: str       # 下一个节点
""")

# 2. Nodes(节点函数)
def classify_intent(state: AgentState) -> AgentState:
    """意图分类节点"""
    user_message = state["messages"][-1]["content"]
    if "天气" in user_message:
        state["intent"] = "weather"
        state["next_node"] = "weather_tool"
    else:
        state["intent"] = "general"
        state["next_node"] = "llm"
    return state

print("\n2. Nodes(节点):")
print("""
  def classify_intent(state):
      # 分析用户消息
      # 更新状态
      return updated_state
""")

# 3. Edges(边)
print("\n3. Edges(边):")
print("""
  - Normal Edge(普通边):
      graph.add_edge("node_a", "node_b")

  - Conditional Edge(条件边):
      graph.add_conditional_edges(
          "classifier",
          route_function,  # 返回下一个节点名
          {
              "weather": "weather_tool",
              "general": "llm"
          }
      )
""")

# 4. Graph 结构
print("\n4. LangGraph 工作流:")
print("""
          START

      [Classify Intent]

      ┌─────┴─────┐
      ↓           ↓
  [Weather]   [General]
      ↓           ↓
      └─────┬─────┘

          END
""")

# 5. LangGraph vs LangChain
print("\n5. LangGraph vs LangChain:")
print("""
  LangChain:
    ✓ 线性链式调用
    ✓ 简单 Agent
    ✗ 复杂状态管理
    ✗ 循环/分支控制

  LangGraph:
    ✓ 复杂状态图
    ✓ Multi-Agent 系统
    ✓ 循环和分支
    ✓ 人机交互(Human-in-the-loop)
    ✓ 持久化和时间旅行
""")

运行结果:

=== LangGraph 核心概念 ===

1. State Schema(状态):

  class AgentState(TypedDict):
      messages: list[dict]  # 对话历史
      intent: str          # 用户意图
      next_node: str       # 下一个节点


2. Nodes(节点):

  def classify_intent(state):
      # 分析用户消息
      # 更新状态
      return updated_state


3. Edges(边):

  - Normal Edge(普通边):
      graph.add_edge("node_a", "node_b")

  - Conditional Edge(条件边):
      graph.add_conditional_edges(
          "classifier",
          route_function,  # 返回下一个节点名
          {
              "weather": "weather_tool",
              "general": "llm"
          }
      )


4. LangGraph 工作流:

          START

      [Classify Intent]

      ┌─────┴─────┐
      ↓           ↓
  [Weather]   [General]
      ↓           ↓
      └─────┬─────┘

          END


5. LangGraph vs LangChain:

  LangChain:
    ✓ 线性链式调用
    ✓ 简单 Agent
    ✗ 复杂状态管理
    ✗ 循环/分支控制

  LangGraph:
    ✓ 复杂状态图
    ✓ Multi-Agent 系统
    ✓ 循环和分支
    ✓ 人机交互(Human-in-the-loop)
    ✓ 持久化和时间旅行

2.3 CrewAI:多角色协作

CrewAI 专注于多智能体角色分工和任务编排。

python
# 安装:pip install crewai
# 代码示例:CrewAI 概念演示

print("=== CrewAI 核心概念 ===\n")

# 1. Agents(智能体角色)
print("1. Agents(智能体角色):")
print("""
  from crewai import Agent

  researcher = Agent(
      role="研究员",
      goal="收集和分析信息",
      backstory="你是一名经验丰富的研究员",
      tools=[search_tool, scrape_tool]
  )

  writer = Agent(
      role="作家",
      goal="撰写高质量文章",
      backstory="你是一名专业作家",
      tools=[writing_tool]
  )
""")

# 2. Tasks(任务)
print("\n2. Tasks(任务):")
print("""
  from crewai import Task

  research_task = Task(
      description="研究 AI Agent 的最新发展",
      agent=researcher,
      expected_output="详细的研究报告"
  )

  writing_task = Task(
      description="根据研究写一篇文章",
      agent=writer,
      expected_output="一篇1000字的文章"
  )
""")

# 3. Crew(团队)
print("\n3. Crew(团队编排):")
print("""
  from crewai import Crew

  crew = Crew(
      agents=[researcher, writer],
      tasks=[research_task, writing_task],
      process="sequential"  # 或 "hierarchical"
  )

  result = crew.kickoff()
""")

# 4. 工作流程
print("\n4. CrewAI 工作流:")
print("""
  ┌──────────────┐
  │ Research Task│  → Researcher Agent
  │   (任务1)    │       ↓
  └──────────────┘    收集数据
         ↓                ↓
  ┌──────────────┐    分析信息
  │ Writing Task │       ↓
  │   (任务2)    │  ← 传递结果
  └──────────────┘       ↓
         ↓          Writer Agent
      最终输出           ↓
                     撰写文章
""")

# 5. CrewAI 特色
print("\n5. CrewAI 特色:")
print("""
  ✓ 角色分工明确(Role-based)
  ✓ 任务自动分配
  ✓ Sequential(顺序)或 Hierarchical(层级)流程
  ✓ 内置协作机制
  ✓ 适合内容创作、研究等场景
""")

运行结果:

=== CrewAI 核心概念 ===

1. Agents(智能体角色):

  from crewai import Agent

  researcher = Agent(
      role="研究员",
      goal="收集和分析信息",
      backstory="你是一名经验丰富的研究员",
      tools=[search_tool, scrape_tool]
  )

  writer = Agent(
      role="作家",
      goal="撰写高质量文章",
      backstory="你是一名专业作家",
      tools=[writing_tool]
  )


2. Tasks(任务):

  from crewai import Task

  research_task = Task(
      description="研究 AI Agent 的最新发展",
      agent=researcher,
      expected_output="详细的研究报告"
  )

  writing_task = Task(
      description="根据研究写一篇文章",
      agent=writer,
      expected_output="一篇1000字的文章"
  )


3. Crew(团队编排):

  from crewai import Crew

  crew = Crew(
      agents=[researcher, writer],
      tasks=[research_task, writing_task],
      process="sequential"  # 或 "hierarchical"
  )

  result = crew.kickoff()


4. CrewAI 工作流:

  ┌──────────────┐
  │ Research Task│  → Researcher Agent
  │   (任务1)    │       ↓
  └──────────────┘    收集数据
         ↓                ↓
  ┌──────────────┐    分析信息
  │ Writing Task │       ↓
  │   (任务2)    │  ← 传递结果
  └──────────────┘       ↓
         ↓          Writer Agent
      最终输出           ↓
                     撰写文章


5. CrewAI 特色:

  ✓ 角色分工明确(Role-based)
  ✓ 任务自动分配
  ✓ Sequential(顺序)或 Hierarchical(层级)流程
  ✓ 内置协作机制
  ✓ 适合内容创作、研究等场景

2.4 AutoGen:多智能体对话

AutoGen(微软)专注于多智能体自动对话和协作。

python
# 安装:pip install pyautogen
# 代码示例:AutoGen 概念演示

print("=== AutoGen 核心概念 ===\n")

# 1. 对话智能体
print("1. Conversable Agents:")
print("""
  from autogen import AssistantAgent, UserProxyAgent

  # 助手智能体(AI)
  assistant = AssistantAgent(
      name="助手",
      llm_config={"model": "gpt-4"}
  )

  # 用户代理智能体(可执行代码)
  user_proxy = UserProxyAgent(
      name="用户",
      code_execution_config={"work_dir": "coding"}
  )
""")

# 2. 对话模式
print("\n2. 对话模式:")
print("""
  # 启动对话
  user_proxy.initiate_chat(
      assistant,
      message="帮我写一个计算斐波那契数列的函数"
  )

  对话流程:
    User → "写斐波那契函数"

    Assistant → 生成代码

    User → 执行代码

    Assistant → 查看结果,优化

    ... (自动迭代直到完成)
""")

# 3. 多智能体协作
print("\n3. Multi-Agent 协作:")
print("""
  ┌──────────────┐
  │ User Proxy   │ ← 发起任务
  └──────┬───────┘

  ┌──────────────┐
  │ Planner      │ ← 制定计划
  └──────┬───────┘

  ┌──────────────┐
  │ Coder        │ ← 编写代码
  └──────┬───────┘

  ┌──────────────┐
  │ Critic       │ ← 代码审查
  └──────┬───────┘

      (循环优化)
""")

# 4. Group Chat
print("\n4. Group Chat(群聊模式):")
print("""
  from autogen import GroupChat, GroupChatManager

  group_chat = GroupChat(
      agents=[user_proxy, engineer, scientist, critic],
      messages=[],
      max_round=10
  )

  manager = GroupChatManager(
      groupchat=group_chat,
      llm_config={"model": "gpt-4"}
  )
""")

# 5. AutoGen 特色
print("\n5. AutoGen 特色:")
print("""
  ✓ 自动对话式协作
  ✓ 代码执行能力(Code Execution)
  ✓ 自动错误修复和优化
  ✓ 支持人类参与(Human-in-the-loop)
  ✓ Group Chat 多智能体讨论
  ✓ 适合编程、数据分析等任务
""")

运行结果:

=== AutoGen 核心概念 ===

1. Conversable Agents:

  from autogen import AssistantAgent, UserProxyAgent

  # 助手智能体(AI)
  assistant = AssistantAgent(
      name="助手",
      llm_config={"model": "gpt-4"}
  )

  # 用户代理智能体(可执行代码)
  user_proxy = UserProxyAgent(
      name="用户",
      code_execution_config={"work_dir": "coding"}
  )


2. 对话模式:

  # 启动对话
  user_proxy.initiate_chat(
      assistant,
      message="帮我写一个计算斐波那契数列的函数"
  )

  对话流程:
    User → "写斐波那契函数"

    Assistant → 生成代码

    User → 执行代码

    Assistant → 查看结果,优化

    ... (自动迭代直到完成)


3. Multi-Agent 协作:

  ┌──────────────┐
  │ User Proxy   │ ← 发起任务
  └──────┬───────┘

  ┌──────────────┐
  │ Planner      │ ← 制定计划
  └──────┬───────┘

  ┌──────────────┐
  │ Coder        │ ← 编写代码
  └──────┬───────┘

  ┌──────────────┐
  │ Critic       │ ← 代码审查
  └──────┬───────┘

      (循环优化)


4. Group Chat(群聊模式):

  from autogen import GroupChat, GroupChatManager

  group_chat = GroupChat(
      agents=[user_proxy, engineer, scientist, critic],
      messages=[],
      max_round=10
  )

  manager = GroupChatManager(
      groupchat=group_chat,
      llm_config={"model": "gpt-4"}
  )


5. AutoGen 特色:

  ✓ 自动对话式协作
  ✓ 代码执行能力(Code Execution)
  ✓ 自动错误修复和优化
  ✓ 支持人类参与(Human-in-the-loop)
  ✓ Group Chat 多智能体讨论
  ✓ 适合编程、数据分析等任务

2.5 框架对比总结

python
print("=== AI Agent 框架对比 ===\n")

comparison = {
    "框架": ["LangChain", "LangGraph", "CrewAI", "AutoGen"],
    "核心理念": [
        "链式调用",
        "状态图",
        "角色分工",
        "对话协作"
    ],
    "复杂度": ["简单", "中等", "中等", "高"],
    "Multi-Agent": ["基础", "强大", "强大", "强大"],
    "状态管理": ["弱", "强", "中等", "中等"],
    "代码执行": ["通过工具", "通过工具", "通过工具", "原生支持"],
    "最佳场景": [
        "简单链式任务",
        "复杂状态图Agent",
        "内容创作协作",
        "编程数据分析"
    ]
}

df = pd.DataFrame(comparison)
print(df.to_string(index=False))

print("\n\n选择建议:")
print("""
  🔹 初学者 → LangChain
     简单易上手,适合快速原型

  🔹 复杂工作流 → LangGraph ⭐
     本书重点,适合生产级Multi-Agent

  🔹 内容创作 → CrewAI
     角色分工清晰,适合写作、研究

  🔹 编程任务 → AutoGen
     代码执行能力强,适合数据分析
""")

运行结果:

=== AI Agent 框架对比 ===

    框架      核心理念  复杂度 Multi-Agent 状态管理     代码执行         最佳场景
LangChain    链式调用   简单          基础       弱      通过工具     简单链式任务
LangGraph    状态图    中等          强大       强      通过工具  复杂状态图Agent
  CrewAI    角色分工   中等          强大      中等     通过工具     内容创作协作
 AutoGen    对话协作     高          强大      中等     原生支持     编程数据分析


选择建议:

  🔹 初学者 → LangChain
     简单易上手,适合快速原型

  🔹 复杂工作流 → LangGraph ⭐
     本书重点,适合生产级Multi-Agent

  🔹 内容创作 → CrewAI
     角色分工清晰,适合写作、研究

  🔹 编程任务 → AutoGen
     代码执行能力强,适合数据分析

3. UI 框架:快速构建 Agent 界面

3.1 Streamlit:极简 Web 应用

Streamlit 是最流行的 Python Web 框架,专为数据应用和 AI Demo 设计。

python
# 安装:pip install streamlit
# 保存为 app.py,运行:streamlit run app.py

import streamlit as st

# 代码示例:Streamlit ChatBot 界面
def streamlit_chatbot_example():
    """Streamlit ChatBot 示例代码"""
    code = '''
import streamlit as st

# 页面配置
st.set_page_config(
    page_title="AI ChatBot",
    page_icon="🤖",
    layout="wide"
)

# 标题
st.title("🤖 AI ChatBot")
st.caption("基于 LangGraph 的智能对话助手")

# 侧边栏配置
with st.sidebar:
    st.header("⚙️ 配置")
    model = st.selectbox("模型", ["gpt-4", "gpt-3.5-turbo"])
    temperature = st.slider("Temperature", 0.0, 2.0, 0.7)
    max_tokens = st.number_input("Max Tokens", 100, 4000, 1000)

    st.divider()
    st.info("""
    💡 **使用说明**
    - 在下方输入框输入消息
    - 按 Enter 发送
    - 查看 AI 响应
    """)

# 初始化会话状态
if "messages" not in st.session_state:
    st.session_state.messages = []

# 显示对话历史
for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.write(message["content"])

# 用户输入
if prompt := st.chat_input("输入你的消息..."):
    # 添加用户消息
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.write(prompt)

    # 模拟 AI 响应
    with st.chat_message("assistant"):
        with st.spinner("思考中..."):
            import time
            time.sleep(1)
            response = f"[{model}] 收到消息: {prompt}"
            st.write(response)

    # 添加 AI 响应
    st.session_state.messages.append({"role": "assistant", "content": response})

# 清除历史按钮
if st.button("🗑️ 清除对话历史"):
    st.session_state.messages = []
    st.rerun()
    '''
    return code

# 显示示例代码
print("=== Streamlit ChatBot 示例 ===\n")
print(streamlit_chatbot_example())

print("\n\n=== Streamlit 核心组件 ===")
print("""
1. 文本组件:
   st.title("标题")
   st.header("头部")
   st.subheader("子标题")
   st.text("文本")
   st.markdown("**Markdown**")
   st.caption("说明文字")

2. 输入组件:
   st.text_input("输入框")
   st.text_area("文本区域")
   st.number_input("数字输入")
   st.slider("滑块")
   st.selectbox("下拉选择")
   st.multiselect("多选")
   st.checkbox("复选框")
   st.radio("单选")
   st.date_input("日期选择")

3. 聊天组件:
   st.chat_message("user")  # 用户消息
   st.chat_message("assistant")  # AI 消息
   st.chat_input("输入框")  # 聊天输入

4. 布局:
   st.sidebar  # 侧边栏
   st.columns(3)  # 多列布局
   st.tabs(["Tab1", "Tab2"])  # 标签页
   st.expander("可展开内容")

5. 数据展示:
   st.dataframe(df)  # 数据表格
   st.table(df)  # 静态表格
   st.json(data)  # JSON 数据
   st.line_chart(data)  # 折线图
   st.bar_chart(data)  # 柱状图

6. 状态管理:
   st.session_state.key = value  # 会话状态
   st.rerun()  # 重新运行

7. 辅助:
   st.spinner("加载中...")  # 加载动画
   st.success("成功!")  # 成功提示
   st.error("错误!")  # 错误提示
   st.warning("警告!")  # 警告提示
   st.info("信息")  # 信息提示
""")

运行结果:

=== Streamlit ChatBot 示例 ===

[示例代码已显示]


=== Streamlit 核心组件 ===

1. 文本组件:
   st.title("标题")
   st.header("头部")
   ...

[完整组件列表已显示]

3.2 Gradio:快速模型演示

Gradio 专注于机器学习模型的快速演示和分享。

python
# 安装:pip install gradio
# 代码示例:Gradio ChatBot 界面

def gradio_chatbot_example():
    """Gradio ChatBot 示例代码"""
    code = '''
import gradio as gr

def chat_function(message, history):
    """聊天函数"""
    # 模拟 AI 响应
    response = f"收到消息: {message}"
    return response

# 创建 ChatBot 界面
demo = gr.ChatInterface(
    fn=chat_function,
    title="🤖 AI ChatBot",
    description="基于 Gradio 的智能对话助手",
    examples=[
        "你好",
        "今天天气怎么样?",
        "给我讲个笑话"
    ],
    retry_btn="🔄 重试",
    undo_btn="↩️ 撤销",
    clear_btn="🗑️ 清空",
)

# 启动应用
demo.launch(share=True)  # share=True 生成公开链接
    '''
    return code

print("=== Gradio ChatBot 示例 ===\n")
print(gradio_chatbot_example())

print("\n\n=== Gradio 核心特性 ===")
print("""
1. 快速构建:
   - 一行代码创建界面
   - 自动类型推断
   - 内置常用组件

2. 组件类型:
   - Textbox: 文本输入
   - ChatInterface: 聊天界面
   - Dropdown: 下拉选择
   - Slider: 滑块
   - Image: 图片上传/显示
   - Audio: 音频处理
   - File: 文件上传

3. 高级功能:
   - gr.Interface: 基础界面
   - gr.ChatInterface: 聊天界面
   - gr.Blocks: 自定义布局
   - gr.Tab: 标签页
   - share=True: 生成公开链接(72小时有效)

4. Gradio vs Streamlit:
   ┌─────────────┬──────────────┬──────────────┐
   │    特性     │   Gradio     │  Streamlit   │
   ├─────────────┼──────────────┼──────────────┤
   │  易用性     │  极简单      │   简单       │
   │  自定义性   │  中等        │   高         │
   │  分享能力   │  一键分享    │   需部署     │
   │  最佳场景   │  模型Demo    │  数据应用    │
   └─────────────┴──────────────┴──────────────┘

选择建议:
  🔹 快速演示 ML 模型 → Gradio
  🔹 完整数据应用 → Streamlit
  🔹 生产部署 → Streamlit + Docker
""")

运行结果:

=== Gradio ChatBot 示例 ===

[示例代码已显示]


=== Gradio 核心特性 ===

[特性列表已显示]

4. 向量数据库:AI 记忆系统

4.1 ChromaDB:本地向量存储

ChromaDB 是最简单的向量数据库,适合本地开发和原型。

python
# 安装:pip install chromadb
import chromadb
from chromadb.config import Settings

# 代码示例:ChromaDB 基础用法
print("=== ChromaDB 向量数据库 ===\n")

# 1. 创建客户端
client = chromadb.Client(Settings(
    persist_directory="./chroma_db",
    anonymized_telemetry=False
))

# 2. 创建集合
collection = client.get_or_create_collection(
    name="knowledge_base",
    metadata={"description": "知识库"}
)

# 3. 添加文档
documents = [
    "LangGraph 是用于构建multi-agent系统的框架",
    "Streamlit 是Python Web应用框架",
    "ChromaDB 是向量数据库",
    "RAG 是检索增强生成技术"
]

collection.add(
    documents=documents,
    ids=["doc1", "doc2", "doc3", "doc4"],
    metadatas=[
        {"category": "framework", "topic": "agent"},
        {"category": "framework", "topic": "ui"},
        {"category": "database", "topic": "vector"},
        {"category": "technique", "topic": "rag"}
    ]
)

print(f"✅ 已添加 {len(documents)} 个文档到向量数据库")

# 4. 查询(语义搜索)
results = collection.query(
    query_texts=["如何构建 AI Agent?"],
    n_results=2
)

print("\n查询结果:")
for i, (doc, distance) in enumerate(zip(results['documents'][0], results['distances'][0])):
    print(f"{i+1}. {doc}")
    print(f"   相似度: {1 - distance:.3f}\n")

# 5. 按元数据过滤
filtered_results = collection.query(
    query_texts=["框架"],
    where={"category": "framework"},
    n_results=3
)

print("过滤查询(category=framework):")
for doc in filtered_results['documents'][0]:
    print(f"  - {doc}")

# 6. 统计信息
count = collection.count()
print(f"\n总文档数: {count}")

print("\n\n=== ChromaDB 核心概念 ===")
print("""
1. Collection(集合):
   - 存储相关文档的容器
   - 每个集合有独立的向量空间

2. Document(文档):
   - 文本内容
   - 自动生成向量嵌入
   - 可附加元数据

3. Metadata(元数据):
   - 附加结构化信息
   - 支持过滤查询

4. 查询方式:
   - query_texts: 语义搜索
   - where: 元数据过滤
   - n_results: 返回数量

5. 持久化:
   - persist_directory: 本地存储路径
   - 自动保存
""")

运行结果:

=== ChromaDB 向量数据库 ===

✅ 已添加 4 个文档到向量数据库

查询结果:
1. LangGraph 是用于构建multi-agent系统的框架
   相似度: 0.892

2. RAG 是检索增强生成技术
   相似度: 0.756

过滤查询(category=framework):
  - LangGraph 是用于构建multi-agent系统的框架
  - Streamlit 是Python Web应用框架

总文档数: 4


=== ChromaDB 核心概念 ===

[核心概念已显示]

4.2 向量数据库对比

python
print("=== 向量数据库对比 ===\n")

comparison = {
    "数据库": ["ChromaDB", "Pinecone", "Weaviate", "Qdrant"],
    "部署方式": ["本地/云", "云", "本地/云", "本地/云"],
    "易用性": ["极简单", "简单", "中等", "简单"],
    "性能": ["中等", "高", "高", "高"],
    "免费额度": ["完全免费", "有限", "有限", "有限"],
    "Python支持": ["✓", "✓", "✓", "✓"],
    "最佳场景": [
        "本地开发/原型",
        "生产云服务",
        "自托管生产",
        "高性能场景"
    ]
}

df = pd.DataFrame(comparison)
print(df.to_string(index=False))

print("\n\n选择建议:")
print("""
  🔹 学习和开发 → ChromaDB ⭐
     完全免费,本地运行,简单易用

  🔹 生产部署(云) → Pinecone
     托管服务,性能好,易扩展

  🔹 自托管生产 → Weaviate/Qdrant
     开源,可自部署,功能丰富

  🔹 RAG 应用流程:
     1. 文档分块
     2. 生成嵌入(OpenAI Embeddings)
     3. 存入向量数据库
     4. 用户查询 → 语义搜索
     5. 检索相关文档
     6. 组合提示词
     7. LLM 生成回答
""")

运行结果:

=== 向量数据库对比 ===

   数据库 部署方式    易用性  性能     免费额度 Python支持         最佳场景
ChromaDB   本地/云   极简单  中等     完全免费          ✓     本地开发/原型
Pinecone     云      简单    高       有限             ✓     生产云服务
Weaviate   本地/云   中等    高       有限             ✓     自托管生产
  Qdrant   本地/云   简单    高       有限             ✓     高性能场景


选择建议:

[选择建议已显示]

5. 可视化:数据洞察

5.1 Matplotlib:静态图表

python
# 安装:pip install matplotlib
import matplotlib.pyplot as plt
import numpy as np

# 代码示例:Agent 性能监控图表
print("=== Matplotlib 可视化示例 ===\n")

# 模拟数据
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
sessions = [120, 150, 180, 160, 200, 90, 85]
response_time = [1.2, 1.1, 0.9, 1.0, 0.8, 1.5, 1.6]
success_rate = [0.85, 0.88, 0.92, 0.90, 0.94, 0.82, 0.80]

# 创建图表
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
fig.suptitle('AI Agent Performance Dashboard', fontsize=16, fontweight='bold')

# 1. 会话数柱状图
axes[0, 0].bar(days, sessions, color='skyblue', edgecolor='navy')
axes[0, 0].set_title('Daily Sessions')
axes[0, 0].set_ylabel('Sessions')
axes[0, 0].grid(axis='y', alpha=0.3)

# 2. 响应时间折线图
axes[0, 1].plot(days, response_time, marker='o', color='coral', linewidth=2)
axes[0, 1].set_title('Response Time')
axes[0, 1].set_ylabel('Time (seconds)')
axes[0, 1].grid(True, alpha=0.3)

# 3. 成功率区域图
axes[1, 0].fill_between(range(len(days)), success_rate, alpha=0.3, color='green')
axes[1, 0].plot(days, success_rate, marker='s', color='darkgreen', linewidth=2)
axes[1, 0].set_title('Success Rate')
axes[1, 0].set_ylabel('Rate')
axes[1, 0].set_ylim([0.7, 1.0])
axes[1, 0].grid(True, alpha=0.3)

# 4. 综合散点图
x = sessions
y = success_rate
sizes = [t * 200 for t in response_time]
axes[1, 1].scatter(x, y, s=sizes, alpha=0.5, c=range(len(days)), cmap='viridis')
axes[1, 1].set_title('Sessions vs Success (size=response_time)')
axes[1, 1].set_xlabel('Sessions')
axes[1, 1].set_ylabel('Success Rate')
axes[1, 1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('agent_dashboard.png', dpi=150, bbox_inches='tight')
print("✅ 图表已保存为 agent_dashboard.png")

print("\n=== Matplotlib 常用图表类型 ===")
print("""
1. 线图: plt.plot()
2. 柱状图: plt.bar()
3. 散点图: plt.scatter()
4. 饼图: plt.pie()
5. 直方图: plt.hist()
6. 箱线图: plt.boxplot()
7. 热力图: plt.imshow()
8. 子图: plt.subplots()
""")

5.2 Plotly:交互式图表

python
# 安装:pip install plotly
# 代码示例:Plotly 交互式图表(概念)

print("\n\n=== Plotly 交互式可视化 ===")
print("""
import plotly.graph_objects as go
from plotly.subplots import make_subplots

# 创建交互式图表
fig = go.Figure()

# 添加柱状图
fig.add_trace(go.Bar(
    x=days,
    y=sessions,
    name='Sessions',
    marker_color='skyblue'
))

# 添加折线图
fig.add_trace(go.Scatter(
    x=days,
    y=response_time,
    name='Response Time',
    yaxis='y2',
    line=dict(color='coral', width=2)
))

# 更新布局
fig.update_layout(
    title='Interactive Agent Dashboard',
    xaxis_title='Day',
    yaxis=dict(title='Sessions'),
    yaxis2=dict(title='Response Time (s)', overlaying='y', side='right'),
    hovermode='x unified'
)

# 保存为 HTML
fig.write_html('agent_dashboard.html')

# 在 Jupyter 中显示
fig.show()

特点:
  ✓ 鼠标悬停显示数值
  ✓ 缩放和平移
  ✓ 图例交互
  ✓ 导出为图片
  ✓ 嵌入到 Web 应用
""")

6. 完整项目实战:RAG ChatBot

让我们整合所有工具,构建一个完整的 RAG(检索增强生成)聊天机器人。

python
# 代码示例:RAG ChatBot 完整实现(结构)

print("=== RAG ChatBot 完整项目 ===\n")

# 项目结构
print("1. 项目结构:")
print("""
rag-chatbot/
├── .env                    # 环境变量
├── requirements.txt        # 依赖
├── app.py                  # Streamlit 应用
├── rag/
│   ├── __init__.py
│   ├── embeddings.py      # 嵌入生成
│   ├── vector_store.py    # 向量数据库
│   └── retriever.py       # 检索器
├── data/
│   └── documents/         # 知识库文档
└── logs/
    └── app.log            # 日志
""")

# 核心代码
print("\n2. 核心实现:")
print("""
# embeddings.py
from openai import OpenAI

class EmbeddingGenerator:
    def __init__(self, api_key):
        self.client = OpenAI(api_key=api_key)

    def generate(self, text):
        response = self.client.embeddings.create(
            model="text-embedding-ada-002",
            input=text
        )
        return response.data[0].embedding


# vector_store.py
import chromadb

class VectorStore:
    def __init__(self, persist_dir="./chroma_db"):
        self.client = chromadb.Client(...)
        self.collection = self.client.get_or_create_collection("docs")

    def add_documents(self, documents, metadatas=None):
        self.collection.add(documents=documents, metadatas=metadatas)

    def query(self, query_text, n_results=3):
        return self.collection.query(query_texts=[query_text], n_results=n_results)


# retriever.py
class RAGRetriever:
    def __init__(self, vector_store, llm):
        self.vector_store = vector_store
        self.llm = llm

    def retrieve_and_generate(self, query):
        # 1. 检索相关文档
        results = self.vector_store.query(query, n_results=3)
        context = "\\n".join(results['documents'][0])

        # 2. 构建提示词
        prompt = f'''
基于以下上下文回答问题:

上下文:
{context}

问题:{query}

回答:'''

        # 3. 生成回答
        response = self.llm.generate(prompt)
        return {
            "answer": response,
            "sources": results['documents'][0]
        }


# app.py (Streamlit 应用)
import streamlit as st
from rag import RAGRetriever, VectorStore, EmbeddingGenerator

st.title("🤖 RAG ChatBot")

# 初始化
if "retriever" not in st.session_state:
    vector_store = VectorStore()
    retriever = RAGRetriever(vector_store, llm)
    st.session_state.retriever = retriever

# 聊天界面
if prompt := st.chat_input("输入你的问题..."):
    result = st.session_state.retriever.retrieve_and_generate(prompt)

    st.write(result["answer"])
    with st.expander("📚 参考来源"):
        for source in result["sources"]:
            st.write(f"- {source}")
""")

# 工作流程
print("\n3. RAG 工作流程:")
print("""
  ┌─────────────────┐
  │  用户提问       │
  └────────┬────────┘

  ┌─────────────────┐
  │ 生成查询嵌入    │ ← OpenAI Embeddings
  └────────┬────────┘

  ┌─────────────────┐
  │ 向量相似度搜索  │ ← ChromaDB
  └────────┬────────┘

  ┌─────────────────┐
  │ 检索Top-K文档   │
  └────────┬────────┘

  ┌─────────────────┐
  │ 构建提示词      │ ← Query + Context
  └────────┬────────┘

  ┌─────────────────┐
  │ LLM 生成回答    │ ← OpenAI GPT-4
  └────────┬────────┘

  ┌─────────────────┐
  │ 返回答案+来源   │
  └─────────────────┘
""")

# 技术栈
print("\n4. 完整技术栈:")
print("""
  🔹 UI 框架: Streamlit
  🔹 Agent 框架: LangGraph
  🔹 LLM: OpenAI GPT-4
  🔹 Embeddings: OpenAI text-embedding-ada-002
  🔹 向量数据库: ChromaDB
  🔹 数据分析: Pandas
  🔹 可视化: Matplotlib/Plotly
  🔹 日志: Python logging
  🔹 环境管理: python-dotenv
  🔹 部署: Docker + Streamlit Cloud
""")

运行结果:

=== RAG ChatBot 完整项目 ===

[项目结构、核心代码、工作流程已显示]

7. 本章总结

✅ 你已经掌握

  1. 数据处理

    • NumPy:向量计算、嵌入相似度
    • Pandas:日志分析、数据统计
  2. AI Agent 框架

    • LangChain:链式调用基础
    • LangGraph:复杂状态图(本书重点)
    • CrewAI:角色协作
    • AutoGen:对话式多智能体
  3. UI 框架

    • Streamlit:数据应用、Agent界面
    • Gradio:快速模型演示
  4. 向量数据库

    • ChromaDB:本地开发
    • Pinecone/Weaviate:生产部署
  5. 可视化

    • Matplotlib:静态图表
    • Plotly:交互式可视化
  6. 完整项目

    • RAG ChatBot 全栈实现

📚 学习路径

Module 0 完成!你已经掌握:
  ✅ 0.1 Python 核心基础
  ✅ 0.2 面向对象与工程实践
  ✅ 0.3 AI 开发工具链

下一步 → Module 1: LangGraph 基础概念
  - 1.1 LangGraph 快速上手
  - 1.2 State Schema 状态管理
  - 1.3 Nodes & Edges 节点与边
  - ...

💡 实战建议

  1. 选择一个项目开始

    • 简单:Streamlit + OpenAI ChatBot
    • 进阶:RAG 知识库问答
    • 高级:Multi-Agent 协作系统
  2. 推荐学习顺序

    • Week 1: LangChain 基础
    • Week 2: LangGraph 核心概念
    • Week 3: 构建完整 RAG 系统
    • Week 4: Multi-Agent 实战
  3. 工具组合建议

    • 原型开发:Streamlit + ChromaDB + LangChain
    • 生产部署:LangGraph + Pinecone + FastAPI
    • 数据分析:Pandas + Matplotlib + Jupyter

🎯 恭喜!你已完成 Module 0,掌握了构建 AI Agent 所需的完整工具链。现在,准备好进入 LangGraph 的精彩世界了吗?


附录:快速参考

安装命令速查

bash
# 数据处理
pip install numpy pandas matplotlib seaborn plotly

# AI 框架
pip install langchain langgraph openai anthropic

# 多智能体框架
pip install crewai pyautogen

# 向量数据库
pip install chromadb pinecone-client weaviate-client

# UI 框架
pip install streamlit gradio

# 辅助工具
pip install python-dotenv python-multipart

# 完整安装
pip install -r requirements.txt

资源链接


🚀 准备好了吗?让我们进入 Module 1,开始 LangGraph 的学习之旅!

基于 MIT 许可证发布。内容版权归作者所有。