开发基于提示工程的大语言模型(LLM)应用——学习笔记

本文是学习笔记。学习通过提示工程与大语言模型进行程序化的交互。

将从最基本的开始,比如使用哪些模型,以及如何向它们发送提示词并查看响应。

将逐步构建更复杂的提示词,并学习 LangChain 为我们提供的、用于与大语言模型交互的丰富工具。

Langchain链核心是运行时(runnable),它们能以多种方式组合的为工作流。

如何创建 LangChain 链

复制代码
 from langchain_nvidia_ai_endpoints import ChatNVIDIA
 from langchain_core.prompts import ChatPromptTemplate
 from langchain_core.output_parsers import StrOutputParser
 ​
 #创建模型实例
 base_url = 'http://llama:8000/v1'
 model = 'meta/llama-3.1-8b-instruct'
 llm = ChatNVIDIA(base_url=base_url, model=model, temperature=0)
 ​
 #Langchain运行时
 template = ChatPromptTemplate.from_template("Answer the following question: {question}")
 prompt = template.invoke({"question": "In what city is NVIDIA world headquarters?"})
 ​
 response = llm.invoke(prompt)
 print(response.content)

LangChain 表达语言(LCEL)

LCEL 用一种声明式的方法将运行时组合成链 :可复用的功能组合。我们通过 LCEL 的管道 | 操作符将运行时链接在一起,从高层次来看,就是将一个运行时的输出传递给下一个。

对于那些使用过 Unix 命令行的朋友来说,您会熟悉 | 操作符,它是将各种程序的功能链接在一起以服务于整体任务的一种方式。

如果您对 Bash 不是很了解,不用太担心下面的单元。但对于了解的朋友,您会看到我们通过管道操作符创建了一个链,用 echo 打印"hello pipes",用 rev 反转字符串,然后用 tr 转为大写。

复制代码
 %%bash
 echo hello pipes | rev | tr 'a-z' 'A-Z'

同样,我们也可以用 LCEL 的管道操作符将许多 LangChain 的功能方便地链接在一起。

一个简单的链

让我们从一个简单的链开始,这与您之前的工作相关。为了方便查看,我们将再次在这里定义 LLM 实例和一个提示模板。

复制代码
 llm **=** ChatNVIDIA(base_url**=**base_url, model**=**model, temperature**=**0)
 template **=** ChatPromptTemplate.from_template("Answer the following question: {question}")

现在我们将通过管道将这两个组合在一起,创建我们的第一个 LCEL 链。一般来说,应该先经过提示模板,然后将生成的提示词发送给 LLM,因此我们将在管道中先放置模板。

复制代码
 chain = template | llm

可以使用链的辅助方法来可视化由 chain 表示的计算图。

复制代码
 print(chain.get_graph().draw_ascii())

如您所见,链将期待一个 PromptInput,这个输入将被传递到 ChatPromptTemplate 中,然后再传递到 ChatNVIDIA 模型,最终生成 ChatNVIDIAOutput。

此外,我们还可以规定链所期望的输入类型,这次使用一个不同的辅助方法。

复制代码
 chain.input_schema.schema()

上面是一个 Pydantic 对象,我们现在不会深入探讨,但您会立即注意到它的 required 字段明确指出了我们需要传递给 chain 的任何属性名称。

链是由运行时组成的,但它们自己也是运行时。因此,就像我们对待任何其它运行时一样,可以使用其 invoke 方法。

我们知道链的开始部分需要一个提示输入,而提示模板希望我们为 question 提供一个值,因此我们将在调用链时提供预期的值。

持续更新中,未完待续。。。

相关推荐
在所不辞兄11 小时前
【零基础学智能仿真-53】多智能体协作——有限元自动化实战从工程需求到可审核的仿真报告
人工智能·深度学习·神经网络·机器学习·有限元
张张123y12 小时前
后端第一课:输入 URL 后发生了什么?我用手写 Socket 把全链路跑通了
python·websocket·ai·socket·url·后端开发
AI Coder 码农王13 小时前
AgentScope Java v2 第3课,从 ReActAgent 到 HarnessAgent
人工智能
格物致胜工业数智技术13 小时前
明治EOS系列传感器技术解析:精密制造高反光金属件在位检测
人工智能·制造
甲维斯14 小时前
DeepSeek 新版还是难评!
人工智能
晨间晓14 小时前
图片细节丰富不丰富?用华为云码道开发 OpenCV 纹理复杂度分析工具
人工智能·opencv·华为云
全栈弄潮儿14 小时前
Python实战第7期:字典与集合
后端·python·编程语言
2603_9651481114 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
镜象科技14 小时前
什么是好的校园AI心理健康解决方案服务商?从中外校园心理服务的一天说起
人工智能
Geeys14 小时前
拼多多单品推广完整方案(可直接落地)
大数据·人工智能