LangChain

一、AI提示词编写技巧

1.CO-STAR结构化框架

模块 说明 示例
Context 任务背景与上下文 你是电商客服,需解答⽤⼾关于iPhone17的咨询,知识库包含最 新价格和库存"
Objective 核心目标 "准确回答价格、发货时间,推荐适配配件"
Steps 执行步骤 "1.识别⽤⼾问题类型;2.检索知识库;3.⽤亲切语⽓整理回复"
Tone 语言风格 "⼝语化,避免专业术语,使⽤'亲~''呢'等语⽓词"
Audience 目标用户 20-35岁年轻消费者,对价格敏感,关注性价⽐"
Response 输出格式 "价格:XXX元\n库存:XXX件\n推荐配件:XXX(链接)"

2.少样本提⽰/多⽰例提⽰

核⼼思想:你不是在给它下指令,⽽是在"教"它你想要的格式、⻛格和逻辑。

适⽤场景:格式固定、⻛格独特、逻辑复杂的任务,如⻛格仿写、数据提取、复杂格式⽣成。

再例如: 优化前(零样本提⽰): 请分析以下客⼾反馈,提取产品名称、情感倾向和具体问题。 反馈:"我刚买的⽿机,才⽤了⼀周左边就没声⾳了,太让⼈失望了。"

优化后(少样本提⽰): 请根据以下⽰例,分析后续的客⼾反馈,并提取产品名称、情感倾向和具体问题。

⽰例1: • 反馈:"笔记本的电池续航太差了,完全达不到宣传的10⼩时,最多就4⼩时。"

• 分析:

◦ 产品名称:笔记本电池

◦ 情感倾向:负⾯

◦ 具体问题:续航远低于宣传

⽰例2: • 反馈:"客服响应很快,⾮常专业地帮我解决了软件激活问题,点赞!"

• 分析:

◦ 产品名称:客服服务

◦ 情感倾向:正⾯ ◦ 具体问题:⽆ 现在请分析这个:

• 反馈:"我刚买的⽿机,才⽤了⼀周左边就没声⾳了,太让⼈失望了。"

3.思维链提⽰

• Few-shot-CoT:少样本思维链

• Zero-shot-CoT:零样本思维链

相⽐于少样本提⽰(Few-shot),少样本思维链(Few-shot-CoT)的不同之处只是在于需要在提⽰样 本中不仅给出问题的答案、还同时需要给出问题推导的过程(即思维链),从⽽让模型学到思维链的 推导过程,并将其应⽤到新的问题中。此技巧主要⽤于解决复杂推理问题,如数学、逻辑或多步骤规划。

核⼼思想:要求AI"展⽰其⼯作过程",⽽不是直接给出最终答案。这模仿了⼈类解决问题时的思考 ⽅式。

4.⾃动推理与零样本链式思考

零样本思维链(Zero-shot-CoT)这是少样本思维链(Few-shot-CoT)的简化版。只需在提⽰词末尾加上⼀句魔法短语,即可激发AI的推理能⼒。

核⼼思想:通过指令"请⼀步步进⾏推理并得出结论",强制AI在给出答案前先进⾏内部推理。

**适⽤场景:**任何需要⼀点逻辑思考的问题,即使你不太清楚具体步骤。

例如:

罗杰有五个⽹球,他⼜买了两盒⽹球,每盒有3个⽹球,请问他现在总共有多少个⽹球?请⼀步步进⾏推理并得出结论。

5.自我批评与迭代

要求AI在⽣成答案后,从特定⻆度对⾃⼰的答案进⾏审查和优化。

**核⼼思想:**将"⽣成"和"评审"两个步骤分离,利⽤AI的批判性思维来提升内容质量。

**适⽤场景:**代码审查、⽂案优化、论证强化、安全检查。

优化前:写⼀个Python函数,计算列表中的最⼤值。

优化后:

请执⾏以下两个步骤:

步骤⼀:编写代码写⼀个Python函数find_max,⽤于计算⼀个数字列表中的最⼤值。

步骤⼆:⾃我审查与优化

现在,请从代码健壮性和可读性的⻆度,审查你上⾯编写的代码。请回答:

1.如果输⼊是空列表,函数会怎样?如何改进?

2.变量命名和代码结构是否清晰?能否让它更易于理解?

3.请根据你的审查,给出⼀个优化后的最终版本。

总结

在实际应⽤中,这些技巧常常是组合使⽤的。例如,我们可以:

1.使⽤CO-STAR框架设定基本结构和⻆⾊。

2.在框架的"Steps"或"Response"部分,融⼊思维链指令。

3.对于格式复杂的输出,在最后附上少样本⽰例。

4.最后,要求AI进⾏⾃我审查。

二、大语言模型的调用

1.定义模型

python 复制代码
import os
from langchain_openai import ChatOpenAI
#定义模型  以deepseek为例
model = ChatOpenAI(
    model="deepseek-chat",
    base_url="https://api.deepseek.com",
    api_key=os.environ["DEEPSEEK_API_KEY"]
)

