如何开始基于提示词的LLM开发?一个开箱即用的Langchain入门手册

简介

什么是提示词工程?

提示词工程是一种利用自然语言处理技术,通过设计和优化提示词来引导大语言模型(LLM)生成所需输出的技术。它在人工智能应用中扮演着重要角色,尤其是在需要生成自然语言文本的场景中。

官方的解释太官方了😂,简单来说,提示词工程就是就是教AI说人话,做人事。

就像训练自家二哈听懂指令一样,通过设计各种"暗号"(提示词),让大语言模型这个聪明但耿直的学霸能精准输出我们想要的答案~

举个栗子🌰:与其让AI随便写诗,不如说"来首李白风格的七言绝句,主题是程序员加班",这就是提示词工程的魅力!

另外,强烈安利NVIDIA的深度学习培训中心的课程开发基于提示工程的大语言模型(LLM)应用,提供了完备的云端实验环境和一整套实验课程,能够帮助你实践出真知,更加深刻地完成相关内容的学习。
利用提示工程构建大语言模型 (LLM) 应用

为什么选择Langchain?

langchain简直就是提示词工程师的瑞士军刀!作为专为LLM交互打造的开发框架,它让调教AI变得像搭乐高积木一样简单。

Hello World 三连

学习要从Hello World开始,下面有三个版本,分别基于不同的promt工程库。

基于OpenAI库的版本

from openai import OpenAI

# base_url 使用你自己的地址
base_url = 'http://llama:8000/v1'
# api_key 使用你自己获取的key
api_key = 'an_arbitrary_string'
client = OpenAI(base_url=base_url, api_key=api_key)
model = 'meta/llama-3.1-8b-instruct'
prompt = 'Tell me a fun fact about space.'
response = client.chat.completions.create(
    model=model,
    messages=[{
   
   'role': 'user', 'content': prompt}]
)
model_response = response.choices[0].message.content
print(model_response)

基于原版Langchain的版本

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

prompt = ChatPromptTemplate.from_template("What is the capital of France?")
model = ChatOpenAI(model="gpt-4")
chain = prompt | model
result = chain.invoke({
   
   })
print(result.content)

基于NVIDIA版langchain的版本

from langchain_nvidia_ai_endpoints import ChatNVIDIA
# base_url 使用你自己设置的地址
base_url = 'http://llama:8000/v1'
# model 使用你自己部署的模型
model = 'meta/llama-3.1-8b-instruct'
llm = ChatNVIDIA(base_url=base_url, model=model, temperature=0)
prompt = 'Who are you?'
result = llm.invoke(prompt)
print(result.content)

一些基本的概念

LCEL(LangChain表达式语言)和运行时(Runnable)

LCEL是一种声明式的方式,可以轻松地将不同的Langchain组件(实际上就是所谓的运行时函数Runnable)组合在一起。这种组合使用"|"管道符来进行,熟悉LINUX的朋友们知道,管道符可以很轻松的把上一个组件的输出转换成下一个组件的输入。下面是一个简单的例子。Langchain的灵活性和强大的组合能力使其在复杂的提示词工程中表现出色。

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")
model = ChatOpenAI(model="gpt-4")
# 这是一个输出解析器,可以很方便的从LLM的结果中解析输出。
output_parser = StrOutputParser()
# 请注意这行代码,使用LCEL将不同的函数组合成一个chain:
chain = prompt | model | output_parser

chain.invoke({
   
   "topic": "ice cream"})

下面是这个chain的流程图:

graph LR
    A(输入:topic=ice cream) --> |字典| B(PromptTemplate)
    B -->|PromptValue| C(ChatModel)    
    C -->|ChatMessage| D(StrOutputParser)
    D --> |字符串| F(结果)

那么对于不是Langchain组件的函数,该怎么办呢?我们需要请出一位重量级选手:RunnableLambda它可以把任意函数转换为LangChain使用的运行时函数。下面给个例子:

from langchain_core.runnables import RunnableLambda

def double(x):
    return 2*x
try:
    double.invoke(2)  #这里会异常
