兄弟们!今天发现了个巨好玩的东西!langchain和阿里的大模型居然能玩出花!我用Python搓了个聊天机器人(终端),不仅能文绉绉像朱自清写散文,还能自动给你人生建议!效果堪比电子算命!(附完整代码+效果图)
先上镇楼代码!(小白也能玩)
# 开导
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage, SystemMessage, AIMessage
# 配置大语言模型
# 使用qwen-max-2025-01-25(注意模型名称需与实际可用版本一致)
chatLLM = ChatTongyi(
model="qwen-max-2025-01-25", # 模型版本号需参照官方最新文档
api_key="你的api key", # 替换为真实API密钥
)
# 初始化对话系统消息
# 使用三重引号保持多行提示词格式
# 包含风格限定和结构化输出要求
system_prompt = """模仿朱自清散文风格,回答需包含:
1. 正式回答(不少于100字)
2. 空一行后按以下格式输出建议(同上风格):
建议:
① ...
② ...
③ ..."""
# 将系统消息添加都消息列表
messages = [SystemMessage(content=system_prompt)]
# 生成初始化问候语
# 使用invoke同步调用获取开场白
opening = chatLLM.invoke([HumanMessage(content="随机生成一句开场白")])
messages.append(AIMessage(content=opening.content)) # 维护对话历史
print(f"\nAI:{opening.content}")
# 主对话循环
while True:
# 获取用户输入(包含退出条件检测)
user_input = input("\n你:")
if user_input.lower() in ["exit", "quit"]:
break
# 更新对话上下文
messages.append(HumanMessage(content=user_input))
# 准备流式输出
print("\nAI:", end="", flush=True)
full_response = []
# 流式响应处理
# 使用stream()实现逐字输出效果
for chunk in chatLLM.stream(messages):
content = chunk.content
print(content, end="", flush=True) # 实时输出
full_response.append(content)
# 保存完整响应到历史记录
messages.append(AIMessage(content="".join(full_response)))
(模型名称可以自己指定,而且还需要自己填API Key哈, 具体参考大模型服务平台百炼文档,祝我们学习愉快!)
这代码牛在哪?
- 文豪附体模式:系统消息里直接让AI模仿朱自清,实测生成的小作文真的会写"曲曲折折的荷塘上面…"那种调调!
- 人生导师Buff:每次回答必带3条建议,上次我问"暗恋同学怎么办",AI居然让我"如初春的晨露般静待花开"(笑死)
- 实时打字效果:stream流式输出!看着AI一个字一个字往外蹦贼有感觉(跟真人网恋似的)
实测效果炸裂
当我输入"今天跟宿舍农药battle输了 ":
AI先来一段100多字的散文安慰,什么 "游戏的胜负本就是一场笑谈,虽败犹荣。那一局局紧张刺激的“农药”之争,不正如人生中的小插曲吗?胜败不过一时,而其中的欢声笑语、团队默契才是最珍贵的收获…" ,然后骚操作来了居然还有建议↓
建议:
① 与其纠结失败,不如复盘总结经验,下次再战方能更有底气。
② 和舍友一起享受游戏的过程比结果更重要,珍惜这份共同度过的欢乐时光。
③ 若觉得疲惫,不妨暂时放下手机,抬头看看窗外的星空,也是一种别样的放松方式。
(有图有真相)
视频演示(好像有点模糊)
食用指南
- 建议把SystemMessage改成其他文风(试过鲁迅体,AI直接回"大抵是倦了")
- 流式响应可能会卡顿,各位老爷忍一忍,我会继续努力学习的改善代码(偷偷卷去)
- 重要提醒!别拿这代码去舍友面前炫!上次我去给舍友看代码并运行展示成果,结果周末时间全部被拉去打游戏了。(我们要偷偷卷,别被发现啦)
最后说两句
这玩意儿背着舍友写的,不过还好写完了,要是被舍友拉去打游戏,那可是完蛋!其实通义千问的API超便宜,而且新用户白嫖额度够玩一个月。代码直接复制就能跑,有不懂的尽管问!
(溜了溜了,再不关pycharm又被舍友发现了T_T)