连接语言大模型(LLM)服务进行对话
1. 引言
最近开始接触AI大模型方向的工作,第一个实例就尝试一下连接大模型进行对话的实现。
2. 实现
2.1 openai模块
要实现这个功能很简单,直接翻各大模型平台的给的API案例一般都可以实现,例如笔者这里使用的阿里云的百炼平台给出的API:
from openai import OpenAI
client = OpenAI(
# 使用大模型对应的Key
api_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 ChatOpenAI
llm_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 results
texts = [
"这个产品非常好用,值得推荐",
"物流速度太慢了,体验不好",
"外观漂亮,使用方便,就是价格稍贵"
]
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应用的交互性更好。不过笔者暂时不关心这个,以后有机会再试用一下。
连接语言大模型(LLM)服务进行对话的更多相关文章
- 千亿参数开源大模型 BLOOM 背后的技术
假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,"一朝看尽长安花"似乎近在眼前 -- 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM ...
- cips2016+学习笔记︱简述常见的语言表示模型(词嵌入、句表示、篇章表示)
在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一 ...
- R语言︱机器学习模型评估方案(以随机森林算法为例)
笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评 ...
- R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错
笔者寄语:机器学习中交叉验证的方式是主要的模型评价方法,交叉验证中用到了哪些指标呢? 交叉验证将数据分为训练数据集.测试数据集,然后通过训练数据集进行训练,通过测试数据集进行测试,验证集进行验证. 模 ...
- (转)Go语言并发模型:使用 context
转载自:https://segmentfault.com/a/1190000006744213 context golang 简介 在 Go http包的Server中,每一个请求在都有一个对应的 g ...
- PowerDesigner 学习:十大模型及五大分类
个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...
- DeepMind提出空间语言集成模型SLIM,有效编码自然语言的空间关系
前不久,DeepMind 提出生成查询网络 GQN,具备从 2D 画面到 3D 空间的转换能力.近日.DeepMind 基于 GQN 提出一种新模型.可以捕捉空间关系的语义(如 behind.left ...
- PowerDesigner 15学习笔记:十大模型及五大分类
个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...
- 【阿里云IoT+YF3300】5. Alink物模型之服务下发
名词解释: 服务:设备的功能模型之一,设备可被外部调用的能力或方法,可设置输入参数和输出参数.相比于属性,服务可通过一条指令实现更复杂的业务逻辑,如执行某项特定的任务. -摘自阿里云物联网产品文 ...
- 什么是大数据计算服务MaxCompute
大数据计算服务(MaxCompute,原名ODPS)是一种快速.完全托管的EB级数据仓库解决方案. 当今社会数据收集手段不断丰富,行业数据大量积累,数据规模已增长到了传统软件行业无法承载的海量数据(百 ...
随机推荐
- C++11——右值引用&完美转发
总而言之,右值引用,完美转发,std::move()都是为了在程序运行过程中,避免变量多次重复的申请和释放内存空间,使用移动语义将申请的空间通过这几种方式进行循环使用,避免重新开辟新空间和拷贝浪费算力 ...
- vue3 基础-插件 plugin
前几篇我们介绍了 mixin 混入的的方式能实现对代码的复用, 而本篇将要介绍的 plugin 将会更加适合这种通用性功能的代码的复用和扩展. 最常用的场景, 比如轮播图就非常实用 plugin 来实 ...
- Typora中markdown文件无法识别行内公式(内联公式)
行内公式属于LaTeX扩展语法,而不属于Markdown的通用标准.为了使Typora予以解析,需要在Typora的"文件"-"偏好设置"中,勾选"内 ...
- VUE构建
VUE 渐进式 JavaScript 框架 易学易用 基于标准 HTML.CSS 和 JavaScript 构建,提供容易上手的 API 和一流的文档. 性能出色 经过编译器优化.完全响应式的渲染系统 ...
- 题解:P3388 【模板】割点(割顶)
提示:本篇题解缺乏详细的证明,如有需要,请移步其他题解. 算法介绍 Tarjan 算法,这里用来解决割点问题,时间复杂度为 \(O(n+m)\). 割点的简要定义是:去掉割点及其所连的边,该图分为两个 ...
- HTTP接口的中文乱码问题【python版】
一.问题:在软件接口开发过程中,request返回的信息在print的时候出现了乱码.默认编码:ISO-8859-1问题原因:可以在request语句后面插入print(result.enco ...
- RC4加密解密算法工具类-Java语言实现
摘要 RC4加密解密算法是工具类是大名鼎鼎的 RSA三人组中的头号人物Ron Rivest设计的,可以有效抵御暴力搜索密钥的攻击.鉴于此,提供一个由Java语言实现的工具类. 前言 RC4加密算法 ...
- 20244104 实验二《Python程序设计》实验报告
课程:<Python程序设计> 班级: 2441 姓名: 陈思淼 学号:20244104 实验教师:王志强 实验日期:2025年4月5日 必修/选修: 公选课 1.实验内容 设计并完成一个 ...
- MVVM - Model和ViewModel的创建和配置
MVVM-Model和ViewModel的创建和配置 本文同时为b站WPF课程的笔记,相关示例代码 简介 MVVM:Model-View-ViewModel,是一种软件架构的模式.通过引入一个中间层V ...
- ansible-playbook常用模块
lineinfile 此模块是针对文件特殊行,使用后端引用的正则表达式来替换. - hosts: 192.168.50.1 gather_facts: no tasks: - name: 设置UseD ...