要在 Python 项目里用 LangChain 调通义千问,却卡在 Key 怎么塞、旧教程还在写 predict——先完成一条最小闭环:鉴权 → invoke → 打印结果。本文按这个顺序走,不从「LangChain 是什么」讲起。
说明:接口与包名随版本会变;以你安装的
langchain-community/ 通义文档为准。思路不变:环境变量里放 Key,用当前推荐的调用入口。
你遇到的问题
| 现象 | 常见原因 |
|---|---|
AuthenticationError / invalid key | Key 未设置、复制错、或用了错误环境变量名 |
predict / 旧 API 找不到 | 教程过时,应改用 invoke |
| 能 import 但返回空/异常 | 模型名、地域或网络出站限制 |
Notebook 里 getpass 怪异 | 某些交互环境隐藏输入支持差 |
2 分钟诊断
- Key 是否在DashScope 控制台创建且未泄露进 Git。
- 当前环境能否
import通义相关类(包是否装全)。 - 是否还在跟着旧文调用已移除方法。
python -c "import langchain_community; print('ok')"
解法:最小可运行脚本
from getpass import getpass
import os
from langchain_community.llms import Tongyi
# 交互输入,避免把 Key 写进代码仓库
os.environ["DASHSCOPE_API_KEY"] = getpass("DASHSCOPE_API_KEY: ")
llm = Tongyi()
# 0.2.x 起用 invoke 做一次调用(替代旧 predict 心智)
result = llm.invoke(
"用一句话解释:什么是 peerDependencies?"
)
print(result)
要点:
- Key 放环境变量,不要硬编码进仓库
- 调用入口用
invoke(链式/多轮再往上叠) - 本地脚本可用
getpass;CI 里改用密钥注入,不要交互输入
关于 getpass
在真正的终端里,getpass 可避免 Key 回显。若在部分 IDE/Notebook 无效,改用环境变量:
export DASHSCOPE_API_KEY=sk-xxxx
import os
assert os.environ.get("DASHSCOPE_API_KEY"), "missing key"
如何验证已打通
- 脚本退出码为 0,stdout 有模型文本
- 故意写错 Key 时应失败(证明不是缓存假成功)
- Key 未出现在 git diff / 日志明文里
- (可选)再发第二句,确认你能在此基础上做多轮封装
常见坑
- 把通义与「知识图谱问答产品」概念混为一谈——这里只解决LLM API 接入
- 复制了过期的
predict示例 - 公司网络未放行 DashScope 出站
下一步
- 把 Key 挪到本地
.env(勿提交)或密钥管理。 - 用同一
llm对象接上你的业务 prompt(摘要、分类、工具调用)。 - 若要上 Agent 工作流,再评估 LangGraph 等编排;先保证单次
invoke稳定。