第一次调用模型
你将学会: 调用聊天模型、看清返回值、会 invoke / 简单 stream。
还不用: Agent、工具、LangGraph。
一次请求 = 你把消息列表发给模型,它返回一条「助手消息」。
完整代码
复制到仓库根目录 scratch.py:
from dotenv import load_dotenv
load_dotenv()
from langchain.chat_models import init_chat_model
model = init_chat_model(
"deepseek:deepseek-chat",
temperature=0.5,
max_tokens=2500,
timeout=300,
max_retries=6,
)
print("=== 1. 传一句字符串 ===")
r1 = model.invoke("用一句话解释什么是大语言模型。")
print("类型 =>", type(r1).__name__)
print("content =>", r1.content)
print("content_blocks =>", r1.content_blocks)
print("\n=== 2. 传消息列表(可带系统提示)===")
r2 = model.invoke([
{"role": "system", "content": "只许用十个字以内回答。"},
{"role": "user", "content": "什么是 Agent?"},
])
print(r2.content)
print("\n=== 3. 流式:token 陆续出来 ===")
for chunk in model.stream("用五个字形容编程。"):
print(chunk.content, end="", flush=True)
print()
python scratch.py
你会看到什么
- 返回类型是
AIMessage,不是普通str。正文在.content,分块在.content_blocks。 temperature越高越散;教程里固定 0.5,方便复现。deepseek-chat是非 thinking 别名。不要用deepseek-v4-flash做后面的工具调用。
常见翻车
| 现象 | 处理 |
|---|---|
| 401 / authentication | .env 的 key 不对,或没在仓库根目录运行 |
| 很慢 / timeout | 网络问题,timeout=300 已给足;再不行检查代理 |
想打印 r1 整个对象太长 | 先打印 r1.content |
练习
- 把系统提示改成「用英文回答」,再问同一个问题。
- 连续
invoke两次:「我叫阿来」然后「我叫什么?」——第二次不会记得。这是正常的:裸模型没有会话记忆。下一课用 Agent + checkpointer 解决。
本章验收
- 能独立写出
init_chat_model+invoke - 知道返回的是
AIMessage - 亲眼看过两次 invoke 之间不记名字
对照仓库:02-核心概念/Models模型.py
下一课:第一个 Agent
JavaWeb
Spring
MyBatis
linux
消息队列
JavaSE
工具
片段
AI
搜索
dy