如何通过Curl向LangServe的LangChain LLM链传递可配置参数?
正确传递session_id的实现方式
先确认服务器端链的配置
首先必须确保你的链已经明确将session_id声明为可配置参数,否则客户端传参也会被忽略。示例代码如下:
from langchain_core.runnables import RunnableConfigurable # 假设base_chain是你的基础LLM链 chain_with_config = RunnableConfigurable( base_chain, configurable={"session_id": str} # 明确指定session_id为可配置的字符串参数 ) # 再通过LangServe添加路由 add_route("/chainroute", chain_with_config, app)
Curl调用的正确格式
/invoke 端点调用
正确的请求体需要将config作为顶层键与input同级,注意JSON语法必须正确:
curl --no-buffer -X POST 'http://0.0.0.0:8000/chainroute/invoke' \ -H 'Content-Type: application/json' \ -d '{ "input": {"question": "你的具体问题"}, "config": {"configurable": {"session_id": "1234567890"}} }'
注意:如果需要文本响应可以保留
accept: text/plain头,但Content-Type必须是application/json以确保请求体被正确解析。
/stream 端点调用
格式与/invoke一致,仅端点不同:
curl --no-buffer -X POST 'http://0.0.0.0:8000/chainroute/stream' \ -H 'Content-Type: application/json' \ -d '{ "input": {"question": "你的具体问题"}, "config": {"configurable": {"session_id": "1234567890"}} }'
RemoteRunnable的正确调用
你的代码结构本身没问题,只需确保session_id的类型与服务器端配置匹配(比如字符串类型):
from langserve import RemoteRunnable chat = RemoteRunnable("http://0.0.0.0:8000/chainroute") response = chat.invoke( {"question": "你的具体问题"}, config={"configurable": {"session_id": "1234567890"}} # 保持类型一致 ) print(response)
常见排查点
- 服务器端未声明可配置参数:如果链没有通过
RunnableConfigurable或类似方式开启session_id的配置支持,客户端传参无效。 - JSON语法错误:比如你尝试的第二个curl请求中,
input内嵌套对象的写法有语法错误,会导致服务器无法解析请求。 - 参数类型不匹配:服务器端如果要求
session_id是字符串,客户端传数字会被忽略,需保证类型一致。
内容的提问来源于stack exchange,提问作者TheOldMan
相关产品推荐
相关产品推荐

