LangChain 教學:安裝與環境設定(Python / JavaScript)
簡介
在當前的 AI 應用熱潮中,LangChain 已成為串接大型語言模型(LLM)與外部資源的核心框架。它不僅提供了簡潔的 API,還支援多種語言(Python、JavaScript/TypeScript)與多樣的工具鏈(向量資料庫、搜尋引擎、工具呼叫等),讓開發者可以快速構建「思考」與「行動」結合的智慧應用。
本單元將說明 如何在本機或雲端環境中安裝 LangChain,並完成最基本的設定。內容涵蓋:
- 建立乾淨的虛擬環境(Python)或 Node 專案(JavaScript)
- 安裝核心套件與常用擴充套件
- 配置 OpenAI(或其他 LLM)金鑰
- 透過簡單範例驗證安裝是否成功
完成本單元後,你將能在 Python 或 JavaScript 中順利呼叫 LangChain,為後續的 Chain、Agent、Tool 開發奠定基礎。
核心概念
1. 為什麼要使用虛擬環境?
- 依賴隔離:不同專案可能需要不同版本的
langchain、openai或向量資料庫套件,虛擬環境可避免衝突。 - 可重現性:透過
requirements.txt(Python)或package.json(JS)鎖定套件版本,確保團隊成員或 CI/CD 環境得到相同結果。
技巧:在 Python 中使用
venv或conda,在 JavaScript 中使用npm/yarn+package-lock.json(或pnpm-lock.yaml)。
2. 主要套件與功能
| 語言 | 核心套件 | 常見擴充套件 | 功能說明 |
|---|---|---|---|
| Python | langchain |
langchain-community、langchain-openai、langchain-chroma |
提供 Chain、Agent、Memory、Retriever 等抽象層 |
| JavaScript/TypeScript | @langchain/core、@langchain/openai |
@langchain/community、@langchain/chroma |
同樣支援 PromptTemplate、Chain、Tool 等概念,且可與前端/Node 生態整合 |
注意:JavaScript 仍在快速演進,若發現某功能缺少,可直接使用
@langchain/core的低階 API,或參考官方 GitHub Issue。
3. LLM 金鑰管理
LangChain 本身不提供模型,必須透過 OpenAI、Azure OpenAI、Anthropic、Cohere 等服務的 API 金鑰。為了安全:
- 環境變數(
.env)是最簡易且安全的做法。 - 在 CI/CD 中使用 Secret Manager(GitHub Actions Secrets、GitLab CI Variables)注入金鑰。
以下示範 Python 與 JavaScript 的環境變數讀取方式。
程式碼範例
1️⃣ 建立與啟動虛擬環境(Python)
# 1. 建立虛擬環境
python -m venv .venv
# 2. 啟動環境(Linux/macOS)
source .venv/bin/activate
# 3. 啟動環境(Windows)
.\.venv\Scripts\activate
# 4. 安裝套件
pip install --upgrade pip
pip install langchain openai python-dotenv
說明:
python-dotenv讓我們可以輕鬆載入.env檔案中的金鑰。
2️⃣ 建立與初始化 Node 專案(JavaScript)
# 1. 初始化 npm 專案
npm init -y
# 2. 安裝核心與 OpenAI 套件
npm install @langchain/core @langchain/openai dotenv
# 3. 建立 .env 檔案(同 Python)
echo "OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx" > .env
3️⃣ 讀取環境變數(Python)
# file: config.py
from pathlib import Path
from dotenv import load_dotenv
import os
# 載入 .env(放在專案根目錄)
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
if not OPENAI_API_KEY:
raise ValueError("請在 .env 中設定 OPENAI_API_KEY")
4️⃣ 讀取環境變數(JavaScript)
// file: config.js
require('dotenv').config(); // 會自動讀取根目錄的 .env
const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
if (!OPENAI_API_KEY) {
throw new Error('請在 .env 中設定 OPENAI_API_KEY');
}
module.exports = { OPENAI_API_KEY };
5️⃣ 測試 LangChain 與 LLM(Python)
# file: test_langchain_py.py
from langchain.llms import OpenAI
from config import OPENAI_API_KEY
# 初始化 LLM(使用 OpenAI 的 gpt-3.5-turbo)
llm = OpenAI(
openai_api_key=OPENAI_API_KEY,
model_name="gpt-3.5-turbo",
temperature=0.7,
)
# 呼叫 LLM,確認能取得回應
response = llm.invoke("請用繁體中文說明什麼是 LangChain。")
print("LLM 回應:", response)
重點:若出現
Rate limit或AuthenticationError,請檢查金鑰是否正確、是否已超過配額。
6️⃣ 測試 LangChain 與 LLM(JavaScript)
// file: test_langchain_js.mjs
import { OpenAI } from '@langchain/openai';
import { OPENAI_API_KEY } from './config.js';
const llm = new OpenAI({
openAIApiKey: OPENAI_API_KEY,
modelName: 'gpt-3.5-turbo',
temperature: 0.7,
});
async function main() {
const response = await llm.invoke(
'請用繁體中文說明什麼是 LangChain。'
);
console.log('LLM 回應:', response);
}
main().catch(console.error);
7️⃣ 建立最簡單的 Chain(Python)
# file: simple_chain.py
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from config import OPENAI_API_KEY
# PromptTemplate 讓我們把變數插入 Prompt 中
template = """以下是一段中文說明,請將它改寫成 3 個要點,並加上編號:
{input_text}
"""
prompt = PromptTemplate(template=template, input_variables=["input_text"])
llm = OpenAI(
openai_api_key=OPENAI_API_KEY,
model_name="gpt-3.5-turbo",
temperature=0.5,
)
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run({"input_text": "LangChain 是一個用於構建 LLM 應用的框架,提供了 Chain、Agent、Tool 等抽象層。"})
print(result)
8️⃣ 建立最簡單的 Chain(JavaScript)
// file: simple_chain.mjs
import { PromptTemplate } from '@langchain/core/prompts';
import { LLMChain } from '@langchain/core/chains';
import { OpenAI } from '@langchain/openai';
import { OPENAI_API_KEY } from './config.js';
const template = `以下是一段中文說明,請將它改寫成 3 個要點,並加上編號:
{input_text}`;
const prompt = PromptTemplate.fromTemplate(template);
const llm = new OpenAI({
openAIApiKey: OPENAI_API_KEY,
modelName: 'gpt-3.5-turbo',
temperature: 0.5,
});
const chain = new LLMChain({ llm, prompt });
async function run() {
const result = await chain.invoke({
input_text: 'LangChain 是一個用於構建 LLM 應用的框架,提供了 Chain、Agent、Tool 等抽象層。',
});
console.log(result);
}
run().catch(console.error);
小結:以上範例展示了從 安裝 → 環境變數 → 呼叫 LLM → 建立基本 Chain 的完整流程。只要環境設置正確,兩種語言的程式碼幾乎可以互相對照學習。
常見陷阱與最佳實踐
| 陷阱 | 說明 | 最佳實踐 |
|---|---|---|
| 金鑰硬編碼 | 直接把 sk-... 寫在程式碼裡,會導致資安風險。 |
使用 .env 與 dotenv,或在雲端平台使用 Secret Manager。 |
| 版本不一致 | LangChain 更新頻繁,舊版 API 可能失效。 | 在 requirements.txt / package.json 中鎖定版本,並在每次升級前閱讀 Release Notes。 |
| 未安裝依賴的向量資料庫 | 想使用 Chroma、FAISS 等檢索功能卻忘了安裝相應套件。 |
依需求安裝 langchain-chroma、faiss-cpu(Python)或 @langchain/chroma(JS)。 |
| 模型名稱錯誤 | 使用 gpt-3.5-turbo 時寫成 gpt3.5,會拋出 InvalidRequestError。 |
參考官方文件的 model_name 列表,並使用 常數 方式管理。 |
| 同步/非同步混用 | Python 示例多為同步,JavaScript 多為 async/await,混用會導致程式卡住。 |
明確決定執行環境:Python 使用 await(asyncio)或同步;Node.js 全部使用 async/await。 |
| 忘記啟動虛擬環境 | 直接在全域環境安裝套件,導致衝突。 | 每次開發前執行 source .venv/bin/activate 或 npm run dev 前確認 node_modules 正確。 |
其他實務建議
- 使用 TypeScript(對於 JavaScript 開發者)
@langchain/core已提供完整型別,能在開發階段即捕捉錯誤。
- 把 LLM 初始化抽離成單例
- 多個 Chain 共用同一個 LLM 實例,可減少金鑰重新驗證的開銷。
- 加入 Logging
- LangChain 支援
langchain.callbacks,可在開發期間觀察 Prompt、LLM 回傳與 Token 使用情況。
- LangChain 支援
- 測試(Unit Test)
- 使用
pytest或jest搭配 Mock(例如unittest.mock、msw)模擬 LLM 回傳,避免每次測試都消耗配額。
- 使用
實際應用場景
| 場景 | 使用的 LangChain 元件 | 為什麼適合 |
|---|---|---|
| 客服機器人 | LLMChain + ConversationBufferMemory |
讓機器人能記住對話上下文,提供連貫回應。 |
| 文件問答系統 | RetrievalQAChain + Chroma 向量資料庫 |
先把文件向量化,再以檢索結果作為 Prompt,提升答案正確率。 |
| 自動化報告產出 | LLMChain + PromptTemplate |
只需要提供數據,LLM 自動產出報告文字。 |
| 代碼輔助 (Co-pilot) | AgentExecutor + Tool(如 PythonREPLTool) |
Agent 能根據使用者指令呼叫工具執行程式碼,回傳結果。 |
| 多語言翻譯與校對 | LLMChain + TranslationPrompt |
透過 Prompt 控制翻譯風格與校對規則,支援繁體中文與其他語言。 |
範例:若要在企業內部建置「合約條款檢索」系統,只需將所有合約上傳至 Chroma,使用
RetrievalQAChain讓 LLM 先檢索相關段落,再根據 Prompt 給出法律建議。整個流程可在 Python 或 Node.js 中同樣完成。
總結
- LangChain 為 LLM 應用提供了統一且可擴充的抽象層,讓開發者能快速從「呼叫模型」升級到「組合 Chain、Agent、Tool」的完整方案。
- 本文詳細說明了 Python 與 JavaScript 的安裝步驟、環境變數管理、最小可執行範例,以及常見的陷阱與最佳實踐。
- 只要遵守 虛擬環境、金鑰安全、版本鎖定 三大原則,即可在本機或雲端穩定運行 LangChain,進一步開發客服、問答、報告產出等實務應用。
下一步:在掌握了安裝與基本呼叫後,建議嘗試 Chain 組合(如
SequentialChain、RouterChain)或 Agent 與 Tool(如PythonREPLTool、RequestsGetTool),逐步打造屬於自己的智慧工作流。祝開發順利,玩得開心! 🚀