AGI学习:langchain第一课,提示词模版、大模型、输出解析器,链,部署【2025.10.20的课程复习笔记】

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': '我喜欢编程'}))
相关推荐
im_AMBER1 天前
Leetcode 94 合并零之间的节点
数据结构·c++·笔记·学习·算法·leetcode
RaLi和夕1 天前
硬件电路设计学习笔记2.三极管基极为什么要加上下拉电阻?以及三级管的最大耐压
笔记·嵌入式硬件·学习
0和1的舞者1 天前
字典与文件操作全解析
python·学习
im_AMBER1 天前
数据结构 16 【复习】静态查找表 | 二叉排序树的查找 | AVL树的旋转
数据结构·笔记·学习·算法
im_AMBER1 天前
数据结构 17 【复习】习题
数据结构·笔记·学习·算法
vibag1 天前
RAG文本处理
python·语言模型·langchain·大模型
非凡ghost1 天前
NSMusicS(开源音乐播放器)
windows·学习·firefox·软件需求
vibag1 天前
MCP实践
python·语言模型·langchain·大模型
starsky_walker1 天前
【论文阅读】--从OSDI里学习论文的引言
论文阅读·学习