2.定义消息

python 复制代码
from langchain_core.messages import SystemMessage, HumanMessage
#定义消息列表
message = [
    #系统消息
    SystemMessage(content = "将下面这段英文转换成中文"),
    #人为消息
    HumanMessage(content = "HELLO WORLD")
]

3.把消息传递给大模型进行调用

python 复制代码
print(model.invoke(message))

返回结果:

python 复制代码
content='你好,世界' additional_kwargs={'refusal': None} 
response_metadata={'token_usage': {'completion_tokens': 3,'prompt_tokens': 14,'total_tokens': 17, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 14}, 'model_provider': 'openai', 'model_name': 'deepseek-chat', 'system_fingerprint': 'fp_eaab8d114b_prod0820_fp8_kvcache_new_kvcache', 'id': '4d2ae1bc-66c4-49e7-b15a-12bd8a10068a', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--019d72ac-af93-70f1-a458-6830b62d1f4a-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 14, 'output_tokens': 3, 'total_tokens': 17, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}}

content中的内容就是真正的文本信息

AIMessage :来⾃AI的消息。从聊天模型返回,作为对提⽰(输⼊)的响应。

content :消息的内容。

additional_kwargs :与消息关联的其他有效负载数据。对于来⾃AI的消息,可能包括模型提供程序编码的⼯具调⽤。

response_metadata :响应元数据。例如:响应标头、logprobs、令牌计数、模型名称。 侧重于"响应"本⾝的信息,⽐如这次请求的ID、使⽤的模型版本、以及服务提供商返回 的所有原始元数据。它主要⽤于调试、⽇志记录和获取请求的上下⽂信息。

usage_metadata :消息的使⽤元数据,例如令牌计数。 ▪ 侧重于"资源消耗"的量化信息,即这次请求消耗了多少Token。它主要⽤于成本计算、 监控和预算控制。

4.输出解析

将大模型返回的消息解析成文本字符串

python 复制代码
result = model.invoke(message)

from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
print(parser.invoke(result))

5.链式执行

把大模型和输出解析器作为一个链进行调用

python 复制代码
chain = model | parser
print(chain.invoke(message))

Runnable接口

Runnable 接⼝是使⽤ LangChain Components(组件)的基础
Runnable 定义了⼀个标准接⼝,允许 Runnable 组件:
Invoked(调⽤): 单个输⼊转换为输出。
Batched(批处理): 多个输⼊被有效地转换为输出。
Streamed(流式传输): 输出在⽣成时进⾏流式传输。
Inspected(检查): 可以访问有关 Runnable 的输⼊、输出和配置的原理图信息。
spected(检查): 可以访问有关 Runnable 的输⼊、输出和配置的原理图信息。
Composed(组合): 可以组合多个 Runnable,以使⽤ LCEL 协同⼯作以创建复杂的管道
语言模型(model)、输出解析器(StrOutputParser)都是Runnable接口的实例,都是用了invoke的调用能力,所以二者可以组成链式调用
chain = model | parser 相当于 chain = RunnableSequence(first=model, last=parser)
相等于 chain = model.pipe(parser)
LCEL 其实是⼀种编排解决⽅案,它使 LangChain 能够以优化的⽅式处理链的运⾏时执
⾏。任何两个 Runnable 实例都可以"链"在⼀起成序列。上⼀个可运⾏对象的 .invoke() 调⽤
的输出作为输⼊传递给下⼀个可运⾏对象。

三、聊天模型的核心能力

1.定义聊天模型

ChatOpenAI

参数名 参数描述
model 要使用的OpeanAI模型的名称
temperature 采样温度,温度值越高,AI回答越天马行空;温度越低
max_tokens 要生成的最大令牌数
timeout 请求超时时间
max_retries 最大重试次数
openai_api_key/api_key API密钥,直接传入/从环境变量中读取
base_url api请求的基本url
organization OpenAI 组织 ID。如果未传⼊,将从 env var OPENAI_ORG_ID 中读取。
python 复制代码
model = ChatOpenAI(
    model="deepseek-chat",
    #temperature  温度   温度越高,回答的答案越天马行空  温度越低 答案越保守
    # 0 完全确定  事实求是,代码生成
    # 0.1-0.5 轻微变化 技术文档 写作
    #0.5-1 平衡创意  对话、稍微创意的写作
    #1-2  高度随机  用于创意性创作、灵感激发
    temperature=1,

    #最大token数    token衡量文本的基本单位(自然语言处理)
    # 对于英文:1个token 约等于 4个字符或0.75个单词
    #对于汉字 1个汉字约等于 1.5-2 个token
    max_tokens=40,

    #请求超时时间
    timeout=None,

    #最大重试次数
    max_retries=2,

    #调用ai的前置url
    base_url="https://api.deepseek.com",

    #output_version=    ai的组织IA

    api_key=os.environ["DEEPSEEK_API_KEY"],
)

init_chat_model

inint_chat_model()参数说明

