你好,我是方可乐。
一个正在深耕AI编程的30+的AI应用开发工程师。
实战过多个AI应用开发框架,自主开发过多个AI应用产品
昨天我们讲了怎么在命令行里面,和 AI 持续对话。
一些眼尖的同学已经开始思考了:
为什么 LangChain 封装了 HumanMessage、AIMessage、SystemMessage**?**
其实这三个东西,恰恰就是我们和 AI 沟通的提示词核心。
- • HumanMessage,代表用户说了什么。
- • AIMessage,代表 AI 回答过什么。
- • SystemMessage,代表我们给 AI 下的背景设定。
如果你用过原生 API,就会发现它们本质上就是
role = "user"、role = "assistant"、role = "system"
只是 LangChain 做了一层封装,让写法更直观。
为什么要有这层封装?
因为一旦对话变长,光靠 "role": "user" 这种写法,眼睛很容易花。
但如果换成 HumanMessage / AIMessage / SystemMessage,
一眼就能分清楚谁说了什么,哪段是设定,哪段是回答。
像我有点点代码洁癖,看到这种封装得很统一的格式,就觉得很“优雅”。
至少在视觉上,给人不错的阅读体验。
下面,老规矩,给大家看看原生版本和langchain版本的区别。
今天的代码和昨天的其实差不多的。
原生版本,新建文件03_chat_message.py
import os
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("deepseek_api_key"), base_url="https://api.deepseek.com/v1")
# 系统设定
messages = [
{"role": "system", "content": "你是一个 AI 助手"}
]
while True:
user_input = input("你:")
if user_input.lower() in ["exit", "quit", "退出"]:
break
# 用户发言
messages.append({"role": "user", "content": user_input})
# 调用大模型
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages
)
ai_reply = response.choices[0].message.content
print("AI:", ai_reply)
# AI 回答
messages.append({"role": "assistant", "content": ai_reply})
langchain版本,新建文件03_chat_message_langchain.py
import os
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, AIMessage, SystemMessage
from dotenv import load_dotenv
load_dotenv()
llm = ChatOpenAI(
api_key=os.getenv("deepseek_api_key"),
base_url="https://api.deepseek.com/v1",
model="deepseek-chat",
temperature=0.7
)
# 系统设定
messages = [SystemMessage(content="你是一个 AI 助手")]
while True:
user_input = input("你:")
if user_input.lower() in ["exit", "quit", "退出"]:
break
# 用户发言 → HumanMessage
messages.append(HumanMessage(content=user_input))
# 调用大模型
response = llm.invoke(messages)
print("AI:", response.content)
# AI 回答 → AIMessage
messages.append(AIMessage(content=response.content))
虽然现在功能比较简单,代码行数看着差不多,但是langchain这个写法在后面有大用。
特别是在做记忆管理和RAG的时候,更加高效。
而且,原生写法靠 "role",读起来很累。
LangChain 封装了 Human / AI / SystemMessage。 代码一眼就能分清身份,谁提供了什么提示词。
对AI应用开发感兴趣的同学,欢迎加微信申请入群交流学习。
想要学习AI应用开发的同学,可以参照我的代码跑起来,举一反三,一天一个脚印的进步,我相信,会足够坚实。
如果你也想了解AI应用开发到底是什么,如果你也在考虑转型但还在犹豫,
那就跟着我的记录,一起探索。
继续折腾中,有问题随时交流 🤝
微信号:ThinkFun666