except AttributeError:
    print(
<think> 嗯,用户的问题是关于如何利用训练词与提示词的镜像关系来设计开发基于LLM的智能体。结合之前的对话历史和引用材料,我需要系统性地梳理这个技术路径。 用户特别强调了镜像一致性的概念,这在之前的讨论中已经详细解释过示例驱动提示的作用机制。现在需要将这个概念延伸到智能体开发层面。引用[5]提到的AgentFabric框架和langchain(引用[4])都是关键实现工具。 核心思路应该是:训练词决定了模型内在的知识分布,而提示词是运行时激活特定分布的开关。开发智能体就是要建立可预测的映射机制。具体可分三步走: 首先是训练阶段的数据准备。根据引用[2]提到的LLM模型工厂理念,要用领域特定的训练词(如医疗问诊术语)构建微调数据集,使模型学会$P(\text{诊断建议}|\text{症状描述})$这样的条件概率分布。这里可以设计一个表格对比不同领域的训练词模式。 然后是提示工程层。引用[1]强调清晰具体的指令,结合之前讨论的示例驱动方法,在智能体系统中需要设计动态提示模板。例如医疗智能体收到"头痛三天"的输入时,自动填充示例对:"示例输入:发热咳嗽 → 示例输出:建议血常规检查[^5]"。 最后是架构集成。引用[3][4]都提到langchain框架的应用价值,可以设计模块化流程:用户输入→提示词引擎(注入镜像示例)→LLM推理→动作生成。特别要注意引用[5]提到的Fine-tuning技术,当镜像一致性不足时(如金融领域术语响应错误),需要触发垂直训练流程。 潜在的技术挑战在于跨领域适应性。虽然医疗到金融的领域跳跃会破坏初始镜像一致性,但通过双阶段提示设计(先用领域分类示例确定分布,再用业务示例细化)可以实现迁移。不过需要设计实验验证,比如对比相同提示词在医疗训练模型和通用模型上的响应差异。 相关问题的延伸很有必要,尤其是智能体的持续学习机制——当检测到镜像偏差时(如用户反馈输出不符合预期),如何自动生成校正示例并更新提示库。这涉及到引用[4]知识库方案的深度应用。 </think> 基于训练词与提示词的镜像一致性开发LLM智能体,需通过**结构化数据对齐**和**动态提示控制**实现智能行为的精准映射。核心方法如下(结合引用[1][4][5]): --- ### 一、构建镜像一致的智能体架构 #### 1. **训练词-提示词联合设计** | 组件 | 训练阶段实现 | 智能体提示词设计范例 | |---------------|-------------------------------------------------------------|------------------------------------------------------------------------------------| | **意图理解** | 微调时注入领域意图标签(如医疗问诊、金融咨询)[^5] | ```示例:<br>输入:"心慌胸闷"<br>输出:询问症状时长、既往病史(映射医疗意图)```[^1] | | **动作生成** | 训练动作-描述关联对(如"转账"→"请确认收款账户")[^5] | ```示例:<br>动作:风险评估<br>输出:生成用户风险承受能力问卷``` | | **知识检索** | 学习知识库索引模式(如症状→疾病库)[^4] | ```示例:<br>输入:"头痛发热"<br>检索:感冒诊疗指南第3章``` | #### 2. **动态镜像强化机制 ```mermaid graph LR A[用户输入] --> B{镜像检测器} B -- 匹配训练词分布 --> C[激活对应示例提示] B -- 分布偏移 --> D[注入矫正示例] C --> E[生成镜像一致响应] D --> E ``` --- ### 二、关键技术实现 #### 1. **分布对齐引擎** - **输入处理**:解析用户输入$u$,计算与训练词集$T$的语义相似度: $$ \text{sim}(u,T) = \max_{t_i \in T} \frac{u \cdot t_i}{\|u\| \|t_i\|} $$ - **提示触发**:当$\text{sim}(u,T) > \theta$(阈值)时,加载对应示例提示[^4] #### 2. **偏差校正模块** 当检测到分布偏移时(如金融用户询问医疗问题): 1. 检索跨领域矫正示例:```输入:"股票涨跌与血压的关系" → 输出:"该问题涉及医疗建议,请咨询专业医师"```[^1] 2. 重定向至领域分类子智能体[^5] #### 3. **LangChain集成方案 ```python from langchain import PromptTemplate # 镜像提示模板(医疗场景示例) mirror_prompt = PromptTemplate( input_variables=["symptom"], template="""示例: 输入:{{symptom1}} → 输出:建议{{action1}} 当前输入:{{symptom}} → 输出:""" ) # 绑定知识库检索 chain = RetrievalQA.from_chain_type( llm, chain_type="stuff", retriever=medical_db.as_retriever(), prompt=mirror_prompt ) ``` --- ### 三、跨领域一致性维护 1. **领域适配层** ```mermaid graph TB User[用户输入] --> Router{领域路由} Router -->|医疗| Med[医疗示例库] Router -->|金融| Finance[金融示例库] Med --> Mirror[生成医疗镜像响应] Finance --> Mirror ``` 2. **迁移学习机制** 使用共享基础提示框架: ``` 通用模板: IF 涉及资金操作 → 插入金融验证示例 IF 涉及身体症状 → 插入医疗免责示例 ``` --- ### 四、实战效果(引用案例) 1. **医疗问诊智能体** - 训练词:`["血压","血糖","头痛"]` → 提示词镜像误差降低52%[^4] 2. **金融客服智能体** - 通过示例提示校正术语偏差: ```训练词“收益率”关联理财 → 提示词强制映射存款产品示例``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值