[TOC]

概念

LangChain 是一个开源框架,旨在简化基于大型语言模型(LLM,如 GPT、Llama、Claude、通义千问等)的应用程序开发。它的核心思想是:将语言模型与外部数据、工具和逻辑流程结合起来,构建更强大、更智能、可落地的 AI 应用。

主要是框架,集成,经验性

  1. 与LLM交互
  2. 有很多组件
  3. 功能拓展

git使用

新建项目

本地项目文件

git init → 创建本地 Git 仓库

git remote add origin … → 绑定 GitHub 仓库

git add . → 选中要提交的文件

git commit -m “…” → 打包成一个版本

git branch -M main → 确保分支名叫 main

git push -u origin main → 推送到 GitHub + 设置默认关联

基础命令

场景 命令 说明
查看当前状态 git status 看哪些文件改了、哪些没提交
提交代码 git add .git commit -m "xxx" 保存一个版本
推送到 GitHub git push 同步到云端(首次需 -u
从 GitHub 拉最新代码 git pull 获取别人或自己其他设备的更新
查看提交历史 git log --oneline 看所有 commit 记录

密钥管理

使用python-dotenv库进行key管理
在根目录下新建.env 输入DASHSCOPE_API_KEY=xxx
一定要记得把.env加入到.gitignore中 防止泄露

1
2
3
4
5
6
from dotenv import load_dotenv
import os

load_dotenv() # ← 自动读取 .env 文件,并把里面的内容变成环境变量

api_key = os.getenv("DASHSCOPE_API_KEY") # ← 直接像读系统环境变量一样用!

langchain简单交互

基础问答

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
from dotenv import load_dotenv  # 加载 .env 文件
import os
from langchain_openai import ChatOpenAI

# 加载 .env 文件中的环境变量
load_dotenv()

# 从环境变量中读取 API 密钥
api_key = os.getenv("DASHSCOPE_API_KEY")

# 创建 Qwen 模型实例
llm = ChatOpenAI(
api_key=api_key,
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="qwen-turbo", # 最便宜
temperature=0.7
)

api_key2 = os.getenv("DEEPSEEK_API_KEY")

# 设置DeepSeek API
llm2 = ChatOpenAI(
model="deepseek-chat",
api_key=api_key2,
base_url="https://api.deepseek.com/v1", # DeepSeek的API端点
temperature=0.7
)

response = llm.invoke("你好,Qwen!")
print(response.content)

多轮对话

1
2
3
4
5
6
7
8
9
10
from langchain_core.messages import HumanMessage, AIMessage

messages = [
HumanMessage(content="你好!"),
AIMessage(content="你好主人"),
HumanMessage(content="你能写诗吗?")
]

response = llm.invoke(messages)
print(response.content)

流式输出

1
2
3
4
5
6
7
8
9
10
11
12
# 用户问题
question = "告诉我你是谁。"

# 流式调用!
full_response = "" # 用于拼接完整回答(可选)
for chunk in llm.stream(question):
content = chunk.content
print(content, end="\n", flush=True) # 逐块打印,不换行
full_response += content

print("\n\n✅ 回答完成!")
# 如果你需要完整文本,可以用 full_response

提示词模板

1
2
3
4
5
6
7
8
9
10
# 模板中有两个占位符:{language} 和 {task}
prompt = ChatPromptTemplate.from_template(
"用 {language} 写一个程序来 {task}。"
)

# 填充两个变量
response = llm.invoke(
prompt.format(language="Python", task="计算两个数的最大公约数")
)
print(response.content)

定制参数

参数 类型 默认值 作用 示例
model str "gpt-3.5-turbo" 指定模型名称 "qwen-turbo", "qwen-max"
temperature float 0.7 控制随机性/创造性
• 0 = 确定性最强
• 1 = 最有创意(也更乱) openai允许1-2 但是不建议
temperature=0.2(写代码用低值)
temperature=0.9(写诗用高值)
max_tokens int 模型最大上下文 限制模型最多生成多少 token max_tokens=256(避免长篇大论)
api_key str API 密钥 .env 读取
base_url str 自定义 API 地址(对接 DashScope/Ollama 等必需)国外调OpenAI不用写 "https://dashscope.aliyuncs.com/compatible-mode/v1"
top_p float 1.0 核采样(nucleus sampling)
通常和 temperature 二选一调
top_p=0.9
streaming bool False 是否启用流式(但推荐直接用 .stream() 方法) 一般不用设

构建简单的聊天机器人

LCEL链式语法

LCEL 的核心思想是:用 | 把组件像管道一样连起来,比如:输入 → 提示模板 → 模型 → 输出解析