当前位置: 首页 > news >正文

连接语言大模型(LLM)服务进行对话

1. 引言

最近开始接触AI大模型方向的工作,第一个实例就尝试一下连接大模型进行对话的实现。

2. 实现

2.1 openai模块

要实现这个功能很简单,直接翻各大模型平台的给的API案例一般都可以实现,例如笔者这里使用的阿里云的百炼平台给出的API:

from openai import OpenAIclient = OpenAI(# 使用大模型对应的Keyapi_key = "sk-xxx",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)completion = client.chat.completions.create(model="deepseek-r1",  # 此处以 deepseek-r1 为例,可按需更换模型名称。messages=[{'role': 'user', 'content': '想快速入门AI大模型,给我推荐一下具体的学习方案。'}]
)# 通过reasoning_content字段打印思考过程
print("思考过程:")
print(completion.choices[0].message.reasoning_content)# 通过content字段打印最终答案
print("最终答案:")
print(completion.choices[0].message.content)

我这里使用的大模型是deepseek,但是使用的是openai模块。这是因为现在的大模型服务基本都兼容OpenAI API标准的接口,因此可以通过设置不同的base_url和api_key来使用相同的openai Python客户端库进行访问。这也是为啥现在大模型平台都可以选择接入不同的大模型来实现AI应用。

除了Python接口,阿里云百炼平台还提供了Node.js和HTTP的接入方式,理论上可以前端、后端、移动端以及桌面端都可以连入大模型来实现自己的AI应用。messages=[{'role': 'user', 'content': '想快速入门AI大模型,给我推荐一下具体的学习方案。'}]就是大模型的提示词,通过更改提示词,可以与大模型对话来得到自己想要的结果。

2.2 LangChain

除了使用openai模块,使用LangChain是个更好的选择。LangChain是一个构建于大型语言模型(LLMs)之上的框架,提供了一系列的工具和接口来简化与这些模型交互的过程。如下所示:

# 初始化模型
chat = ChatOpenAI(model_name="deepseek-r1",temperature=0,base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", #服务地址api_key="sk-xxx"  #API密钥
)# 发送请求
response = chat.invoke([HumanMessage(content="请用中文介绍你自己。")])# 输出结果
print(response.content)

为什么说LangChain更好用一点呢,比如说你要执行批量任务,对一些文本进行多标签分类,那么可能需要进行批量提问以提升效率。在这方面LangChain提供了batch接口:

from langchain_openai import ChatOpenAIllm_client = ChatOpenAI(temperature=0.0,model_name="deepseek-r1",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",api_key="sk-852da921b11545c99de697e584210fc7"
)# 假设你的多标签集合如下:
total_class = {"正面", "负面", "价格问题", "物流问题", "推荐", "外观设计", "用户体验"}# 系统提示词
system_prompt = """你是一个多标签分类助手,请从以下标签中选出适用于文本的所有标签(可以多选):
正面, 负面, 价格问题, 物流问题, 推荐, 外观设计, 用户体验只输出标签,多个标签之间用英文逗号分隔。如果无法判断,则返回空字符串。
"""def llm_labeling(texts: list[str]) -> list[list[str]]:"""对输入文本列表进行多标签打标,返回每条文本对应的标签列表。"""results = []batch_inputs = [system_prompt + '\n' + t for t in texts] res = llm_client.batch(batch_inputs)for item in res:content = item.content.strip()if not content:results.append([])continue# 解析逗号分隔标签,清洗一下tags = [t.strip() for t in content.split(',')]# 只保留在 total_class 中的合法标签tags = [t for t in tags if t in total_class]results.append(tags)return resultstexts = ["这个产品非常好用,值得推荐","物流速度太慢了,体验不好","外观漂亮,使用方便,就是价格稍贵"
]result = llm_labeling(texts)
for i, tags in enumerate(result):print(f"第{i+1}条: 标签 = {tags}")

运行结果如下:

第1条: 标签 = ['正面', '推荐', '用户体验']
第2条: 标签 = ['负面', '物流问题', '用户体验']
第3条: 标签 = ['正面', '外观设计', '用户体验', '价格问题']

其实deepseek不一定真的支持批量提问的接口,即使真的不支持,LangChain为我们提供了抽象层,在内部进行并发处理。当然,如果有的大模型提供batch接口,LangChain就会直接调用它。

2.3 其他

在阿里的百炼平台上还提供了“多轮对话”和“流式输出”的使用方式。这两种方式是构建AI Chat应用必须的。“多轮对话”就是需要让大模型记住之前的对话内容,也就是上下文,以便得到更好的输出;“流式输出”则是让大模型的回答逐步渐进的输出,一个字一个字的呈现,以便让AI Chat应用的交互性更好。不过笔者暂时不关心这个,以后有机会再试用一下。

http://www.lryc.cn/news/594456.html

相关文章:

  • GaussDB select into和insert into的用法
  • 机器学习基础:从数据到智能的入门指南
  • python生成密钥
  • Self-Consistency:跨学科一致性的理论与AI推理的可靠性基石
  • An End-to-End Attention-Based Approach for Learning on Graphs NC 2025
  • JAVA面试宝典 -《API设计:RESTful 与 GraphQL 对比实践》
  • 《通信原理》学习笔记——第五章
  • 【1】YOLOv13 AI大模型-可视化图形用户(GUI)界面系统开发
  • Openlayers 面试题及答案180道(121-140)
  • 让不符合要求的任何电脑升级Windows11
  • 【LeetCode数据结构】单链表的应用——环形链表问题详解
  • WireShark抓包分析TCP数据传输过程与内容详解
  • 使用Qt6 QML/C++ 和CMake构建海康威视摄像头应用(代码开源)
  • 【GameMaker】GML v3 的现行提案
  • FreeRTOS任务创建与删除
  • Python 图片爬取入门:从手动下载到自动批量获取
  • Selenium 处理动态网页与等待机制详解
  • 复杂度优先:基于推理链复杂性的提示工程新范式
  • AUTOSAR进阶图解==>AUTOSAR_SWS_CryptoInterface
  • 【Java学习|黑马笔记|Day18】Stream流|获取、中间方法、终结方法、收集方法及其练习
  • 扩散模型与强化学习(12):RLHF中的Reward hacking现象
  • 深入解析Ext2文件系统架构
  • 【RK3576】【Android14】ADB工具说明与使用
  • 【Linux性能优化】常用工具和实战指令
  • 软件测试-Bug
  • 【软件测试】从软件测试到Bug评审:生命周期与管理技巧
  • 机器学习-数据预处理
  • 0401聚类-机器学习-人工智能
  • Vue开发前端报错:‘vue-cli-service‘ 不是内部或外部命令解决方案
  • 交通出行大前端与 AI 融合:智能导航与出行预测