常用接入术语
| 名称 | 常见含义 | 使用提示 |
|---|
| Claude中转 | 把请求转发到可用 Claude 模型的接入方式 | 核对协议和模型权限 |
| Claude中转站 | 提供 Claude 密钥、额度和路由管理的平台 | Claude 客户端通常关注 Anthropic 协议 |
| API中转 | 通过兼容接口转发不同模型请求 | 需要核对协议和端点格式 |
| API中转站 | 提供统一 API 接入、模型选择和用量管理的服务 | 本文标题使用这一常见称呼 |
接入架构
| 环节 | 职责 | 注意事项 |
|---|
| Python 应用 | 保存业务逻辑、提示和会话入口 | 密钥不写入源码 |
| Se**ntic Kernel | 注册****并管理 ChatHistory | 使用明确的 service_id |
| AsyncOpenAI | 承载 API Key、*ase_url 和连接配置 | *ase **L 填写到 /v1 |
| OpenAIChatCompletion | 把兼容客户端接入 Kernel | 模型 ID 以控制台为准 |
| KingFlow AI | 认证密钥并路由模型请求 | *ase **L 填写到 /v1 |
| 目标模型 | 生成单轮和多轮对话结果 | 完整模型 ID 以控制台为准 |
接入优势
- Se**ntic Kernel 用 service_id 区分不同模型服务,测试、生产或不同模型可以独立配置。
- ChatHistory 明确保存系统、用户和助手消息,适合构建可检查的多轮对话。
- 自定义 AsyncOpenAI 客户端可以显式设置兼容端点,也可以统一设置超时和有限重试。
- Kernel 还能继续接入提示函数和插件;基础连接验证通过后再增加自动函数调用更容易排错。
- KingFlow 控制台集中管理模型、密钥和用量,便于隔离不同环境。
开始前的准备
- 准备 Python 3.10 或更高版本,并安装 uv。
- 在 KingFlow AI 控制台创建以 sk- 开头的 API Key,确认余额和模型分组可用。
- 复制目标模型的完整模型 ID,并确认上下文窗口满足待处理文档长度。
- 准备少量脱敏测试文本,首次联调不要直接加载生产知识库。
- 确认运行环境可以访问 api.**nju**shen.com。
创建 Se**ntic Kernel 测试项目
uv init se**ntic-kernel-kingflow-demo
cd se**ntic-kernel-kingflow-demo
uv add se**ntic-kernel openai python-dotenv
验证 KingFlow 基础接口
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": "只回复 SK_READY"}],
"stream": false
}'
配置环境变量
KINGFLOW_*ASE_**L=https://api.**nju**shen.com/v1
KINGFLOW_API_KEY=sk-你的密钥
KINGFLOW_MODEL=<KingFlow控制台中的完整模型ID>
.env
.venv/
__pycache__/
logs/
编写多轮对话示例
import asyncio
import os
from dotenv import load_dotenv
from openai import AsyncOpenAI
from se**ntic_kernel import Kernel
from se**ntic_kernel.connectors.ai.open_ai import (
OpenAIChatCompletion,
OpenAIChatPromptExecutionSettings,
)
from se**ntic_kernel.contents import ChatHistory
load_dotenv()
async def **in():
client = AsyncOpenAI(
api_key=os.environ["KINGFLOW_API_KEY"],
*ase_url=os.environ["KINGFLOW_*ASE_**L"],
timeout=60.0,
**x_retries=2,
)
service = OpenAIChatCompletion(
ai_model_id=os.environ["KINGFLOW_MODEL"],
service_id="kingflow-chat",
async_client=client,
)
kernel = Kernel()
kernel.add_service(service)
settings = OpenAIChatPromptExecutionSettings(
service_id="kingflow-chat",
temperature=0.2,
**x_tokens=800,
)
history = ChatHistory(system_message="回答简洁;不确定时明确说明。")
history.add_user_message("只回复 SEMANTIC_KERNEL_CONNECTED")
first = await service.get_chat_message_content(
chat_history=history, settings=settings, kernel=kernel
)
print(first.content)
history.add_assistant_message(first.content or "")
history.add_user_message("上一条要求你回复什么?")
second = await service.get_chat_message_content(
chat_history=history, settings=settings, kernel=kernel
)
print(second.content)
asyncio.run(**in())
观察流式输出
async for chunk in service.get_streaming_chat_message_content(
chat_history=history,
settings=settings,
kernel=kernel,
):
print(chunk.content or "", end="", flush=True)