必须对接typesafe ai云端api,通过环境变量注入jev_api_key和jev_base_url,用runnablelambda封装jev结构化调用,避免硬编码密钥或套用basellm。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在本地开发环境中让LangChain调用Jev模型完成结构化决策,必须绕过官方未开放的本地权重限制,直接对接TypeSafe AI提供的云端API服务,同时避免在代码中硬编码密钥或暴露敏感凭证。
准备Jev API访问权限
前往 https://typesafe.ai/console 注册账号并创建新项目,获取 【API Key】 和默认 【Base URL】(形如 https://api.typesafe.ai/v1)。该Key具有读写权限,不可泄露,后续将通过环境变量注入。
在项目根目录下新建 .env 文件,写入:
JEV_API_KEY=sk_abc123...
JEV_BASE_URL=https://api.typesafe.ai/v1
安装依赖与初始化环境
执行命令安装LangChain最新版及配套工具:
pip install langchain-core langchain-community python-dotenv httpx
注意:LangChain 0.3.x 起已移除对 langchain 单体包的依赖,必须使用 langchain-core + langchain-community 组合。若仍装旧版会报 AttributeError: module 'langchain' has no attribute 'llms'。
定义Jev结构化问题集
创建 jev_schema.py,用Python字典描述你要判断的问题。例如客服工单路由场景:
QUESTIONS = {
"route_to": {
"type": "enum",
"options": ["billing", "shipping", "returns", "technical"],
"instructions": "Select the most appropriate department based on user message content"
}
}
这里 "enum" 类型强制返回预设选项之一,杜绝LLM自由发挥导致的格式错乱——这是Jev区别于传统LLM的关键约束力。
封装Jev调用为LangChain兼容组件
方法一:使用 RunnableLambda 快速桥接
在 jev_runner.py 中写:
from langchain_core.runnables import RunnableLambda
import httpx
import os
from dotenv import load_dotenv
load_dotenv()
def jev_invoke(state: str) -> dict:
response = httpx.post(
f"{os.getenv('JEV_BASE_URL')}/models/jev-latest/invoke",
headers={"Authorization": f"Bearer {os.getenv('JEV_API_KEY')}"},
json={"state": state, "questions": QUESTIONS}
)
return response.json()["answers"]
jev_router = RunnableLambda(jev_invoke)
方法二:继承 BaseLLM 实现完整LangChain接口(仅当需接入AgentRouter等高级组件时才需要)
这一步不推荐新手尝试——Jev本质不是LLM,强行套用BaseLLM会导致token计数、streaming等逻辑失效,LangChain官方文档也明确建议优先使用RunnableLambda模式。
在LangChain链中调用Jev做路由决策
第一步:定义原始输入
user_input = "我的订单显示已发货,但物流信息3天没更新,我要投诉!"
第二步:构建链式调用
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import PromptTemplate
# Jev输出已是JSON,无需额外解析器,直接取值
route_result = jev_router.invoke(user_input)
target_department = route_result["route_to"]["enum"]
第三步:根据Jev结果分发到对应处理模块
if target_department == "shipping":
print("→ 转交物流组:触发实时物流查询工具")
elif target_department == "returns":
print("→ 转交售后组:生成退货预授权码")
这一步不能用 LLMChain 包裹——Jev返回的是纯结构化字典,不是字符串,传给LLMChain会触发类型错误。











