本课程指导你完成LangChain开发环境的搭建,重点介绍如何使用国内可访问的AI模型(阿里云百炼、DeepSeek等)。你将学会安装必要的依赖包、配置API密钥、理解模型参数,并运行第一个AI程序。课程包含完整的错误处理示例,确保你能顺利完成环境配置。
🎯 学习目标
- 安装LangChain和相关依赖
- 配置国内可用的AI模型(通义千问、DeepSeek等)
- 运行第一个AI程序
- 理解API调用的基本原理
📦 环境准备
1. Python环境(你应该已经有了)
2. 创建虚拟环境
1 2 3 4 5 6 7 8
| cd /Users/t-yuhaiyang/PycharmProjects/demo/demo_15
uv venv
source .venv/bin/activate
|
3. 安装依赖包
1 2 3 4 5
| uv pip install langchain langchain-openai langchain-community
uv pip install python-dotenv pydantic httpx
|
🔑 获取API密钥
方案1:阿里云百炼平台(推荐)
为什么选择阿里云百炼?
- ✅ 国内访问快速稳定
- ✅ 新用户有免费额度
- ✅ 兼容OpenAI接口,可以直接用LangChain
- ✅ 模型性能好(通义千问)
获取步骤:
- 访问:https://bailian.console.aliyun.com/
- 注册/登录阿里云账号
- 开通”百炼”服务
- 进入”API-KEY管理”
- 创建API Key(免费)
可用模型:
qwen-plus: 通用模型,性能好,适合大多数场景qwen-turbo: 快速模型,响应快,成本低qwen-max: 最强模型,复杂任务
方案2:DeepSeek(经济实惠)
特点:
- ✅ 价格便宜(输入0.001元/千tokens)
- ✅ 性能不错
- ✅ 兼容OpenAI接口
获取步骤:
- 访问:https://platform.deepseek.com/
- 注册账号
- 充值(最低10元,可以用很久)
- 创建API Key
可用模型:
方案3:本地模型(进阶)
后续课程会介绍如何使用Ollama运行本地模型,完全免费但需要较好的电脑配置。
🔧 配置环境变量
创建配置文件
在 项目 目录下创建 .env 文件:
1 2 3 4 5 6 7 8 9 10 11 12
|
ALIBABA_API_KEY=your_api_key_here ALIBABA_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
DEEPSEEK_API_KEY=your_deepseek_key_here DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
DEFAULT_PLATFORM=alibaba
|
⚠️ 安全提示:
- 不要把
.env文件提交到Git仓库 - API Key是敏感信息,要妥善保管
创建 .gitignore
1 2 3 4 5
| echo ".env" >> .gitignore echo ".venv/" >> .gitignore echo "__pycache__/" >> .gitignore echo "*.pyc" >> .gitignore
|
💻 第一个AI程序
示例1:Hello AI(基础版)
创建 01_hello_ai.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| """ 第一个AI程序:Hello AI 演示:如何调用AI模型进行简单对话 """
from langchain_openai import ChatOpenAI from dotenv import load_dotenv import os
load_dotenv()
def create_llm() -> ChatOpenAI: """ 创建语言模型实例 Returns: ChatOpenAI: 配置好的模型实例 """ return ChatOpenAI( base_url=os.getenv("ALIBABA_BASE_URL"), api_key=os.getenv("ALIBABA_API_KEY"), model="qwen-plus", temperature=0.7, )
def main() -> None: """主函数""" print("=== Hello AI 示例 ===\n") llm = create_llm() print("✅ 模型创建成功") response = llm.invoke("你好,请用一句话介绍你自己") print(f"\nAI回复:{response.content}") response = llm.invoke("用一句话解释什么是LangChain") print(f"\nAI回复:{response.content}")
if __name__ == "__main__": main()
|
运行:
1 2
| cd /Users/t-yuhaiyang/PycharmProjects/demo/demo_15/lesson_02 python 01_hello_ai.py
|
预期输出:
1 2 3 4 5 6 7
| === Hello AI 示例 ===
✅ 模型创建成功
AI回复:我是通义千问,是阿里云开发的大语言模型,可以帮助你回答问题、创作内容。
AI回复:LangChain是一个开发框架,帮助开发者更容易地构建基于大语言模型的应用程序。
|
示例2:理解参数(进阶版)
创建 02_parameters.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| """ 理解模型参数 演示:不同参数对输出的影响 """
from langchain_openai import ChatOpenAI from dotenv import load_dotenv import os from typing import Any
load_dotenv()
def create_llm_with_params(temperature: float, max_tokens: int) -> ChatOpenAI: """ 创建带自定义参数的模型 Args: temperature: 温度参数(0-1),控制输出随机性 max_tokens: 最大输出长度 Returns: 配置好的模型实例 """ return ChatOpenAI( base_url=os.getenv("ALIBABA_BASE_URL"), api_key=os.getenv("ALIBABA_API_KEY"), model="qwen-plus", temperature=temperature, max_tokens=max_tokens, )
def test_temperature() -> None: """测试temperature参数的效果""" print("=== 测试 temperature 参数 ===\n") question = "给我讲一个3句话的故事" print("🔵 Temperature = 0.1 (保守模式)") llm_low = create_llm_with_params(temperature=0.1, max_tokens=100) response = llm_low.invoke(question) print(f"回答:{response.content}\n") print("🔴 Temperature = 0.9 (创意模式)") llm_high = create_llm_with_params(temperature=0.9, max_tokens=100) response = llm_high.invoke(question) print(f"回答:{response.content}\n")
def test_max_tokens() -> None: """测试max_tokens参数的效果""" print("=== 测试 max_tokens 参数 ===\n") question = "请详细解释什么是人工智能" print("📏 Max Tokens = 50 (简短回答)") llm_short = create_llm_with_params(temperature=0.7, max_tokens=50) response = llm_short.invoke(question) print(f"回答:{response.content}\n") print("📏 Max Tokens = 200 (详细回答)") llm_long = create_llm_with_params(temperature=0.7, max_tokens=200) response = llm_long.invoke(question) print(f"回答:{response.content}\n")
def main() -> None: """主函数""" test_temperature() print("\n" + "="*50 + "\n") test_max_tokens()
if __name__ == "__main__": main()
|
示例3:错误处理(生产级)
创建 03_error_handling.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| """ 错误处理示例 演示:如何优雅地处理API调用中的错误 """
from langchain_openai import ChatOpenAI from dotenv import load_dotenv import os from typing import Optional import time
load_dotenv()
class AIService: """AI服务封装类""" def __init__(self) -> None: """初始化AI服务""" self.llm: Optional[ChatOpenAI] = None def initialize(self) -> bool: """ 初始化模型连接 Returns: 是否初始化成功 """ try: api_key = os.getenv("ALIBABA_API_KEY") base_url = os.getenv("ALIBABA_BASE_URL") if not api_key: raise ValueError("未找到API Key,请检查.env文件") if not base_url: raise ValueError("未找到Base URL,请检查.env文件") self.llm = ChatOpenAI( base_url=base_url, api_key=api_key, model="qwen-plus", temperature=0.7, timeout=30, ) print("✅ AI服务初始化成功") return True except ValueError as e: print(f"❌ 配置错误:{e}") return False except Exception as e: print(f"❌ 初始化失败:{e}") return False def chat(self, message: str, max_retries: int = 3) -> Optional[str]: """ 发送消息,带重试机制 Args: message: 用户消息 max_retries: 最大重试次数 Returns: AI的回复,失败返回None """ if not self.llm: print("❌ AI服务未初始化") return None for attempt in range(max_retries): try: response = self.llm.invoke(message) return response.content except TimeoutError: print(f"⏱️ 请求超时(尝试 {attempt + 1}/{max_retries})") if attempt < max_retries - 1: time.sleep(2) except Exception as e: print(f"❌ 请求失败:{e}(尝试 {attempt + 1}/{max_retries})") if attempt < max_retries - 1: time.sleep(2) print("❌ 达到最大重试次数,请求失败") return None
def main() -> None: """主函数""" print("=== AI服务错误处理示例 ===\n") service = AIService() if not service.initialize(): print("服务初始化失败,程序退出") return print("\n--- 测试正常调用 ---") response = service.chat("你好") if response: print(f"AI回复:{response}") print("\n--- 测试复杂问题 ---") response = service.chat("请详细解释量子计算的原理") if response: print(f"AI回复:{response[:100]}...")
if __name__ == "__main__": main()
|
📊 参数说明对照表
| 参数 | 类型 | 说明 | 推荐值 | 使用场景 |
|---|
| temperature | float | 输出随机性 0=确定 1=随机 | 0.7 | 创意写作用0.8-0.9 事实查询用0.1-0.3 |
| max_tokens | int | 最大输出长度 | 1000 | 根据需求调整 简短回答用100 详细回答用2000 |
| timeout | int | 请求超时时间(秒) | 30 | 网络不稳定时增大 |
| model | str | 使用的模型 | qwen-plus | plus平衡性能和成本 turbo更快更便宜 max性能最好 |
🔍 常见问题
Q1: 报错 “API Key is invalid”
原因:
- API Key填写错误
- 没有正确加载.env文件
- API Key已过期
解决:
1 2 3 4 5 6 7
| ls -la .env
cat .env
|
Q2: 报错 “Connection timeout”
原因:
解决:
1 2 3 4 5
| llm = ChatOpenAI( timeout=60, max_retries=3, )
|
Q3: 输出结果不理想
调整策略:
1 2 3 4 5 6 7 8 9 10 11
| llm = ChatOpenAI(temperature=0.1)
llm = ChatOpenAI(temperature=0.9)
llm = ChatOpenAI(max_tokens=2000)
llm = ChatOpenAI(model="qwen-max")
|
Q4: 如何查看API使用量和费用?
阿里云百炼:
- 登录百炼控制台
- 查看”用量统计”
- 查看”账单明细”
DeepSeek:
- 登录DeepSeek平台
- 查看”Usage”页面
📝 练习任务
完成以下练习,巩固本课知识:
练习1:基础调用
编写程序,让AI:
- 介绍它自己
- 讲一个笑话
- 用Python写一个Hello World
练习2:参数实验
尝试不同的temperature值(0.1, 0.5, 0.9),观察输出差异:
- 让AI写一首诗
- 每个temperature运行3次
- 对比结果
练习3:实用工具
编写一个”AI翻译助手”:
- 输入中文,翻译成英文
- 输入英文,翻译成中文
- 带错误处理
- 可以连续使用
🎯 检查清单
完成本课后,你应该能够:
📚 下一步
现在你已经搭建好环境,可以开始学习LangChain的核心组件了!
继续学习: 第3课:LangChain核心组件 →