常用接入术语
| 名称 | 常见含义 | 使用提示 |
|---|
| Claude中转 | 把请求转发到可用 Claude 模型的接入方式 | 核对协议和模型权限 |
| Claude中转站 | 提供 Claude 密钥、额度和路由管理的平台 | Claude 客户端通常关注 Anthropic 协议 |
| API中转 | 通过兼容接口转发不同模型请求 | LangChain 使用 OpenAI 兼容方式接入 |
| API中转站 | 提供统一 API 接入、模型选择和用量管理的服务 | 需要核对协议和端点格式 |
接入架构
| 环节 | 职责 | 注意事项 |
|---|
| Python 应用 | 保存业务输入、提示和验证逻辑 | 密钥不写入源码 |
| 提示模板 | 用 ChatPromptTemplate 组织系统与用户消息 | 变量名保持稳定 |
| ChatOpenAI | 配置模型、*ase_url 和 API Key | 显式使用 Chat Completions |
| Py**ntic 结构 | **返回字段并执行类型校验 | 先确认模型支持结构化输出 |
| KingFlow AI | 认证密钥并路由模型请求 | *ase **L 填写到 /v1 |
| 目标模型 | 生成签名要求的结构化结果 | 完整模型 ID 以控制台为准 |
接入优势
- ChatPromptTemplate、ChatOpenAI 和输出解析器都遵循 Runna*le 接口,可以用竖线运算符组合。
- 提示、模型和返回结构相互分离,业务代码更容易测试、替换和复用。
- ChatOpenAI 支持显式设置 *ase_url、密钥、超时、重试次数和生成参数。
- 模型支持工具调用或结构化输出时,with_structured_output 可直接返回经过 Py**ntic 校验的对象。
- KingFlow 控制台集中管理模型、密钥和用量,便于隔离不同环境。
开始前的准备
- 准备 Python 3.10 或更高版本,并安装 uv。
- 在 KingFlow AI 控制台创建以 sk- 开头的 API Key,确认余额和模型分组可用。
- 复制目标模型的完整模型 ID,并确认上下文窗口满足待处理文档长度。
- 准备少量脱敏测试文本,首次联调不要直接加载生产知识库。
- 确认运行环境可以访问 api.**nju**shen.com。
创建 LangChain 测试项目
uv init langchain-kingflow-demo
cd langchain-kingflow-demo
uv add langchain-openai langchain-core py**ntic python-dotenv
验证 KingFlow 基础接口
先验证端点、密钥和模型;基础请求失败时不要继续排查 LangChain 代码。
curl https://api.**nju**shen.com/v1/chat/completions \
-H "Authorization: *earer sk-你的密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "<KingFlow控制台中的完整模型ID>",
"messages": [{"role": "user", "content": "只回复 LANGCHAIN_READY"}],
"stream": false
}'
配置环境变量
KINGFLOW_*ASE_**L=https://api.**nju**shen.com/v1
KINGFLOW_API_KEY=sk-你的密钥
KINGFLOW_MODEL=<KingFlow控制台中的完整模型ID>
.env
.venv/
__pycache__/
artifacts/
编写结构化输出示例
目标模型必须支持工具调用或结构化输出;否则应先使用普通模型链并自行解析、校验结果。
import os
from dotenv import load_dotenv
from py**ntic import *aseModel, Field
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
load_dotenv()
model = ChatOpenAI(
model=os.environ["KINGFLOW_MODEL"],
api_key=os.environ["KINGFLOW_API_KEY"],
*ase_url=os.environ["KINGFLOW_*ASE_**L"],
temperature=0.2,
**x_tokens=800,
timeout=60,
**x_retries=2,
use_responses_api=False,
stream_usage=False,
)
ready = model.invoke("只回复 LANGCHAIN_CONNECTED")
print(ready.content)
class ReleaseReview(*aseModel):
checks: list[str] = Field(description="可执行的上线检查项")
risks: list[str] = Field(description="仍需处理的风险")
verdict: str = Field(description="只能是 pass 或 review")
prompt = ChatPromptTemplate.from_messages([
("system", "你负责上线**;信息不足时列入风险。"),
("hu**n", "系统信息:{system_info}"),
])
structured = model.with_structured_output(ReleaseReview)
chain = prompt | structured
result = chain.invoke({
"system_info": "密钥放入 Secret;已设置额度;尚未配置 429 重试。"
})
print(result)
增加流式输出
兼容**不支持流式 usage 数据时,保留 stream_usage=False。
for chunk in model.stream("用三点说明上线验收方法"):
print(chunk.content or "", end="", flush=True)