LangChain + Ollama 零基础学习指南
本地运行、完全免费的 LLM 应用开发学习
环境准备
1. 安装 Ollama
# macOS
brew install ollama
# 或下载: https://ollama.ai/download
2. 下载模型
# 启动服务
ollama serve
# 下载推荐模型(新终端)
ollama pull qwen2.5:7b # 主力模型,中文强
ollama pull bge-m3 # Embedding 模型,中文效果好
# 可选模型
ollama pull llama3.2:3b # 轻量级
ollama pull codellama:7b # 代码专用
3. 安装 Python 依赖
cd /Users/kazusa/llm/mini_lm
python -m venv venv
source venv/bin/activate
pip install langchain langchain-ollama langchain-community faiss-cpu python-dotenv pydantic
学习路线图
📅 Week 1: 基础篇
├── Day 1: LLM 调用 + Prompt Template + Output Parser + Chain 基础
├── Day 2: LCEL 表达式语言深入
├── Day 3: Memory(记忆管理)
└── Day 4: 综合练习
📅 Week 2: 核心篇
├── Day 5: Tool(工具定义与调用)
├── Day 6: RAG 基础(向量化 + 检索)
├── Day 7: RAG 进阶(文档加载 + 分割策略)
└── Day 8: 综合练习
📅 Week 3: Agent 篇 ⭐
├── Day 9: Agent 基础(工具调用 Agent)
├── Day 10: ReAct Agent(推理+行动循环)
├── Day 11: 自定义 Agent
└── Day 12: 综合练习
📅 Week 4: 实战篇
├── Day 13: 项目1 - 智能文档问答助手
├── Day 14: 项目2 - 代码审查助手
└── Day 15: 部署与优化
课程目录
Day 1: 基础入门
| 文件 |
主题 |
核心概念 |
src/day1/01_hello_llm.py |
第一次调用 |
ChatOllama、invoke |
src/day1/02_prompt_template.py |
提示词模板 |
ChatPromptTemplate、变量替换 |
src/day1/03_output_parser.py |
输出解析 |
StrOutputParser、JsonOutputParser |
src/day1/04_chain_basics.py |
链式调用 |
LCEL、管道符 ` |
src/day1/05_practice.py |
综合练习 |
组合运用 |
Day 2: LCEL 深入 ✅ 今日学习
| 文件 |
主题 |
核心概念 |
src/day2/01_lcel_basics.py |
LCEL 语法 |
RunnableSequence |
src/day2/02_parallel.py |
并行执行 |
RunnableParallel |
src/day2/03_passthrough.py |
数据透传 |
RunnablePassthrough |
src/day2/04_branch.py |
条件分支 |
RunnableBranch |
Day 3: Memory 记忆
| 文件 |
主题 |
核心概念 |
src/day3/01_chat_history.py |
对话历史 |
InMemoryChatMessageHistory |
src/day3/02_memory_chain.py |
记忆链 |
RunnableWithMessageHistory |
src/day3/03_window_memory.py |
窗口记忆 |
限制历史长度 |
Day 5: Tool 工具
| 文件 |
主题 |
核心概念 |
src/day5/01_tool_basics.py |
工具定义 |
@tool 装饰器 |
src/day5/02_bind_tools.py |
绑定工具 |
bind_tools |
src/day5/03_tool_execution.py |
执行工具 |
ToolMessage |
Day 6-7: RAG 检索增强
| 文件 |
主题 |
核心概念 |
src/day6/01_embeddings.py |
向量化 |
OllamaEmbeddings |
src/day6/02_vectorstore.py |
向量存储 |
FAISS |
src/day6/03_retriever.py |
检索器 |
as_retriever |
src/day6/04_rag_chain.py |
RAG 链 |
完整 RAG 流程 |
src/day7/01_doc_loaders.py |
文档加载 |
TextLoader、DirectoryLoader |
src/day7/02_text_splitter.py |
文本分割 |
RecursiveCharacterTextSplitter |
Day 9-11: Agent 智能体 ⭐
| 文件 |
主题 |
核心概念 |
src/day9/01_agent_basics.py |
Agent 基础 |
create_tool_calling_agent |
src/day9/02_agent_executor.py |
执行器 |
AgentExecutor |
src/day10/01_react_agent.py |
ReAct |
推理-行动循环 |
src/day11/01_custom_agent.py |
自定义 Agent |
完全控制 Agent 行为 |
Day 13-14: 实战项目
| 文件 |
项目 |
功能 |
src/projects/doc_qa_assistant.py |
文档问答助手 |
RAG + Memory |
src/projects/code_reviewer.py |
代码审查助手 |
Tool + Agent |
核心概念速查
LCEL(LangChain Expression Language)
# 管道符 | 连接组件
chain = prompt | llm | parser
# 等价于
chain = RunnableSequence(prompt, llm, parser)
组件类型
| 组件 |
输入 |
输出 |
作用 |
| Prompt |
dict |
Messages |
构建提示词 |
| LLM |
Messages |
AIMessage |
生成回复 |
| Parser |
AIMessage |
str/dict |
解析输出 |
| Retriever |
str |
Documents |
检索文档 |
| Tool |
dict |
str |
执行操作 |
运行说明
# 确保 Ollama 服务运行
ollama serve
# 激活虚拟环境
source venv/bin/activate
# 运行课程文件
python src/day1/01_hello_llm.py
模型推荐
| 场景 |
模型 |
命令 |
| 日常学习 |
qwen2.5:7b |
ollama pull qwen2.5:7b |
| 低配机器 |
qwen2.5:3b |
ollama pull qwen2.5:3b |
| RAG Embedding |
bge-m3 |
ollama pull bge-m3 |
| 代码任务 |
codellama:7b |
ollama pull codellama:7b |
学习建议
- 动手为主:每个文件都要运行,修改参数观察变化
- 循序渐进:按 Day 顺序学习,不要跳跃
- 做好笔记:在代码注释中记录你的理解
- 综合练习:每个阶段结束后完成 practice 文件