掘金 人工智能 07月22日 10:21
连接语言大模型(LLM)服务进行对话
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了如何使用Python连接AI大模型进行对话。文章首先演示了如何利用兼容OpenAI API的阿里云百炼平台,通过`openai`模块实现与大模型的交互,并展示了如何通过设置`base_url`和`api_key`来灵活切换不同的大模型。接着,文章重点推荐了LangChain框架,强调其在构建LLM应用中的优势,特别是其提供的`batch`接口,能够高效处理批量任务,如文本的多标签分类,并提供了详细的代码示例。此外,文章还提及了阿里云百炼平台支持的多轮对话和流式输出功能,为构建更具交互性的AI Chat应用奠定了基础。

💡 使用`openai`库连接大模型:文章展示了如何通过配置`api_key`和`base_url`,利用兼容OpenAI API的Python客户端库与阿里云百炼平台上的大模型(如deepseek-r1)进行对话。这种方式的优势在于,许多大模型服务都遵循OpenAI API标准,使得开发者可以使用同一套代码库访问不同的模型,极大地提高了开发效率和灵活性。

🚀 LangChain框架提升效率:LangChain被认为是比直接使用`openai`库更好的选择,尤其是在处理批量任务时。它提供了一个`batch`接口,可以高效地对大量文本进行多标签分类等操作。即使底层模型不支持批量接口,LangChain也能通过内部并发处理来模拟,保证了应用的可扩展性和性能。

📋 LangChain实现文本多标签分类:文章提供了一个具体的Python函数`llm_labeling`,演示了如何使用LangChain的`ChatOpenAI`模型和`batch`方法,对输入的文本列表进行多标签分类。该函数定义了系统提示词,指定了可用的标签,并能够解析模型输出的标签,同时过滤掉无效标签,最终返回每条文本对应的标签列表,展示了LangChain在实际应用中的强大能力。

🌐 多样化的接入方式:除了Python接口,阿里云百炼平台还支持Node.js和HTTP等多种接入方式,这意味着开发者可以根据自己的技术栈和项目需求,在前端、后端、移动端或桌面端集成大模型能力,实现更广泛的AI应用。

💬 构建交互式AI应用的特性:文章最后提及了阿里云百炼平台提供的“多轮对话”和“流式输出”功能。多轮对话能够让大模型记住上下文信息,提升对话的连贯性和用户体验;流式输出则能让AI的回答逐步呈现,增强应用的交互性,是构建智能聊天机器人等应用的必备功能。

1. 引言

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

2. 实现

2.1 openai模块

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

from openai import OpenAIclient = 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 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应用的交互性更好。不过笔者暂时不关心这个,以后有机会再试用一下。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

AI大模型 OpenAI API LangChain Python 阿里云百炼
相关文章