大模型对象创建&调用

"""
大模型共用定义

"""
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()

# 创建大模型对象
llm = ChatOpenAI(
    model="qwen-max-latest",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    streaming=True,
)


result=llm.stream("介绍一下你自己")
for chunk in result:
    print(chunk.content,end="")
C:\Users\user\Desktop\mypython\class_mk_agent\chapter04\.venv\Scripts\python.exe C:\Users\user\Desktop\mypython\class_mk_agent\chapter04\bailian\LlmCommon.py 
你好!我是Qwen,这是我的英文名,你也可以叫我通义千问。我是阿里云研发的一种超大规模语言模型,能够帮助用户生成各种类型的文本、回答问题、创作文字,如写故事、公文、邮件、剧本等,还能进行逻辑推理、编程,甚至表达观点和玩游戏等。

我支持多种语言,包括但不限于中文、英文、德语、法语、西班牙语等,能够满足国际化的使用需求。通过不断学习和优化,我致力于为用户提供更加准确、流畅和自然的交互体验。

如果你有任何问题或需要帮助,欢迎随时向我提问!
进程已结束,退出代码为 0




langchain常用的提示词模板

模板类型 适用场景 关键特点 示例
PromptTemplate 简单任务、单轮问答 字符串替换、简单直接 翻译、摘要、分类
ChatPromptTemplate 多轮对话、角色扮演 支持多种消息角色、上下文管理 客服、教学、咨询
FewShotPromptTemplate 需要示例引导的任务 提供少量示例、格式控制 情感分析、代码生成、格式转换

提示词模板类继承关系

画板

一、 PromptTemplate 字符串模板提示词

适用于单轮对话

01 字符串提示模板.py

通过传入模板字符串+变量列表创建

template = "请将以下文本翻译成{target_language}: {text}"
prompt = PromptTemplate(
    input_variables=["target_language", "text"],
    template=template
)
# 格式化提示词
formatted_prompt = prompt.format(target_language="法语", text="你好,世界!")

直接使用模板字符串

# 方法2: 直接传入模板字符串创建
promptTemplate2 = PromptTemplate.from_template(
    "作为{role},请{action}: {content}"
)
formatted_prompt2 = promptTemplate2.format(role='资深文案', action='写一段产品介绍', content='新款智能手机')

使用模板字符串创建,并设置预设值

# 方法3: 传入模板字符串+变量列表创建,并预设部分变量值
partial_prompt = PromptTemplate(
    template="{product}的主要功能包括:{features}",
    input_variables=["product", "features"]
).partial(product="智能手表")
formatted_partial_prompt = partial_prompt.format(features='心率监测、GPS定位、消息提醒', product='智能手机')

代码案例

# 实际使用示例:预设翻译提示词模板
translation_template = """
你是一位专业的翻译专家。请将以下{source_language}文本翻译成{target_language}。
原文:{source_text}
要求:
1. 保持原意准确
2. 符合{target_language}的表达习惯
3. 如果是专业术语,请使用标准译法
翻译结果:
"""
# 第一步 定义模板
translation_prompt = PromptTemplate(
    template=translation_template,
    input_variables=["source_language", "target_language", "source_text"],
)

# 第二步 模板+变量 生成提示词
formatted_prompt = translation_prompt.format(
    source_language="中文",
    target_language="英语",
    source_text="人工智能正在改变世界"
)

# 第三步 传入模板运行模型
try:
    result = llm.stream(formatted_prompt)
    print("大模型输出结果:")
    for chunk in result:
        print(chunk.content, end="")
except Exception as e:
    print(f"API调用失败: {e}")
大模型输出结果:
Artificial intelligence is transforming the world.

二、对话提示词模板 ChatPromptTemplate

适用:多轮对话、角色扮演

特点: 支持多种消息角色、上下文管理

场景:客服、教学、咨询

02 对话提示词模板.py

方式 1 使用预定义角色的 MessagePromptTemplate 来创建

system_template = "你是一个{role},具有{experience}的经验。你的沟通风格是{style}。"
system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)
human_template = "{question}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([
    system_message_prompt,
    human_message_prompt,
])
# 使用模板创建消息
messages = chat_prompt.format_messages(
    role="资深软件架构师",
    experience="10年微服务架构设计",
    style="清晰、直接、有逻辑性",
    question="如何设计一个高可用的电商系统?"
)

方式 2 直接使用长度为 2 的元组列表创建

这里使用的元祖列表,固定第一个元素作为角色

chat_prompt2 = ChatPromptTemplate.from_messages([
    ("system", "你是{expert_type}专家。请用{language}回答。"),
    ("human", "请解释一下{concept}。"),
    ("assistant", "好的,我来解释一下{concept}。"),
    ("human", "{follow_up_question}")
])
messages2 = chat_prompt2.format_messages(
    expert_type="机器学习",
    language="中文",
    concept="神经网络",
    follow_up_question="那么深度学习又是什么呢?"
)

