LangChain 常见问题
常见问题
LangChain 和 LangGraph 该用哪个?
两者不是替代关系。LCEL 适合「一条直线走到底」的处理流水线,写法短、调试直观;一旦流程里出现条件分支、循环或者需要中断后恢复的状态,LangGraph 更合适。实际项目里常见的组合是:把检索、解析这些步骤用 LCEL 打包成一个 Runnable,再把它当成 LangGraph 里的一个节点挂进更大的流程图。
版本升级总让代码跑不通,怎么降低影响?
三个做法。一是锁版本:生产环境用 requirements.txt 或 uv.lock 固定到具体版本,把升级当成一次独立的、可回滚的变更来做。二是收窄调用面:业务代码只依赖你自己封装的一层薄函数,例如 ask(question) -> str,框架升级时改动集中在这一层。三是升级前先跑一遍评测集,别只看能不能启动。
RAG 效果不好,应该先查哪里?
按顺序排查。先单独看召回结果,也就是 retriever.invoke(问题),确认回答所需的那段内容到底有没有被召回;如果没召回,问题出在切分粒度、嵌入模型或检索参数上;如果召回了但答案仍然不对,问题才在提示词或模型本身。跳过第一步直接改提示词,大多数时候是在错误的地方花时间。
一定要用 LangSmith 吗?
不是必须的,但它解决的是「一次回答经过了哪些步骤、检索到什么、花了多少 token」这个问题。不接外部服务也行,用回调处理器把同样的信息写进自己的日志系统即可。建议上线前至少保留输入输出与耗时的记录,否则线上出问题很难定位。

