**调用方式**

一、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

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