构建Agnet(2) 提示词模板使用

提示词模板使用(Prompt Template Usage)

使用LangChain创建和使用提示模板来生成结构化的查询。
提示模板(Prompt Template)是一种用于生成提示(prompt)的模板。它允许您使用变量来填充模板,并生成结构化的查询。

技术要点

  1. 变量替换: 使用花括号{}定义模板变量
  2. 中文支持: 模板支持中文字符串
  3. 动态生成: 可以根据不同的输入生成不同的查询
  4. 类型安全: PromptTemplate对象包含输入变量验证

应用场景

  • 问答系统构建
  • 多语言查询生成
  • 结构化提示工程
  • 动态内容创建

核心功能说明

PromptTemplate类提供了以下功能:

1. 提示模板定义

  • 定义模板字符串,包含变量占位符
  • 支持中文字符串
from langchain_core.prompts import PromptTemplate
# Define template

template = "{country} 的首都是什么?"

# Create a `PromptTemplate` object using the `from_template` method.
prompt_template = PromptTemplate.from_template(template)
prompt_template

prompt = prompt_template.format(country="Korea")
prompt

回答:‘Korea 的首都是什么?’

from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
import os

load_dotenv()
# 创建ChatOpenAI对象,配置为使用硅基流动API
Qwen2_5_7B_Instruct_llm = ChatOpenAI(
    temperature=0.1,  # 控制输出的随机性和创造性,值越低输出越稳定可预测,值越高输出越有创意但可能偏离预期 (范围: 0.0 ~ 2.0)
    model_name="Qwen/Qwen2.5-7B-Instruct",  # 硅基流动支持的模型名称
    openai_api_key=os.getenv("SILICONFLOW_API_KEY"),  # 从环境变量获取API密钥
    openai_api_base="https://api.siliconflow.cn/v1"  # 硅基流动API的基础URL
)
# 创建提示模板对象
prompt = PromptTemplate.from_template("请简单解释一下 {topic} ")


# 将提示模板与模型组合成链
chain = prompt | Qwen2_5_7B_Instruct_llm
#使用管道(‘ | ‘)操作符连接’ prompt ’对象和‘ model ’对象。
#使用‘ invoke ’方法来传递‘ input ’。
#这将返回由AI模型生成的消息
input = {"topic": "人工智能模型中的学习原理"}
# 完整输出
chain.invoke(input)

# 请求流式输出
answer = chain.stream(input)
# 流式输出
for token in answer:
    print(token.content, end="", flush=True)

2. 变量替换

  • 使用format方法替换模板变量
  • 支持多个变量替换
prompt = PromptTemplate.from_template("三句话描述 {topic} ")
# 将提示与模型连接,创建对话链
chain = prompt | Qwen2_5_7B_Instruct_llm | StrOutputParser()

chain.batch(
    [
        {"topic": "ChatGPT"},
        {"topic": "Instagram"},
        {"topic": "multimodal"},
        {"topic": "programming"},
        {"topic": "machineLearning"},
    ],
    config={"max_concurrency": 3},
)

3. 动态生成

  • 根据不同输入生成不同查询
from langchain_core.runnables import RunnablePassthrough  # 用于在链中透传输入参数,保持数据流不变

# 可运行对象
RunnablePassthrough().invoke({"num": 10})

# 输出:{'num': 10}

runnable_chain = {"num": RunnablePassthrough()} | prompt | Qwen2_5_7B_Instruct_llm

# 字典的值已通过 RunnablePassthrough() 更新。
runnable_chain.invoke(10)

回答:‘10 是一个偶数’

3.1 高效并行执行方案
#高效并行执行方案
from langchain_core.runnables import RunnableParallel

# 创建一个RunnableParallel实例。这个实例允许多个Runnable对象并行执行。
runnable = RunnableParallel(
    # 将RunnablePassthrough实例作为'passed'关键字参数传入。这会直接将输入数据原样传递,不做任何修改。
    passed=RunnablePassthrough(),
    # 使用RunnablePassthrough.assign作为'extra'关键字参数来分配一个lambda函数'mult'。
    # 这个函数将输入字典中'num'键对应的值乘以3。
    extra=RunnablePassthrough.assign(mult=lambda x: x["num"] * 3),
    # 将一个lambda函数作为'modified'关键字参数传入。
    # 这个函数将输入字典中'num'键对应的值加1。
    modified=lambda x: x["num"] + 1,
)
# 调用runnable实例的invoke方法,传入字典{'num': 1}作为输入。
runnable.invoke({"num": 1})
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from datetime import datetime

