AI入门实战|Agent骨架与工具调用|基础LLM调用
简述
基于框架调用大模型(OpenAI/国内模型)
源码(sample-02-demo)
https://gitee.com/kcnf-python/ai-in-action
LangChain 1.x 核心组件
hatOpenAI
来自 langchain-openai,因为 DeepSeek 完全兼容 OpenAI 接口协议,
直接使用该类作为模型客户端
消息组件(langchain_core.messages)
SystemMessage:系统角色设定(人设、规则、背景)
HumanMessage:用户输入消息
AIMessage:模型返回消息
ChatPromptTemplate
结构化构建提示词,支持消息占位符,解耦文案与逻辑
Runnable 管道
LangChain 1.x 标准写法:提示词 | 模型,链式调用,简洁易维护
调用方式
invoke():同步一次性返回结果
stream():流式逐块输出(打字机效果)
代码演示
基础单轮调用
import tkinter as tk
from tkinter import simpledialog, messagebox
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage
from config import DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL
def main():
# 初始化窗口(隐藏主窗口,只弹输入框/弹窗)
root = tk.Tk()
root.withdraw()
# 1. 初始化模型
llm = ChatOpenAI(
api_key=DEEPSEEK_API_KEY,
base_url=DEEPSEEK_BASE_URL,
model="deepseek-chat",
temperature=0.3,
max_tokens=1024,
tiktoken_model_name=None # 规避 tiktoken 报错
)
# 2. 窗口录入问题
user_question = simpledialog.askstring("请输入问题", "向 DeepSeek 提问:")
if not user_question:
messagebox.showinfo("提示", "未输入内容,程序退出")
return
# 3. 组装消息并调用
messages = [
SystemMessage(content="你是专业技术助手,回答简洁明了。"),
HumanMessage(content=user_question)
]
response = llm.invoke(messages)
# 4. 弹窗展示结果
messagebox.showinfo("模型回复", response.content)
if __name__ == "__main__":
main()
提示词+模板
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from config import DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL
def main():
llm = ChatOpenAI(
api_key=DEEPSEEK_API_KEY,
base_url=DEEPSEEK_BASE_URL,
model="deepseek-chat",
temperature=0.3,
tiktoken_model_name=None
)
# 构建提示词模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是翻译助手,将用户内容翻译成英文。"),
("human", "{user_text}")
])
# 管道组合链路
chain = prompt | llm
print("===== 文本翻译 =====")
user_text = input("请输入中文内容:").strip()
if not user_text:
print("未输入内容,程序退出")
return
res = chain.invoke({"user_text": user_text})
print(f"\n翻译结果:\n{res.content}")
if __name__ == "__main__":
main()
input("\n按回车键关闭窗口...")
管道流式
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage
from config import DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL
def main():
llm = ChatOpenAI(
api_key=DEEPSEEK_API_KEY,
base_url=DEEPSEEK_BASE_URL,
model="deepseek-chat",
temperature=0.3,
tiktoken_model_name=None
)
print("===== 流式输出 =====")
user_input = input("请输入问题:").strip()
if not user_input:
print("未输入内容,程序退出")
return
messages = [
SystemMessage(content="你是编程助手,讲解通俗易懂。"),
HumanMessage(content=user_input)
]
print("\n模型回复:", end="", flush=True)
for chunk in llm.stream(messages):
print(chunk.content, end="", flush=True)
if __name__ == "__main__":
main()
input("\n\n按回车键关闭窗口...")
演示结果

