1、传统方式VS使用langchain和大模型交互
``
import os
from openai import OpenAI
# 1. 传统方式跟大模型交互
'''
# 创建大模型连接
client = OpenAI(
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-max",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '你是谁?'}],
)
# print(completion.model_dump_json())
print(completion.choices[0].message.content)
'''
# 2. 使用Langchain框架方式交互
from langchain_community.chat_models.tongyi import ChatTongyi
client = ChatTongyi(model_name="qwen3-max")
response = client.invoke("你是谁?") # invoke: 调用
print(response.content)
2、采样通义千问的方式访问(直接导入对应模型(适合模型不会更换的情)
``
import os
import langchain
from langchain.chat_models import init_chat_model
from langchain_community.chat_models import ChatTongyi
from langchain_openai import ChatOpenAI
# 1.ChatOpenAI用于直接创建和管理一个与OpenAI(或类似API)兼容的聊天模型, 适合快速初始化一个可用的聊天模型
# 创建模型对象,基于OpenAI 规范
'''
client = ChatOpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"),
model_name="qwen3-max",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
temperature=0
)
'''
# 2.init_chat_model:对于不兼容OpenAI的模型,可以使用
# 参数1:model模型名称
# 参数2:model_provider模型提供者
client = init_chat_model("deepseek-chat", model_provider="deepseek") # 如果报错,注释掉
# 3.直接导入对应模型(适合模型不会更换的情况)
# 采样通义千问的方式访问
client = ChatTongyi(model_name="qwen3-max")
# invoke调用的意思
result = client.invoke("国庆节是几月几日")
print(result)
3、提示词模版 prompt_templates
``
import os
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate, SystemMessagePromptTemplate, \
HumanMessagePromptTemplate, AIMessagePromptTemplate
from models import get_lc_model_client
# 构建提示词
# prompt1 = "请帮我将以下内容翻译成英文:我喜欢编程。"
# 提示词模板
# f-string: 不是提示词模板,模板是可以反复使用的
# language= "英文"
# text="我喜欢编程"
# prompt1 = f"请帮我将以下内容翻译成{language}:{text}。"
# 创建提示词模板
# 1. PromptTemplate 提示词模板
# 默认格式:f-string
# str_prompt = PromptTemplate.from_template("请将以下内容翻译成{language}:{text}")
# prompt2 = str_prompt.format(language="英文", text="我喜欢编程")
# print("prompt2:", prompt2)
# print('-' * 100)
# 格式jinja2是一个模板引擎,可以动态生成字符串
# prompt = PromptTemplate.from_template(
# "你是一个翻译专家,请将输入的句子翻译成{{language}}:{{text}}",
# template_format="jinja2" # 默认是"f-string"
# )
# # 动态给参数赋值 注意:变量名称不要写错
# prompt2 = prompt.format(language="德语", text="我是Jeff")
# print("prompt2:", prompt2)
# print('-' * 100)
# 2. ChatPromptTemplate:
# 提供角色设置: system, user,assistant(大模型回复)
'''LangChain提供不同类型的角色的消息模板:
最常用的是:
SystemMessagePromptTemplate:"system",系统消息(通常是提示词中的角色、要求、参考案例、约束项等)
HumanMessagePromptTemplate:"user"或"human",人类消息(用户的具体任务)
AIMessagePromptTemplate: "assistant",人工智能应答消息
'''
chat_prompt = ChatPromptTemplate([
("system", "你是一个翻译模型,你需要将输入的句子翻译成{language}"),
# SystemMessagePromptTemplate.from_template("你是一个翻译模型,你需要将输入的句子翻译成{language}"),
("user", "{text}"),
# HumanMessagePromptTemplate.from_template("{text}"),
# ("assistant", "我非常抱歉,但是这个任务无法完成。"),
# AIMessagePromptTemplate.from_template("我非常抱歉,但是这个任务无法完成。")
])
prompt3 = chat_prompt.format(language="英文", text="我喜欢编程")
print("prompt3:", prompt3)
print('-' * 100)
# 访问大模型
client = get_lc_model_client()
# invoke调用
result = client.invoke(prompt3)
print(result)
4、输出解析器outputparser
``
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from models import get_lc_model_client
# 提示词模板
chat_prompt = ChatPromptTemplate([
("system", "你是一个翻译模型,你需要将输入的句子翻译成{language}"),
("user", "{text}"),
])
prompt = chat_prompt.format(language="英文", text="我喜欢编程")
# 大模型客户端
client = get_lc_model_client()
# 默认不用parser
result = client.invoke(prompt)
print("result:", result)
print('-' * 100)
# Output Parser
# 1.StrOutputParser 字符串结果解析器:提取回复内容的字符串
str_parser = StrOutputParser()
str_result = str_parser.invoke(result)
print("str_result:", str_result)
print('-' * 100)
5、链( 提示词模版 | 大模型 | 输出解析器)
``
import langchain
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate
from models import get_lc_model_client
# 提示词模板
chat_prompt = ChatPromptTemplate([
("system", "你是一个翻译模型,你需要将输入的句子翻译成{language}"),
("user", "{text}"),
])
str_prompt = PromptTemplate.from_template("请将以下内容翻译成{language}:{text}")
# 大模型客户端 llm
client = get_lc_model_client()
# Parser
str_parser = StrOutputParser()
# 链的形式调用
# chain = chat_prompt | client | str_parser
chain = str_prompt | client | str_parser
# 调用执行链
# result = chain.invoke({"language": "英文", "text": "我喜欢编程"})
result = chain.invoke({"language": "西班牙语", "text": "我喜欢编程"})
print(result)
6、学会LangChain应用程序的跟踪调试
# 学会LangChain应用程序的跟踪调试
import langchain
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate
from models import get_lc_model_client
# 开启该参数,会输出调试信息
langchain.debug = True
# 获得访问大模型客户端
client = get_lc_model_client()
# 定义提示模版
chat_template = ChatPromptTemplate.from_messages([
('system', '请将以下的内容翻译成{language}'),
('human', '{text}')
])
# 原始答复比较复杂,包含了很多额外的信息
result = client.invoke(chat_template.format(language='英语', text='朋友啊再见!'))
print(result)
print('-' * 100)
# 使用解析器
parser = StrOutputParser()
print(parser.invoke(result))
print('-' * 100)
# 使用链:
# 在langchain.debug = True情况下,可以更容易理解链的每一步输入和输出
chain = chat_template | client | parser
print(chain.invoke({'language': '英语', 'text': '朋友啊再见!'}))
7、部署1: 网页访问
``
# 学会利用LangChain部署我们的应用成为WEB服务
from fastapi import FastAPI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langserve import add_routes
import uvicorn
from models import get_lc_model_client
# 获得访问大模型客户端
client = get_lc_model_client()
# 解析返回结果
parser = StrOutputParser()
# 定义提示模版
prompt_template = ChatPromptTemplate.from_messages([
('system','请将以下的内容翻译成{language}'),
('human', '{text}')
])
# 以链的形式调用
chain = prompt_template | client | parser
# 部署为服务
app = FastAPI(title="基于LangChain的服务", version="V1.5", description="翻译服务")
# 添加路由,给当前的程序添加一个访问路径
add_routes(app, chain, path="/tslServer")
if __name__ == "__main__":
uvicorn.run(app, host="localhost", port=8000)
8、部署2:通过代码访问上一个部署的功能
``
''''''
# 使用LangChain编写客户端访问我们基于LangServe的WEB服务
# 对于其他编程语言来说,可以使用 RESTful API来调用我们的服务
'''
postman下载地址:https://www.postman.com/ 【了解即可】
比如在postman或者apifox中访问 http://localhost:8000/tslServer/invoke
# 使用post请求,在body中选择raw,然后输入以下json内容:
{
"input":
{
"language":"意大利文",
"text":"为了部落!"
}
}
'''
from langserve import RemoteRunnable
if __name__ == "__main__":
# 创建了一个chain对象
client = RemoteRunnable("http://localhost:8000/tslServer")
print(client.invoke({'language': '英文', 'text': '我喜欢编程'}))