模块 1: 环境搭建与基础概念 - 练习
练习目标
- 成功安装 LangChain.js 及其相关依赖。
- 配置 DeepSeek API 密钥。
- 使用
ChatOpenAI类(配置为 DeepSeek)调用 LLM 模型,完成文本生成任务。 - 使用
ChatOpenAI类(配置为 DeepSeek)调用 Chat Model 模型,完成对话任务。
准备工作
- 确保您的开发环境中已安装 Node.js (推荐 v18 或更高版本) 和 npm/yarn。
- 获取一个有效的 DeepSeek API 密钥。
练习步骤
步骤 1: 创建项目并安装依赖
创建一个新的 TypeScript 项目,并安装 LangChain 核心库、OpenAI 兼容集成库以及 dotenv。
bash
mkdir langchain-demo-m1
cd langchain-demo-m1
npm init -y
npm install typescript ts-node @types/node --save-dev
npm install langchain @langchain/openai dotenv
npx tsc --init
步骤 2: 配置 API 密钥
在项目根目录下创建 .env 文件,并添加您的 DeepSeek API 密钥:
dotenv
DEEPSEEK_API_KEY="sk-YOUR_DEEPSEEK_API_KEY"
步骤 3: 使用 LLM 模型生成文本
创建一个名为 llm_text_generation.ts 的文件,并编写代码使用 ChatOpenAI 类(配置为 DeepSeek)生成一段关于"未来城市"的短文。设置 temperature 为 0.7。
typescript
// llm_text_generation.ts
import 'dotenv/config';
import { ChatOpenAI } from "@langchain/openai";
async function main() {
const model = new ChatOpenAI({
model: "deepseek-v4-flash", // 指定 DeepSeek 模型
temperature: 0.7,
apiKey: process.env.DEEPSEEK_API_KEY, // 使用 DeepSeek API Key
configuration: {
baseURL: "https://api.deepseek.com", // DeepSeek API 的基础 URL
},
});
const prompt = "请写一篇关于未来城市的短文,描述其交通、能源和生活方式。";
console.log("正在生成文本...");
const result = await model.invoke(prompt);
console.log("\n--- 生成结果 ---\n");
console.log(result.content); // 访问生成内容
}
main().catch(console.error);
运行您的代码:
bash
npx ts-node llm_text_generation.ts
步骤 4: 使用 Chat Model 模型进行对话
创建一个名为 chat_conversation.ts 的文件,并编写代码使用 ChatOpenAI 类(配置为 DeepSeek)进行一段简单的对话。对话内容包括:
- 系统消息:你是一个友好的 AI 助手,擅长提供旅行建议。
- 用户消息:我想去一个阳光充足的海滩度假,有什么推荐吗?
设置 temperature 为 0.5。
typescript
// chat_conversation.ts
import 'dotenv/config';
import { ChatOpenAI } from "@langchain/openai";
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
async function main() {
const chatModel = new ChatOpenAI({
model: "deepseek-v4-flash", // 指定 DeepSeek 模型
temperature: 0.5,
apiKey: process.env.DEEPSEEK_API_KEY, // 使用 DeepSeek API Key
configuration: {
baseURL: "https://api.deepseek.com", // DeepSeek API 的基础 URL
},
});
const messages = [
new SystemMessage("你是一个友好的 AI 助手,擅长提供旅行建议。"),
new HumanMessage("我想去一个阳光充足的海滩度假,有什么推荐吗?"),
];
console.log("正在进行对话...");
const response = await chatModel.invoke(messages);
console.log("\n--- 对话结果 ---\n");
console.log(response.content);
}
main().catch(console.error);
运行您的代码:
bash
npx ts-node chat_conversation.ts
思考题
ChatOpenAI类如何通过配置同时支持 LLM 和 Chat Model 的行为?temperature参数对模型生成结果有什么影响?尝试调整temperature的值,观察结果的变化。- 为什么建议将 API 密钥存储在环境变量中而不是直接写在代码里?
一句话理清:LLM 与 Chat Model 关系
LLM = 大语言模型(统称)Chat Model = 专门做对话场景的 LLM 子类
为什么 ChatOpenAI 能兼容两种写法
ChatOpenAI 内部做了自动兼容:
你传纯字符串 → 底层自动包装成 user 单轮消息,走 LLM 文本生成逻辑
你传角色消息数组 → 直接走标准 Chat 对话逻辑
所以它一身两用,既可以当普通文本生成 LLM 用,也能当专业对话 ChatModel 用。
LLM 重在「续写文字」
ChatModel 重在「角色聊天」
ChatModel 是优化过对话能力的 LLM
现在开发统一只用 ChatOpenAI,抛弃老式 LLM 类即可