参数名 参数描述
model 要使用的模型名称
model_provider 模型提供⽅。⽀持的 model_provider 值和相应的集成包有: • openai -> langchain-openai • anthropic -> langchain-anthropic • google_genai -> langchain-google-genai • ollama -> langchain-ollama • deepseek -> langchain-deepseek • ... 如果未指定,将尝试从模型推断 model_provider。
configurable_fields 设置哪些模型参数是可配置的。若配置为: • None: 没有可配置的字段。 • 'any' :所有字段都是可配置的,类似 api_key 、 base_url 等可 以在运⾏时更改。 • Union[List[str], Tuple[str, ...]]:指定的字段是可配置的。
config_prefix • 配置为⾮空字符串,则模型将在运⾏时通过查找 config["configurable"]["{config_prefix}_{param}"] 字段 设置配置项 。 • 配置为空字符串,那么模型将可以通过 config["configurable"][" {param}"] 字段设置配置项 。
temperature 采样温度,温度值越⾼,AI 回答越天⻢⾏空;温度越低,回答越保守靠谱。
max_tokens 要生成的最大令牌数
timeout 请求超时时间
max_retries 最大重试次数
openai_api_key/api_key OpenAI API密钥。如果未传入,将从环境变量中读取OPENAI_API_KEY
base_url API请求的基本URL

1.普通调用

python 复制代码
from langchain.chat_models import init_chat_model

model = init_chat_model(model="deepseek-chat", model_provider="deepseek")

print(model.invoke("你是谁"))
python 复制代码
content='你好!我是DeepSeek,由深度求索公司创造的AI助手!😊\n\n我是一个纯文本模型,虽然不支持多模态识别功能,但我有文件上传功能,可以帮你处理图像、txt、pdf、ppt、word、excel等文件,并从中读取文字信息进行分析处理。\n\n我的一些特点:\n- 完全免费使用,没有收费计划\n- 上下文长度达128K,可以处理很长的对话\n- 支持联网搜索(需要你在Web/App中手动点开联网搜索按键)\n- 可以通过官方应用商店下载App使用\n- 知识截止到2024年7月\n\n我很乐意帮助你解答问题、处理文档、进行对话交流等等!有什么我可以帮你的吗?无论是学习、工作还是日常问题,我都很愿意协助你!✨' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 166, 'prompt_tokens': 5, 'total_tokens': 171, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 5}, 'model_provider': 'deepseek', 'model_name': 'deepseek-chat', 'system_fingerprint': 'fp_eaab8d114b_prod0820_fp8_kvcache_new_kvcache', 'id': 'c3cccfab-e54f-43be-802c-9ffe239932d6', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--019d7567-38c9-7671-aa80-158e7684224e-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 5, 'output_tokens': 166, 'total_tokens': 171, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}}

2.创建可配置模型

python 复制代码
from langchain.chat_models import init_chat_model
from langchain_core.messages import SystemMessage, HumanMessage

model = init_chat_model(temperature=0)

message = [
    SystemMessage(content="请补全一段故事"),
    HumanMessage(content="我来自__")
]

# 内置支持 配置 model 和 model_provider  其他参数想配置需要提前说明
print(model.invoke(input=message, config={
    "configurable": {"model":"deepseek-chat"}
}).content)

3.具有默认值的可配置模型

python 复制代码
from langchain.chat_models import init_chat_model
from langchain_core.messages import SystemMessage, HumanMessage

model = init_chat_model(
    temperature=0,
    max_tokens=10,
    configurable_fields=("max_tokens", "model")
)

message = [
    SystemMessage(content="请补全一段故事"),
    HumanMessage(content="我来自__")
]

# 内置支持 配置 model 和 model_provider  其他参数想配置需要提前说明
#但是如果 init_chat_model 配置了  configurable_fields 也需要指定 model是可配置的
print(model.invoke(input=message, config={
    "configurable": {"model":"deepseek-chat", "max_tokens":30}
}).content)
相关推荐
橙子不要熬夜2 小时前
基于 NestJS + LangChain 的 AI 流式对话实战
langchain·openai
PD我是你的真爱粉3 小时前
LangChain 与 LangGraph 完全指南:核心组件、架构原理、编排机制与 LlamaIndex 集成
算法·架构·langchain
PD我是你的真爱粉3 小时前
AI Agent 完全指南:LangChain Agent、ReAct、Copilot-Agent 模式、Manus、Computer Use 与记忆机制
人工智能·react.js·langchain
怕浪猫4 小时前
第11章 内存机制:让模型记住对话历史(LangChain实战)
langchain·aigc·ai编程
疯狂成瘾者4 小时前
抽象类 vs 具体实现类的关系
python·langchain
FserSuN13 小时前
LangChain DeepAgent 多 Agent 架构原理学习
架构·langchain
前进的李工16 小时前
LangChain使用AI工具赋能:解锁大语言模型无限潜力
开发语言·人工智能·语言模型·langchain·大模型
杨艺韬18 小时前
为什么需要理解 LangChain
langchain·agent
坤岭18 小时前
大模型“入侵”广告推荐
人工智能·langchain·推荐算法