**调用方式**
一、ChatOpenAI
1.确保服务已启动
确保你的本地服务已启动 OpenAI 兼容接口(FastChat 启动命令):
python -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 9997
测试接口是否正常:
curl http://localhost:9997/v1/models
应返回类似结果:
{"object":"list","data":[{"id":"deepseek-7b","object":"model"}]}
2.使用 ChatOpenAI
调用(LangChain 方式)
安装依赖:
pip install langchain-openai
完整代码:
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
# 初始化本地模型
llm = ChatOpenAI(
base_url="http://localhost:9997/v1",
model="deepseek-7b",
api_key="EMPTY"
)
# 使用提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的AI助手,回答需简明扼要"),
("human", "{question}")
])
# 创建链式调用
chain = prompt | llm
# 执行调用
response = chain.invoke({"question": "解释 Transformer 架构"})
print(response.content)
二、openai库调用
安装依赖:
pip install openai
完整代码:
from openai import OpenAI
# 配置本地客户端
client = OpenAI(
base_url="http://localhost:9997/v1", # 本地服务地址
api_key="EMPTY" # 任意非空字符串
)
# 调用聊天接口
response = client.chat.completions.create(
model="deepseek-7b",
messages=[{"role": "user", "content": "如何学习机器学习?"}],
temperature=0.7,
stream=True # 支持流式输出
)
# 处理响应(流式)
for chunk in response:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
三、使用 FastChat 直接对话(终端交互)
from fastchat.serve.cli import chat_loop
# 直接与模型对话(需先启动 model_worker)
chat_loop(
model_path="./deepseek-llm-7b", # 模型路径
device="cuda", # 使用 GPU
temperature=0.7
)
运行方式:启动后会进入交互式终端,直接输入问题即可。
四、使用 LangChain 集成
from langchain_community.llms import FastChat
from langchain.prompts import PromptTemplate
# 初始化 LangChain 适配的 FastChat
llm = FastChat(
model_path="./deepseek-llm-7b",
temperature=0.5,
max_tokens=1024
)
# 使用模板提问
template = """你是一个AI助手。请回答:{question}"""
prompt = PromptTemplate.from_template(template)
response = llm(prompt.format(question="量子计算是什么?"))
print(response)
五、使用 transformers 直接加载模型
from transformers import AutoTokenizer, AutoModelForCausalLM
# 加载本地模型
tokenizer = AutoTokenizer.from_pretrained("./deepseek-llm-7b")
model = AutoModelForCausalLM.from_pretrained("./deepseek-llm-7b", device_map="auto")
# 生成文本
input_text = "解释一下深度学习"
inputs = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
六、使用 vLLM 高性能推理(适合大批量请求)
from vllm import LLM, SamplingParams
# 初始化 vLLM
llm = LLM(model="./deepseek-llm-7b")
# 配置生成参数
sampling_params = SamplingParams(
temperature=0.8,
top_p=0.9,
max_tokens=512
)
# 批量生成
inputs = ["如何学习Python?", "AI的未来发展方向是什么?"]
outputs = llm.generate(inputs, sampling_params)
for output in outputs:
print(f"问题: {output.prompt}")
print(f"回答: {output.outputs[0].text}\n")
七、使用 WebSocket 实时流式传输
# server.py (FastChat 已支持,启动时添加 --worker-address ws://localhost:21001)
# 客户端代码:
import websockets
import json
async def stream_chat():
async with websockets.connect("ws://localhost:21001/worker_generate_stream") as ws:
payload = {
"prompt": "写一首关于春天的诗",
"temperature": 0.7,
"max_new_tokens": 256
}
await ws.send(json.dumps(payload))
while True:
response = await ws.recv()
data = json.loads(response)
print(data["text"], end="", flush=True) # 流式输出
import asyncio
asyncio.get_event_loop().run_until_complete(stream_chat())
八、使用 gRPC 调用(高性能场景)
定义文件chat.proto
// 先定义 proto 文件(chat.proto):
service ChatService {
rpc Generate (ChatRequest) returns (stream ChatResponse);
}
message ChatRequest {
string prompt = 1;
float temperature = 2;
}
message ChatResponse {
string text = 1;
}
python客户端:
import grpc
from chat_pb2 import ChatRequest
from chat_pb2_grpc import ChatServiceStub
channel = grpc.insecure_channel("localhost:50051")
stub = ChatServiceStub(channel)
responses = stub.Generate(
ChatRequest(prompt="AI如何改变医疗行业?", temperature=0.6)
)
for response in responses:
print(response.text, end="", flush=True)
**调用方式对比表**
方式 | 适用场景 | 优点 | 缺点 |
HTTP POST | 通用远程调用 | 简单易用 | 延迟较高 |
直接加载模型 | 本地开发/调试 | 最低延迟 | 需管理显存 |
LangChain | 复杂应用流程 | 集成工具链丰富 | 额外依赖 |
vLLM | 高并发推理 | 吞吐量高 | 配置复杂 |
WebSocket | 实时流式输出 | 低延迟推送 | 需维护长连接 |
gRPC | 微服务间通信 | 高性能二进制传输 | 需要定义proto |