def get_today(a):
    # 获取今天的日期,格式为“月-日”(例如:Jan-01)
    return datetime.today().strftime("%b-%d")

# 打印今天的日期
get_today(None)

from langchain_core.runnables import RunnableLambda, RunnablePassthrough

# 创建提示模板:列出{n}位生日在{today}的名人,并包含出生日期
prompt = PromptTemplate.from_template(
    "列出{n}位生日在{today}的名人。请包含他们的出生日期。"
)

# 构建链:将“today”字段通过RunnableLambda绑定到get_today函数,“n”字段直接透传
chain = (
    {
        "today": RunnableLambda(get_today), 
        "n": RunnablePassthrough()
    }
    | prompt
    | Qwen2_5_7B_Instruct_llm
    | StrOutputParser()
)
# 调用链,传入3,表示列出3位今天生日的名人
print(chain.invoke(3))

4. 使用特定itemgetter 提取特定键

itemgetter是Python operator模块中的一个实用函数,具有以下特性和优点:

  1. 核心功能
  • 高效地从字典、元组和列表中的特定键或索引中提取值

  • 能够同时提取多个键或索引

  • 支持函数式编程风格

  1. 性能优化问题
  • 对于重复的键访问操作,比常规索引更高效

  • 优化内存使用

  • 处理性能优势

  1. 在LangChain中的用法
  • 链组合中的数据过滤

  • 从复杂输入结构中选择性提取

  • 与其他Runnable对象组合进行数据预处理

# 导入必要的库
from operator import itemgetter

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableLambda
from langchain_openai import ChatOpenAI

Qwen2_5_7B_Instruct_llm = ChatOpenAI(
    temperature=0.1,  # 控制输出的随机性和创造性,值越低输出越稳定可预测,值越高输出越有创意但可能偏离预期 (范围: 0.0 ~ 2.0)
    model_name="Qwen/Qwen2.5-7B-Instruct",  # 硅基流动支持的模型名称
    openai_api_key=os.getenv("SILICONFLOW_API_KEY"),  # 从环境变量获取API密钥
    openai_api_base="https://api.siliconflow.cn/v1"  # 硅基流动API的基础URL
)

# 返回句子长度的函数
def length_function(text):
    return len(text)

# 返回两个句子长度乘积的函数
def _multiple_length_function(text1, text2):
    return len(text1) * len(text2)

# 使用_multiple_length_function函数计算两个句子长度的乘积
def multiple_length_function(_dict):
    return _multiple_length_function(_dict["text1"], _dict["text2"])

# 创建聊天提示模板
prompt = ChatPromptTemplate.from_template("What is {a} + {b}?")
# 初始化OpenAI聊天模型
model = Qwen2_5_7B_Instruct_llm

# 创建基础链
chain1 = prompt | model

# 创建复杂的处理链
chain = (
    {
        # 获取word1的长度
        "a": itemgetter("word1") | RunnableLambda(length_function),
        # 获取word1和word2长度的乘积
        "b": {"text1": itemgetter("word1"), "text2": itemgetter("word2")}
        | RunnableLambda(multiple_length_function),
    }
    | prompt
    | model
)

