发布日期
· 阅读约 4 分钟

LangChain 调不通义千问:Key 与 invoke 怎么一次跑通

要在 Python 项目里用 LangChain 调通义千问,却卡在 Key 怎么塞、旧教程还在写 predict——先完成一条最小闭环:鉴权 → invoke → 打印结果。本文按这个顺序走,不从「LangChain 是什么」讲起。

说明:接口与包名随版本会变;以你安装的 langchain-community / 通义文档为准。思路不变:环境变量里放 Key,用当前推荐的调用入口。

你遇到的问题

现象常见原因
AuthenticationError / invalid keyKey 未设置、复制错、或用了错误环境变量名
predict / 旧 API 找不到教程过时,应改用 invoke
能 import 但返回空/异常模型名、地域或网络出站限制
Notebook 里 getpass 怪异某些交互环境隐藏输入支持差

2 分钟诊断

  1. Key 是否在DashScope 控制台创建且未泄露进 Git。
  2. 当前环境能否 import 通义相关类(包是否装全)。
  3. 是否还在跟着旧文调用已移除方法。
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 出站

下一步

  1. 把 Key 挪到本地 .env(勿提交)或密钥管理。
  2. 用同一 llm 对象接上你的业务 prompt(摘要、分类、工具调用)。
  3. 若要上 Agent 工作流,再评估 LangGraph 等编排;先保证单次 invoke 稳定。