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)服务进行对话的更多相关文章

  1. 千亿参数开源大模型 BLOOM 背后的技术

    假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,"一朝看尽长安花"似乎近在眼前 -- 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM ...

  2. cips2016+学习笔记︱简述常见的语言表示模型(词嵌入、句表示、篇章表示)

    在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一 ...

  3. R语言︱机器学习模型评估方案(以随机森林算法为例)

    笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评 ...

  4. R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错

    笔者寄语:机器学习中交叉验证的方式是主要的模型评价方法,交叉验证中用到了哪些指标呢? 交叉验证将数据分为训练数据集.测试数据集,然后通过训练数据集进行训练,通过测试数据集进行测试,验证集进行验证. 模 ...

  5. (转)Go语言并发模型:使用 context

    转载自:https://segmentfault.com/a/1190000006744213 context golang 简介 在 Go http包的Server中,每一个请求在都有一个对应的 g ...

  6. PowerDesigner 学习:十大模型及五大分类

    个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...

  7. DeepMind提出空间语言集成模型SLIM,有效编码自然语言的空间关系

    前不久,DeepMind 提出生成查询网络 GQN,具备从 2D 画面到 3D 空间的转换能力.近日.DeepMind 基于 GQN 提出一种新模型.可以捕捉空间关系的语义(如 behind.left ...

  8. PowerDesigner 15学习笔记:十大模型及五大分类

    个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...

  9. 【阿里云IoT+YF3300】5. Alink物模型之服务下发

    名词解释: 服务:设备的功能模型之一,设备可被外部调用的能力或方法,可设置输入参数和输出参数.相比于属性,服务可通过一条指令实现更复杂的业务逻辑,如执行某项特定的任务.    -摘自阿里云物联网产品文 ...

  10. 什么是大数据计算服务MaxCompute

    大数据计算服务(MaxCompute,原名ODPS)是一种快速.完全托管的EB级数据仓库解决方案. 当今社会数据收集手段不断丰富,行业数据大量积累,数据规模已增长到了传统软件行业无法承载的海量数据(百 ...

随机推荐

  1. HarmonyOS运动开发:如何监听用户运动步数数据

    前言 在开发运动类应用时,准确地监听和记录用户的运动步数是一项关键功能.HarmonyOS 提供了强大的传感器框架,使得开发者能够轻松地获取设备的运动数据.本文将深入探讨如何在 HarmonyOS 应 ...

  2. DeepSeek+Coze实战:如何从0到1打造一个热点监控智能体

    大家好,我是汤师爷,专注AI智能体分享~ 短视频小白经常会遇到这样的困扰. 每天花大量时间刷视频,想要找到你所在赛道的爆款内容,却总是难以系统地整理和分析? 想要批量获取某个关键词的爆款视频数据,但是 ...

  3. 代码随想录第十一天 | Leecode 150. 逆波兰表达式求值、239. 滑动窗口最大值、347. 前k个高频词

    Leecode 150. 逆波兰表达式求值 题目链接:https://leetcode.cn/problems/evaluate-reverse-polish-notation/description ...

  4. Nacos源码—5.Nacos配置中心实现分析

    大纲 1.关于Nacos配置中心的几个问题 2.Nacos如何整合SpringBoot读取远程配置 3.Nacos加载读取远程配置数据的源码分析 4.客户端如何感知远程配置数据的变更 5.集群架构下节 ...

  5. Go 层级菜单树转 json 处理

    本篇是一个补充知识点, 目的是为了下篇的后台管理系统中, 菜单权限的接口进行铺垫一下. 同时也是做个笔记, 因为在很多地方都会用这种 "树结构" 来实现很多权限, 层级, 菜单的处 ...

  6. vue3 基础-应用app和组件基本概念

    这篇主要对 vue 最基础的应用程序 Application 和组件 Components 进行一个简要和直观的认知, 具体要分析的代码如下: <!DOCTYPE html> <ht ...

  7. python正则表达式中re.M,re.S,re.I的作用

    参考:https://www.cnblogs.com/feifeifeisir/p/10627474.html 正则表达式可以包含一些可选标志修饰符来控制匹配的模式.修饰符被指定为一个可选的标志.多个 ...

  8. 定制Django的Tag和Filter(一)

    1.在 app 目录下创建 templatetags 目录(目录名只能是 templatetags). 如: app/ __init__.py models.py templatetags/ __in ...

  9. L3-4、让 Prompt 更聪明:调试技巧与智能问答系统实战

    让 Prompt 更聪明:调试技巧与智能问答系统实战 在大语言模型(LLM)应用开发中,Prompt 工程是核心技能.本文将系统介绍 Prompt 调试技巧,并通过构建一个实用的 FAQ 问答机器人, ...

  10. Vue3+Ts笔记:基于element-UI 实现下拉框滚动翻页查询通用组件

    element 提供了 el-select组件,并且支持远程搜索,但是对于数据量大需要翻页的场景并未提供相应配置,所以自己写了一个通用组件,作为记录 初始化控件,定义传入参数 将远程查询的接口封装为函 ...