# 使用"hello"和"world"作为输入调用链
chain.invoke({"word1": "hello", "word2": "world"})
<think> 我们正在处理用户关于配置Qwen-agent以使用Qwen在线模型的问题。根据引用[1]、[2]、[3]、[4]和[5],我们可以总结出配置步骤。用户的需求是使用Qwen在线模型(通过API)而不是本地模型,因此我们需要配置Qwen-agent使用阿里云的在线API。 关键引用: - 引用[2]提到需要注册Qwen3 API-Key,并修改配置文件。 - 引用[5]给出了具体的配置示例,即修改`model_config.py`文件中的设置。 因此,配置步骤应该如下: ### 步骤1: 注册阿里云API-KEY 1. 访问阿里云灵积平台(DashScope)并注册账号。 2. 在控制台中创建API-KEY(具体步骤可参考引用[2]中提到的注册方法)。 ### 步骤2: 修改配置文件 根据引用[5],我们需要修改两个配置文件:`model_config.py`和`server_config.py`(注意:引用[5]中提到了这两个文件,但具体内容只展示了`model_config.py`的一部分)。 #### 修改`model_config.py` 在Qwen-Agent项目的配置文件中,找到`model_config.py`(通常在`qwen_agent`目录下),将在线模型配置部分修改为如下格式: ```python # 在model_config.py中修改或添加以下配置 ONLINE_MODEL = { "qwen-api": { "version": "qwen-turbo", # 可选值包括 "qwen-turbo", "qwen-plus" 等 "api_key": "你的API-KEY", # 替换为你在阿里云申请的API-KEY "provider": "QwenWorker", } } ``` #### 修改`server_config.py`(可选,用于服务部署) 如果是要启动一个服务(比如Web服务),可能还需要在`server_config.py`中指定使用在线模型。但根据引用[5]的上下文,这一步可能是可选的,具体取决于你的使用方式。通常,在`server_config.py`中,你需要指定使用的模型配置名称,例如: ```python # 在server_config.py中,设置使用的模型配置名称 MODEL = 'qwen-api' # 这个名称对应model_config.py中配置的键 ``` ### 步骤3: 运行代码时指定使用在线模型 在代码中,当你初始化Agent时,需要指定使用在线模型。例如,在开发一个自定义助手时,可以这样写: ```python from qwen_agent.agents import Assistant # 使用在线模型初始化助手 agent = Assistant(model='qwen-api') # 这里的'model'参数值对应配置中的键 # 进行对话 response = agent.run('你好') print(response) ``` ### 注意事项 - **确保网络连接**:使用在线模型需要能够访问阿里云的API服务。 - **API-KEY安全**:不要将API-KEY直接暴露在公开代码中,可以通过环境变量等方式传递(但在快速配置时,可以直接写入配置文件,注意不要上传到公开仓库)。 - **模型版本**:根据你的需求选择不同的模型版本,如`qwen-turbo`(速度较快)或`qwen-plus`(性能更强)。 ### 引用来源 以上步骤主要参考了引用[2]和引用[5]的内容,特别是关于API-KEY的申请和配置文件的修改[^2][^5]。 ### 相关问题 1. 如何获取阿里云灵积平台的API-KEY? 2. 除了qwen-turbo和qwen-plus,Qwen在线模型还有哪些版本可用? 3. 使用Qwen在线模型时,如何控制API调用的费用? 4. Qwen-agent如何同时支持本地模型和在线模型的切换? </think> ### Qwen-Agent 配置 API 使用 Qwen 在线模型的方法 根据引用内容,配置 Qwen-Agent 使用 Qwen 在线模型(通过阿里云 API)的步骤如下: #### 步骤 1: 获取 API Key 1. **注册阿里云账号** 访问 [阿里云灵积平台](https://dashscope.console.aliyun.com/) 并注册账号 2. **创建 API Key** - 进入控制台 → API 密钥管理 → 创建 API Key - 保存生成的 API Key(如 `sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`) #### 步骤 2: 修改配置文件 1. **编辑 `model_config.py` 文件** 在 Qwen-Agent 项目目录中,按引用[5]修改配置: ```python "qwen-api": { "version": "qwen-turbo", # 可选 "qwen-turbo" 或 "qwen-plus" "api_key": "sk-xxxxxxxxxxxx", # 替换为您的 API Key "provider": "QwenWorker" } ``` 2. **配置 `server_config.py`(可选)** 若需启动本地服务(如 Web UI),需设置服务端口: ```python PORT = 7860 # 指定服务端口 ``` #### 步骤 3: 调用在线模型 在代码中指定使用在线模型: ```python from qwen_agent.agents import Assistant # 初始化使用在线模型的助手 agent = Assistant(model='qwen-api') # 对应 model_config.py 中的配置名称 # 示例对话 response = agent.run('你好,介绍下你自己') print(response) ``` #### 验证是否成功 - 成功特征: - 响应速度较快(本地无模型加载过程) - 返回内容包含 `Qwen` 模型标识 - 在阿里云控制台可查看 API 调用记录[^2] #### 注意事项 1. **模型版本选择**: - `qwen-turbo`:响应速度最快,适合实时交互 - `qwen-plus`:能力更强,适合复杂任务[^5] 2. **费用说明**: - 新用户赠送免费额度(约 100 万 tokens) - 超出后按 `$0.005/千tokens` 计费(以控制台为准) 3. **网络要求**: - 确保能访问 `dashscope.aliyuncs.com` 域名 - 部署在境外服务器需配置代理 > 关键提示:使用在线模型无需本地 GPU 资源,但需稳定网络连接。详细文档参考 [Qwen-Agent 框架教程](https://qwen.readthedocs.io/zh-cn/latest/framework/qwen_agent.html)[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值