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

基于阿里云调用deepseek大模型

文章目录

  • 1.单轮对话
  • 2.多轮对话
  • 参考文档

选择需要调用的模型,每个模型的详细信息中会有API示例(deepseek-r1),需要做的就是申请自己的API key就行了,过程中可能需要实名认证。

python中安装OpenAI SDK:pip install openai

1.单轮对话

#!/usr/bin/env python3
# -*-coding:utf-8 -*-

from openai import OpenAI

api_key = "sk-xxx"	# 替换

prompt = """
如果你是一名地址NER标注工程师,需要从以下提供的地址情报和文本情报生成该POI地址的主点、分区、楼栋、单元号、楼层、户室号、和描述信息。
注意以下poi为充电桩场景,分区、楼栋、单元号、户室号、和描述信息出现在楼层之后提取,出现在楼层之前不提取。
提取格式要求:
1)主点:一般为xxx停车场、xxx车库、xxx地库。例如万达广场(广阳店)地下停车场。
2)分区:大写数字/大写字母/方向文字/原值+区,如一区/A区/东区。
3)楼栋:阿拉伯数字/大写字母+栋/幢/号楼。
4)单元号:阿拉伯数字/大写字母+单元/座。
5)楼层:地上楼层:阿拉伯数字+层;地下楼层:B+阿拉伯数字+层;无法确认地上或地下:原值+层,如:1层/B1层/LG层。
6)户室号:xx室,不包括xx号,xx商铺。
7)描述信息:具体车位号或者重要参照物和引导方位关键词或其他引导性信息,如1101车位附近/入口向东50m/红色柱子附近。
每个实体提取结果用“实体名:提取值”格式返回,没有提取值的用空字符串代替。不同实体之间按照主点、分区、楼栋、单元号、楼层、户室号、描述信息的顺序,使用“|||”分隔。
重点强调注意最终仅返回以下示例格式结果即可:“主点:万达广场地下停车场|||分区:|||楼栋:|||单元号:|||楼层:B2层|||户室号:|||描述信息:08通道E018”。不需要额外的解释信息。
情报信息:POI名称:森通智达充电站(财富广场地下站)|||地址情报:深圳市福田区深南大道7002号财富广场地下车库负二层264、276、299、307车位|||文本情报:
"""
client = OpenAI(
    api_key=api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

completion = client.chat.completions.create(
    model="deepseek-r1",
    messages=[
        {'role': 'user', 'content': prompt}
    ]
)

print(f"{'-' * 20}思维链{'-' * 20}")
print(completion.choices[0].message.reasoning_content)

print(f"{'-' * 20}最终结果{'-' * 20}")
print(completion.choices[0].message.content)

--------------------思维链--------------------
好的,我现在需要处理用户提供的地址信息,并按照要求提取各个实体。首先,用户给的情报是森通智达充电站(财富广场地下站),地址在深圳市福田区深南大道7002号财富广场地下车库负二层264、276、299、307车位。文本情报似乎没有额外信息,可能为空。

首先看主点。根据规则,主点通常是停车场、车库或地库。地址中提到“财富广场地下车库”,所以主点应该是“财富广场地下车库”。注意POI名称中的“地下站”可能也指地下车库,但主点应来自地址情报中的明确部分,所以确定主点为财富广场地下车库。

接下来是分区。规则是分区出现在楼层之后才能提取。地址里楼层是负二层,之后的部分是车位号,没有提到分区,所以分区留空。

楼栋和单元号。地址中没有出现楼栋或单元号的信息,比如“X栋”或“X单元”,所以这两项都为空。

楼层部分。地址明确给出“负二层”,根据规则,地下楼层用B+数字,所以这里应该转成B2层。注意用户强调如果是地下楼层,格式是B加数字,所以正确转换。

户室号。规则是xx室,而地址中是车位号,属于描述信息,所以户室号为空。

描述信息需要提取车位号。地址中有264、276、299、307车位,所以描述信息应该把这些列出来,用逗号分隔。

检查一遍是否符合所有规则,尤其是分区、楼栋等是否在楼层之后出现。这里车位号是在楼层之后,但属于描述信息,没问题。确认所有提取项正确无误,没有遗漏。
--------------------最终结果--------------------
主点:财富广场地下车库|||分区:|||楼栋:|||单元号:|||楼层:B2层|||户室号:|||描述信息:264、276、299、307车位

deepseek的文本处理能力确实不错,实际业务中Qwen2.5-7B + SFT微调的效果没有直接上deepseek-r1的效果好,重点在于构建合适的prompt。

2.多轮对话

在单轮对话的基础上,保存每次的历史对话上下文。

user:用户,用于描述用户的输入或问题。
assistant:助手、模型本身,描述模型生成的回复部分。

#!/usr/bin/env python3
# -*-coding:utf-8 -*-

from openai import OpenAI

api_key = "sk-xxx"

prompt = """
如果你是一名地址NER标注工程师,需要从以下提供的地址情报和文本情报生成该POI地址的主点、分区、楼栋、单元号、楼层、户室号、和描述信息。
注意以下poi为充电桩场景,分区、楼栋、单元号、户室号、和描述信息出现在楼层之后提取,出现在楼层之前不提取。
提取格式要求:
1)主点:一般为xxx停车场、xxx车库、xxx地库。例如万达广场(广阳店)地下停车场。
2)分区:大写数字/大写字母/方向文字/原值+区,如一区/A区/东区。
3)楼栋:阿拉伯数字/大写字母+栋/幢/号楼。
4)单元号:阿拉伯数字/大写字母+单元/座。
5)楼层:地上楼层:阿拉伯数字+层;地下楼层:B+阿拉伯数字+层;无法确认地上或地下:原值+层,如:1层/B1层/LG层。
6)户室号:xx室,不包括xx号,xx商铺。
7)描述信息:具体车位号或者重要参照物和引导方位关键词或其他引导性信息,如1101车位附近/入口向东50m/红色柱子附近。
每个实体提取结果用“实体名:提取值”格式返回,没有提取值的用空字符串代替。不同实体之间按照主点、分区、楼栋、单元号、楼层、户室号、描述信息的顺序,使用“|||”分隔。
重点强调注意最终仅返回以下示例格式结果即可:“主点:万达广场地下停车场|||分区:|||楼栋:|||单元号:|||楼层:B2层|||户室号:|||描述信息:08通道E018”。不需要额外的解释信息。
情报信息:POI名称:森通智达充电站(财富广场地下站)|||地址情报:深圳市福田区深南大道7002号财富广场地下车库负二层264、276、299、307车位|||文本情报:
"""

# 保存所有对话的上下文
messages = [{'role': 'user', 'content': prompt}]

client = OpenAI(
    api_key=api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

completion = client.chat.completions.create(
    model="deepseek-r1",
    messages=messages
)
print(f"{'+' * 20}第一轮对话{'+' * 20}")
print(f"{'-' * 20}思维链{'-' * 20}")
print(completion.choices[0].message.reasoning_content)
print(f"{'-' * 20}最终结果{'-' * 20}")
print(completion.choices[0].message.content)


# 上一轮模型的回答
messages.append({'role': 'assistant', 'content': completion.choices[0].message.content})
# 本轮新的问题
messages.append({'role': 'user', 'content': '简述上一个问题是什么'})
completion = client.chat.completions.create(
    model="deepseek-r1",
    messages=messages
)
print(f"{'+' * 20}第二轮对话{'+' * 20}")
print(f"{'-' * 20}思维链{'-' * 20}")
print(completion.choices[0].message.reasoning_content)
print(f"{'-' * 20}最终结果{'-' * 20}")
print(completion.choices[0].message.content)

++++++++++++++++++++第一轮对话++++++++++++++++++++
--------------------思维链--------------------
嗯,我现在需要处理这个地址NER标注的任务。首先,用户给了一个具体的例子,说明他们希望提取主点、分区、楼栋、单元号、楼层、户室号和描述信息。特别是针对充电桩场景,分区等信息如果在楼层之后出现才提取,之前的忽略。

首先看提供的POI名称是“森通智达充电站(财富广场地下站)”。主点应该是停车场、车库或地库的名称。这里POI名称中的括号里有“财富广场地下站”,可能主点需要结合地址情报中的信息。地址情报里写的是“财富广场地下车库负二层264、276、299、307车位”。所以主点应该是“财富广场地下车库”,对吧?因为地址情报明确提到了地下车库,而POI名称里的括号内容可能补充说明位置,但主点应该以地址情报中的车库名称为准。

接下来是分区。根据规则,分区应该是大写数字、字母、方向或原值加“区”。地址情报里没有提到分区,所以分区留空。

楼栋信息需要是数字或大写字母加上栋、幢、号楼。地址里也没有提到楼栋,所以楼栋也是空。

单元号同理,需要单元或座,这里也没有,所以单元号空。

楼层信息方面,地址里是“负二层”,根据规则,地下楼层应该用B加数字层,所以负二层对应B2层。这里要转换成“B2层”。

户室号需要是xx室,但地址里是车位号,比如264、276等,这些属于描述信息,不是户室号,所以户室号留空。

描述信息是具体的车位号,地址里提到“264、276、299、307车位”,所以描述信息应该提取这些车位号,用逗号分隔,然后加上“车位”作为引导信息。

所以最终的结果应该是主点:财富广场地下车库,楼层:B2层,描述信息:264、276、299、307车位,其他部分为空。检查一下是否符合格式要求,每个实体用“实体名:值”的形式,用|||分隔,顺序正确。用户强调不需要任何解释,只返回结果。确认无误后就可以输出。
--------------------最终结果--------------------
主点:财富广场地下车库|||分区:|||楼栋:|||单元号:|||楼层:B2层|||户室号:|||描述信息:264、276、299、307车位
++++++++++++++++++++第二轮对话++++++++++++++++++++
--------------------思维链--------------------
好的,现在我要处理用户的问题。首先,用户这次问的是“上一个问题是什么,简述问题本身即可,不要重新回答”。我需要回顾之前的对话历史,找到上一个问题是什么。

查看历史记录,用户之前提供了一个地址情报和文本情报,要求生成POI地址的主点、分区、楼栋等信息,并按照特定格式返回。用户还给出了示例,并强调只需要结果,不需要额外解释。我的上一个回答正确提取了各个实体,并按照格式返回了结果。

现在用户询问的是上一个问题本身,而不是要求再次回答。所以我需要简要描述上一个问题,即用户要求作为地址NER标注工程师,从给定的情报中提取特定实体,并按照格式返回结果。需要注意的是,用户不需要重新回答,只要简述问题内容。

确保不包含任何之前的回答内容,只描述问题本身。用简洁的语言说明用户之前的需求,包括提取的各个实体和格式要求。这样用户就能明确知道上一个问题的核心内容。
--------------------最终结果--------------------
上一个问题是要求从提供的充电桩场景地址情报中提取主点、分区、楼栋、单元号、楼层、户室号和描述信息,并按照指定格式返回结果,同时强调需遵循分层逻辑(如分区等实体仅在楼层后出现时提取)。

以上根据文档实现的一个简单调用,调用默认都是非流式的,一次性返回最终结果,实际业务中这种方式较常见,但可能会因为生成的结果内容比较多而超时或者占内存。流式的是模型边生成结果边返回,具体实现方式可以参考文档示例。

参考文档

完整的开发流程参考:https://help.aliyun.com/zh/model-studio/developer-reference
错误码排查:https://help.aliyun.com/zh/model-studio/developer-reference/error-code

相关文章:

  • 如何搭建同城O2O服务平台?AI外卖跑腿APP技术革新与开发实践
  • 【Java基础】Java数组
  • 深圳SMT贴片加工厂家核心技术及服务优势解析
  • mybatis使用typeHandler实现类型转换
  • elabradio入门第三讲——PSK传输系统的载波同步
  • maya创建文字模型
  • 深入理解 Java 反射机制:获取类信息与动态操作
  • Windows 环境下 Grafana 安装指南
  • C++接口继承和实现继承
  • 观察者模式原理详解以及Spring源码如何使用观察者模式?
  • ChatGLM
  • 前端函数在开发环境与生产环境中处理空字符串的差异及解决方案
  • 为什么WP建站更适合于谷歌SEO优化?
  • Mathtype安装入门指南
  • WPF9-数据绑定进阶
  • 基于 GEE 的 2019 - 2024 年研究区大气污染物浓度月度变化趋势(CO、NO₂、SO₂、O₃ 、HCHO)
  • Linux中的权限问题(二)
  • 压力传感器
  • L1-043 阅览室
  • 【基础架构篇六】《DeepSeek显存管理黑科技:OOM错误终极解决方案》
  • 韩国执政党总统候选人更换方案被否决,金文洙候选人资格即刻恢复
  • 巴基斯坦全面恢复领空开放
  • 让“五颜六色”面孔讲述上海故事,2025年上海城市推荐官开启选拔
  • 广西钦州:坚决拥护自治区党委对钟恒钦进行审查调查的决定
  • 东方红资管官宣:41岁原国信资管董事长成飞出任新总经理
  • 央行:中国政府债务扩张仍有可持续性