调用大模型api
import os
from dotenv import load_dotenv
from langchain.chat_models import (init_chat_model,)
load_dotenv(encoding="utf-8")
# ========== 2. 实例化模型并调用 ==========
llmQwen = init_chat_model(
model = "qwen-plus", # 模型 ID,与平台模型广场一致
model_provider = "openai",# # 表示使用「OpenAI 兼容」的 API(阿里百炼、通义等均兼容,阿里百炼不支持直接调用,需要通过OpenAI 兼容的 API 调用)
api_key = os.getenv("aliQwen-api"),
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
)
# 调用并直接取回复正文:invoke 返回消息对象,.content 为文本内容
print(llmQwen.invoke("你是谁").content)
# ========== 第二个实例化模型并调用 ==========
llmDeepSeek = init_chat_model(
model = "deepseek-chat", # 模型 ID,与平台模型广场一致
model_provider = "deepseek",# # 表示使用「OpenAI 兼容」的 API(阿里百炼、通义等均兼容,阿里百炼不支持直接调用,需要通过OpenAI 兼容的 API 调用)
api_key = os.getenv("deepseek-api"),
base_url = "https://api.deepseek.com"
)
print(llmDeepSeek.invoke("你是谁").content) # invoke():一次性返回完整结果。 适合: 简单问答+后台处理 + 不需要实时展示中间输出的场景
# stream():边生成边返回。 适合: 命令行实时输出 + 聊天打字机效果 + 长文本生成 +
大模型调用方式
1.普通调用 invoke/ainvoke
invoke:同步调用,最常用,适合单轮问答与脚本演示。ainvoke:异步调用,适合异步 Web 服务、并发任务和高吞吐场景。- 命令行脚本、教学示例、简单后台任务:优先
invoke - FastAPI、异步服务、并发请求:优先
ainvoke
import os
import asyncio
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from langchain_core.messages import SystemMessage,HumanMessage, AIMessage
load_detenv()
# 实例化模型
model = init_chat_model(
model= "qwen-plus",
model_provider= "openai",
api_key= os.getenv("aliQwen-api"),
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
)
async def main():
"""异步主函数:必须用 async def,内部用 await 调用 ainvoke。"""
messages = [
SystemMessage(content="你现在是ai领域的专家,回答要简洁"),
HumanMessage(content="解释一下LangChain是什么,简洁回答100字以内")
]
resp = awit model.ainvoke(messages)
print(resp.content)
# ---------- 3. 运行异步程序 ----------
# asyncio.run(main()) 会启动事件循环、执行 main(),直到 main() 结束。初学者只需记住:异步入口这样写。
if __name__ == "__main__":
asyncio.run(main())
2. 流式调用
- stream:同步流式输出
- astream:异步流式输出
流式的最大价值不是“更快算完”,而是更快把正在生成的内容展示给用户
真实项目里,stream / astream 很常用于:
- 聊天界面的“打字机效果”
- 长回答提前回显
- 减少用户等待焦虑
import os
from dotenv import load_dotenv
from langchin.message import HumanMessage,SystemMessage
from langchain.chat_models import init_chat_model
load_dotenv()
# ---------- 1. 实例化模型 ----------
model = init_chat_model(
model="qwen-plus",
model_provider="openai",
api_key=os.getenv("aliQwen-api"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
messages = [
SystemMessage(content="你是小雯,一个乐于助人的ai助理"),
HumanMessage(content="你是谁")
]
# ---------- 2. 同步调用 ----------
for chunk in model.stream(messages):
print(chunk.content,end="",flush=True)
print("\n")
# ---------- 2. 异步调用 ----------
asycn def asycn_stream_call():
resp = model.astream(messages)
# 必须用 async for 遍历异步生成器,不能用普通 for
async for chunk in response:
print(chunk.content, end="", flush=True)
print("\n")
# ---------- 4. 运行异步函数 ----------
if __name__ == "__main__":
asyncio.run(async_stream_call())
3. 批处理
- batch:一次提交多条输入,统一获得多条结果
- abatch:异步批处理
别适合离线任务,而不是交互式聊天
- 批量摘要一批文档
- 批量清洗问答数据
- 批量评估 Prompt 效果
- 批量为商品、评论、工单做标签分类
# ---------- 1. 实例化模型 ----------
# ---------- 2. 准备多条独立问题(批量输入的列表)----------
# 每一条字符串会作为「一次请求」发给模型;batch 会并行处理这些请求,最后返回与之一一对应的响应列表。
questions = [
"什么是redis?简洁回答,字数控制在100以内",
"Python的生成器是做什么的?简洁回答,字数控制在100以内",
"解释一下Docker和Kubernetes的关系?简洁回答,字数控制在100以内",
]
# ---------- 3. 批量调用:model.batch(questions) ----------
# 返回的是一个列表,每个元素对应一条问题的 AIMessage,用 .content 取该条回复的文本。
response = model.batch(questions)
print(f"响应类型:{type(response)}")
print()
# zip(questions, response):把“问题列表”和“回答列表”按位置配对,便于一起遍历。
for q, r in zip(questions, response):
print(f"问题:{q}\n回答:{r.content}\n")
# ---------- 3. 异步批量调用(在 async 函数中)----------
async def async_batch_call():
# await model.abatch(questions):异步批量处理,返回的仍是「问题与回答一一对应」的列表
response = await model.abatch(questions)
print(f"响应类型:{type(response)}")
for q, r in zip(questions, response):
print(f"问题:{q}\n回答:{r.content}\n")
# ---------- 4. 运行异步函数 ----------
if __name__ == "__main__":
asyncio.run(async_batch_call())

浙公网安备 33010602011771号