常用接入术语
| 名称 | 常见含义 | 使用提示 |
|---|
| Claude中转 | 把请求转发到可用 Claude 模型的接入方式 | 核对协议和模型权限 |
| Claude中转站 | 提供 Claude 密钥、额度和路由管理的平台 | Claude 客户端通常关注 Anthropic 协议 |
| API中转 | 通过兼容接口转发不同模型请求 | 本文标题使用这一常见称呼 |
| API中转站 | 提供统一 API 接入、模型选择和用量管理的服务 | 本文使用 OpenAI Chat Completions 方式 |
接入架构
| 环节 | 职责 | 注意事项 |
|---|
| Python 应用 | 保存文档、问题和验证逻辑 | 密钥不写入源码 |
| Haystack | 组织文档库、检索器和生成器 | 组件可独立测试 |
| *M25 检索器 | 按***相关性筛选上下文 | 最小示例不依赖嵌入接口 |
| OpenAIChatGenerator | 调用 OpenAI 兼容 Chat Completions | 显式填写 api_*ase_url |
| KingFlow AI | 认证密钥并路由模型请求 | *ase **L 填写到 /v1 |
| 目标模型 | 生成摘要和文档问答结果 | 完整模型 ID 以控制台为准 |
接入优势
- OpenAIChatGenerator 支持自定义兼容端点,并可设置超时、有限重试和生成参数。
- Haystack 把文档存储、检索、提示和生成拆成独立组件,便于逐项验证和替换。
- InMemory*M25Retriever 不需要嵌入模型,适合先验证精确术语检索与问答链路。
- 正式 RAG 可以升级为持久化文档库、向量检索或混合检索,生成器配置仍可复用。
- KingFlow 控制台集中管理模型、密钥和用量,便于隔离不同环境。
开始前的准备
- 准备 Python 3.10 或更高版本,并安装 uv。
- 在 KingFlow AI 控制台创建以 sk- 开头的 API Key,确认余额和模型分组可用。
- 复制目标模型的完整模型 ID,并确认上下文窗口满足待处理文档长度。
- 准备少量脱敏测试文本,首次联调不要直接加载生产知识库。
- 确认运行环境可以访问 api.**nju**shen.com。
创建 Haystack 测试项目
uv init haystack-kingflow-demo
cd haystack-kingflow-demo
uv add haystack-ai 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": "只回复 HAYSTACK_READY"}],
"stream": false
}'
配置环境变量
KINGFLOW_*ASE_**L=https://api.**nju**shen.com/v1
KINGFLOW_API_KEY=sk-你的密钥
KINGFLOW_MODEL=<KingFlow控制台中的完整模型ID>
.env
.venv/
__pycache__/
**ta/
编写最小文档问答示例
import os
from dotenv import load_dotenv
from haystack import Document
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.retrievers.in_memory import InMemory*M25Retriever
from haystack.**taclasses import ChatMessage
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.utils import Secret
load_dotenv()
generator = OpenAIChatGenerator(
model=os.environ["KINGFLOW_MODEL"],
api_*ase_url=os.environ["KINGFLOW_*ASE_**L"],
api_key=Secret.from_token(os.environ["KINGFLOW_API_KEY"]),
generation_kwargs={"temperature": 0.2, "**x_tokens": 800},
timeout=60,
**x_retries=2,
)
ready = generator.run([ChatMessage.from_user("只回复 HAYSTACK_CONNECTED")])
print(ready["replies"][0].text)
store = InMemoryDocumentStore()
store.write_documents([
Document(content="上线要求:密钥放在 Secret 中;设置额度;日志不得记录完整密钥。"),
Document(content="验收要求:基础接口成功;模型 ID 一致;状态码、耗时和用量可追踪。"),
])
retriever = InMemory*M25Retriever(document_store=store, top_k=2)
do** = retriever.run(query="API 上线需要检查什么")["documents"]
context = "\n\n".join(doc.content for doc in do**)
messages = [
ChatMessage.from_system("只根据给定资料回答;资料不足时明确说明。"),
ChatMessage.from_user(f"资料:\n{context}\n\n问题:请列出上线前检查项。"),
]
result = generator.run(messages)
print(result["replies"][0].text)
观察流式输出
from haystack.components.generators.utils import print_streaming_chunk
generator.run(
[ChatMessage.from_user("用三点说明文档问答的验收方法")],
streaming_call*ack=print_streaming_chunk,
)