方式 3 使用方式 1+MessagePlaceHolder 消息占位符实现历史消息

# 方法3: 传入角色的MessagePromptTemplate+占位符列表创建
customer_service_prompt = ChatPromptTemplate.from_messages([
    SystemMessagePromptTemplate.from_template(
        "你是{company_name}的客服助手。公司主要产品是{product}。"
        "你的服务态度应该是{friendly_level}。"
        "如果遇到无法解决的问题,请建议用户联系{support_channel}。"
    ),
    MessagesPlaceholder(variable_name="chat_history"),
    HumanMessagePromptTemplate.from_template("{user_input}")
])
chat_history = [
    HumanMessage(content="我的订单状态如何?"),
    AIMessage(content="请提供您的订单号,我来帮您查询。")
]

messages3 = customer_service_prompt.format_messages(
    company_name="TechGadget",
    product="智能家居设备",
    friendly_level="热情耐心",
    support_channel="客服热线 400-123-4567",
    chat_history=chat_history,
    user_input="订单号是 ORD20231234567"
)

代码案例

customer_service_prompt = ChatPromptTemplate.from_messages([
    SystemMessagePromptTemplate.from_template(
        "你是{company_name}的客服助手。公司主要产品是{product}。"
        "你的服务态度应该是{friendly_level}。"
        "如果遇到无法解决的问题,请建议用户联系{support_channel}。"
    ),
    MessagesPlaceholder(variable_name="chat_history"),
    HumanMessagePromptTemplate.from_template("{user_input}")
])

try:
    prompt_param = {
        "company_name": "3DM",
        "product": "单机游戏售卖",
        "friendly_level": "热情耐心且专业",
        "support_channel": "客服热线 400-123-4567",
        "chat_history": [],
        "user_input": "你们公司主要干啥的"
    }
    # 这里使用管道符进行链式调用,提示词模板+参数生成的提示词,会直接给llm作为参数
    chain = customer_service_prompt|llm
    response=chain.stream(prompt_param)
    for chunk in response:
        print(chunk.content, end="")
except Exception as e:
    print(f"API调用失败: {e}")

C:\Users\user\Desktop\mypython\class_mk_agent\chapter04\.venv\Scripts\python.exe "C:\Users\user\Desktop\mypython\class_mk_agent\chapter04\bailian\02 对话提示词模板.py" 
您好!欢迎来到3DM游戏商城~我们公司主要致力于为广大玩家朋友提供最新、最全的正版单机游戏。在这里您可以找到各种类型的优质游戏作品,包括动作冒险、角色扮演、策略模拟等等。我们不仅提供优质的游戏资源,还配有完善的售后服务,确保每位玩家都能获得最佳的游戏体验。如果您对游戏有任何疑问或需求,随时都可以向我咨询哦!
进程已结束,退出代码为 0

三、少量引导提示词模板 FewShotPromptTemplate

场景:需要示例引导的任务

特点:提供少量示例、格式控制

场景:情感分析、代码生成、格式转换

03 少量样本参数提示词模板.py

创建模板

创建引导词模板,需要引导词案例、前缀、后缀、引导词模板等信息

examples = [
    {
        "text": "这个产品真是太棒了,完全超出我的预期!",
        "sentiment": "积极",
        "reason": "使用了强烈的正面词汇'太棒了'和'超出预期'"
    },
    {
        "text": "服务一般,没什么特别的体验。",
        "sentiment": "中性",
        "reason": "使用中性词汇'一般',没有明显情感倾向"
    },
    {
        "text": "质量太差了,用了两天就坏了,非常失望!",
        "sentiment": "消极",
        "reason": "使用负面词汇'太差了'、'坏了'和'失望'"
    },
    {
        "text": "物流速度很快,但包装有点简陋。",
        "sentiment": "混合",
        "reason": "既有正面评价'很快',又有负面评价'简陋'"
    }
]

# 示例格式模板
example_template = """
    文本: {text}
    情感: {sentiment}
    分析: {reason}
    """
example_prompt = PromptTemplate(
    input_variables=["text", "sentiment", "reason"],
    template=example_template
)

# 前缀和后缀模板
prefix = """你是一个情感分析专家。请分析以下文本的情感倾向。
以下是几个分析示例:
"""

suffix = """
现在请分析这个新文本:

文本: {input_text}
情感: 
分析: 
"""

# 构建 FewShotPromptTemplate
few_shot_prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    prefix=prefix,
    suffix=suffix,
    input_variables=["input_text"],
    example_separator="\n" + "-" * 40 + "\n"
)

代码案例

# 运行测试
try:
    chain = few_shot_prompt | llm
    result = chain.invoke({"input_text": "东西很好用"})
    print(f"情感分析结果:\n{result.content}")
except Exception as e:
    print(f"API调用失败: {e}")
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