02_环境搭建 - 配置国内可用的AI模型

本课程指导你完成LangChain开发环境的搭建,重点介绍如何使用国内可访问的AI模型(阿里云百炼、DeepSeek等)。你将学会安装必要的依赖包、配置API密钥、理解模型参数,并运行第一个AI程序。课程包含完整的错误处理示例,确保你能顺利完成环境配置。

🎯 学习目标

  • 安装LangChain和相关依赖
  • 配置国内可用的AI模型(通义千问、DeepSeek等)
  • 运行第一个AI程序
  • 理解API调用的基本原理

📦 环境准备

1. Python环境(你应该已经有了)

1
2
3
4
# 检查Python版本(需要3.10+)
python --version

# 输出示例:Python 3.11.5

2. 创建虚拟环境

1
2
3
4
5
6
7
8
# 进入demo_15目录
cd /Users/t-yuhaiyang/PycharmProjects/demo/demo_15

# 使用uv创建虚拟环境
uv venv

# 激活虚拟环境(Mac)
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
  • ✅ 模型性能好(通义千问)

获取步骤:

  1. 访问:https://bailian.console.aliyun.com/
  2. 注册/登录阿里云账号
  3. 开通”百炼”服务
  4. 进入”API-KEY管理”
  5. 创建API Key(免费)

可用模型:

  • qwen-plus: 通用模型,性能好,适合大多数场景
  • qwen-turbo: 快速模型,响应快,成本低
  • qwen-max: 最强模型,复杂任务

方案2:DeepSeek(经济实惠)

特点:

  • ✅ 价格便宜(输入0.001元/千tokens)
  • ✅ 性能不错
  • ✅ 兼容OpenAI接口

获取步骤:

  1. 访问:https://platform.deepseek.com/
  2. 注册账号
  3. 充值(最低10元,可以用很久)
  4. 创建API Key

可用模型:

  • deepseek-chat: 对话模型

方案3:本地模型(进阶)

后续课程会介绍如何使用Ollama运行本地模型,完全免费但需要较好的电脑配置。

🔧 配置环境变量

创建配置文件

在 项目 目录下创建 .env 文件:

1
2
3
4
5
6
7
8
9
10
11
12
# .env文件内容

# 阿里云百炼配置
ALIBABA_API_KEY=your_api_key_here
ALIBABA_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1

# DeepSeek配置(可选)
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
# 在demo_15目录下创建 .gitignore
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", # 使用通义千问plus模型
temperature=0.7, # 控制输出的随机性,0-1,越大越随机
)


def main() -> None:
"""主函数"""
print("=== Hello AI 示例 ===\n")

# 1. 创建模型
llm = create_llm()
print("✅ 模型创建成功")

# 2. 发送第一条消息
response = llm.invoke("你好,请用一句话介绍你自己")
print(f"\nAI回复:{response.content}")

# 3. 再问一个问题
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) # 等待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")

# 1. 初始化服务
service = AIService()
if not service.initialize():
print("服务初始化失败,程序退出")
return

# 2. 正常调用
print("\n--- 测试正常调用 ---")
response = service.chat("你好")
if response:
print(f"AI回复:{response}")

# 3. 测试长时间响应
print("\n--- 测试复杂问题 ---")
response = service.chat("请详细解释量子计算的原理")
if response:
print(f"AI回复:{response[:100]}...") # 只显示前100字


if __name__ == "__main__":
main()

📊 参数说明对照表

参数类型说明推荐值使用场景
temperaturefloat输出随机性
0=确定
1=随机
0.7创意写作用0.8-0.9
事实查询用0.1-0.3
max_tokensint最大输出长度1000根据需求调整
简短回答用100
详细回答用2000
timeoutint请求超时时间(秒)30网络不稳定时增大
modelstr使用的模型qwen-plusplus平衡性能和成本
turbo更快更便宜
max性能最好

🔍 常见问题

Q1: 报错 “API Key is invalid”

原因:

  • API Key填写错误
  • 没有正确加载.env文件
  • API Key已过期

解决:

1
2
3
4
5
6
7
# 检查.env文件是否存在
ls -la .env

# 检查.env内容是否正确
cat .env

# 确保代码中调用了 load_dotenv()

Q2: 报错 “Connection timeout”

原因:

  • 网络问题
  • API服务暂时不可用

解决:

1
2
3
4
5
# 增加超时时间
llm = ChatOpenAI(
timeout=60, # 增加到60秒
max_retries=3, # 增加重试次数
)

Q3: 输出结果不理想

调整策略:

1
2
3
4
5
6
7
8
9
10
11
# 1. 需要更确定的答案:降低temperature
llm = ChatOpenAI(temperature=0.1)

# 2. 需要更多创意:提高temperature
llm = ChatOpenAI(temperature=0.9)

# 3. 需要更长回答:增加max_tokens
llm = ChatOpenAI(max_tokens=2000)

# 4. 换更强的模型
llm = ChatOpenAI(model="qwen-max")

Q4: 如何查看API使用量和费用?

阿里云百炼:

  1. 登录百炼控制台
  2. 查看”用量统计”
  3. 查看”账单明细”

DeepSeek:

  1. 登录DeepSeek平台
  2. 查看”Usage”页面

📝 练习任务

完成以下练习,巩固本课知识:

练习1:基础调用

编写程序,让AI:

  1. 介绍它自己
  2. 讲一个笑话
  3. 用Python写一个Hello World

练习2:参数实验

尝试不同的temperature值(0.1, 0.5, 0.9),观察输出差异:

  • 让AI写一首诗
  • 每个temperature运行3次
  • 对比结果

练习3:实用工具

编写一个”AI翻译助手”:

  • 输入中文,翻译成英文
  • 输入英文,翻译成中文
  • 带错误处理
  • 可以连续使用

🎯 检查清单

完成本课后,你应该能够:

  • 成功安装LangChain
  • 配置并使用国内AI模型
  • 运行第一个AI程序
  • 理解temperature和max_tokens参数
  • 处理基本的API调用错误
  • 使用环境变量管理配置

📚 下一步

现在你已经搭建好环境,可以开始学习LangChain的核心组件了!


继续学习: 第3课:LangChain核心组件 →