基于星火大模型的群聊对话分角色要素提取挑战赛Task1笔记

基于星火大模型的群聊对话分角色要素提取挑战赛Task1笔记

跑通baseline

1、安装依赖

下载相应的数据库

!pip install --upgrade -q spark_ai_python

2、配置导入

导入必要的包。

from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessage
import json

配置设置相关参数。

#星火认知大模型Spark3.5 Max的URL值,其他版本大模型URL值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_URL = 'wss://spark-api.xf-yun.com/v3.5/chat'
#星火认知大模型调用秘钥信息,请前往讯飞开放平台控制台(https://console.xfyun.cn/services/bm35)查看
SPARKAI_APP_ID = '2e001699'
SPARKAI_API_SECRET = 'ZmU2YTliYmU1YjViODlkMDYwOWZlOTc4'
SPARKAI_API_KEY = '52a07d74ef95aead407a958f448d4464'
#星火认知大模型Spark3.5 Max的domain值,其他版本大模型domain值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_DOMAIN = 'generalv3.5'

申领大模型API来自:https://console.xfyun.cn/app/myapp

在这里插入图片描述

3、模型测试

def get_completions(text):messages = [ChatMessage(role="user",content=text)]spark = ChatSparkLLM(spark_api_url=SPARKAI_URL,spark_app_id=SPARKAI_APP_ID,spark_api_key=SPARKAI_API_KEY,spark_api_secret=SPARKAI_API_SECRET,spark_llm_domain=SPARKAI_DOMAIN,streaming=False,)handler = ChunkPrintHandler()a = spark.generate([messages], callbacks=[handler])return a.generations[0][0].text# 测试模型配置是否正确
text = "你好"
get_completions(text)

4、数据读取

def read_json(json_file_path):"""读取json文件"""with open(json_file_path, 'r') as f:data = json.load(f)return datadef write_json(json_file_path, data):"""写入json文件"""with open(json_file_path, 'w') as f:json.dump(data, f, ensure_ascii=False, indent=4)# 读取数据
train_data = read_json("dataset/train.json")
test_data = read_json("dataset/test_data.json")

5、Prompt设计

 4. 加载决策树模型进行训练
model = LGBMClassifier(verbosity=-1)
model.fit(train.iloc[:, 2:].values, train['Label'])
pred = model.predict(test.iloc[:, 1:].values, )

6、主函数启动

import jsonclass JsonFormatError(Exception):def __init__(self, message):self.message = messagesuper().__init__(self.message)def check_and_complete_json_format(data):required_keys = {"基本信息-姓名": str,"基本信息-手机号码": str,"基本信息-邮箱": str,"基本信息-地区": str,"基本信息-详细地址": str,"基本信息-性别": str,"基本信息-年龄": str,"基本信息-生日": str,"咨询类型": list,"意向产品": list,"购买异议点": list,"客户预算-预算是否充足": str,"客户预算-总体预算金额": str,"客户预算-预算明细": str,"竞品信息": str,"客户是否有意向": str,"客户是否有卡点": str,"客户购买阶段": str,"下一步跟进计划-参与人": list,"下一步跟进计划-时间点": str,"下一步跟进计划-具体事项": str}if not isinstance(data, list):raise JsonFormatError("Data is not a list")for item in data:if not isinstance(item, dict):raise JsonFormatError("Item is not a dictionary")for key, value_type in required_keys.items():if key not in item:item[key] = [] if value_type == list else ""if not isinstance(item[key], value_type):raise JsonFormatError(f"Key '{key}' is not of type {value_type.__name__}")if value_type == list and not all(isinstance(i, str) for i in item[key]):raise JsonFormatError(f"Key '{key}' does not contain all strings in the list")return data# Example usage:
json_data = '''
[{"基本信息-姓名": "张三","基本信息-手机号码": "12345678901","基本信息-邮箱": "zhangsan@example.com","基本信息-地区": "北京市","基本信息-详细地址": "朝阳区某街道","基本信息-性别": "男","基本信息-年龄": "30","基本信息-生日": "1990-01-01","咨询类型": ["询价"],"意向产品": ["产品A"],"购买异议点": ["价格高"],"客户预算-预算是否充足": "充足","客户预算-总体预算金额": "10000","客户预算-预算明细": "详细预算内容","竞品信息": "竞争对手B","客户是否有意向": "有意向","客户是否有卡点": "无卡点","客户购买阶段": "合同中","下一步跟进计划-参与人": ["客服A"],"下一步跟进计划-时间点": "2024-07-01","下一步跟进计划-具体事项": "沟通具体事项"}
]
'''try:data = json.loads(json_data)completed_data = check_and_complete_json_format(data)print("Completed JSON:", json.dumps(completed_data, ensure_ascii=False, indent=4))
except JsonFormatError as e:print(f"JSON format error: {e.message}")# 5. 保存结果文件到本地
pd.DataFrame({'uuid': test['uuid'],'Label': pred}
).to_csv('submit.csv', index=None)

7、生成提交文件

from tqdm import tqdmretry_count = 5 # 重试次数
result = []
error_data = []for index, data in tqdm(enumerate(test_data)):index += 1is_success = Falsefor i in range(retry_count):try:res = get_completions(PROMPT_EXTRACT.format(content=data["chat_text"]))infos = convert_all_json_in_text_to_dict(res)infos = check_and_complete_json_format(infos)result.append({"infos": infos,"index": index})is_success = Truebreakexcept Exception as e:print("index:", index, ", error:", e)continueif not is_success:data["index"] = indexerror_data.append(data)

8、保存输出

write_json("output.json", result)
print("index:", index, ", error:", e)continue
if not is_success:data["index"] = indexerror_data.append(data)

## 8、保存输出```python
write_json("output.json", result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA基础教程DAY2-类的构造方法及类的实例化调用

下面我们来讲如何建好类以及如何将它实例化 首先建立一个学生类Student,里面要求有属性,学号、年龄为int型,姓名,方法有学习study 在Student.java文件当中,我们完成以上代码为 public class Student {int age17;in…

【JS】期末复习题

一、选择题 1&#xff0e;下面四种标签哪种写法不正确&#xff08; D &#xff09;。 A&#xff0e;<html></html> B&#xff0e;<Html></Html> C&#xff0e;<HTML></HTML> D&#xff0e;<html><h…

React基础与核心概念探索

目录 React简介 起源与设计理念 JSX语法 什么是JSX&#xff1f; 为什么使用JSX&#xff1f; JSX的转换过程 组件化架构 React组件的概念 分类&#xff1a;函数组件 vs 类组件 状态管理 Props传递 虚拟DOM 高效DOM更新的秘密 工作原理 React简介 起源与设计理念 React&…

操作系统大题复习

磁盘调度算法 一次磁盘读写需要的时间 寻道时间 先来先服务FCFS 优点&#xff1a;公平 缺点&#xff1a;性能差&#xff0c;寻道时间长 最短寻道时间有限SSTF 缺点&#xff1a;可能产生饥饿现象 扫描算法SCAN 优点&#xff1a;不会产生饥饿现象 缺点&#xff1a;响应频率…

Node.js学习(一)

Node.js安装与入门案例&#xff1a; 需求&#xff1a;点击按钮&#xff0c;请求本地目录指定文件的内容&#xff0c;并显示在页面上 刚入门肯定想着直接写相对路径请求指定路径数据就行了&#xff0c;可是会发现不行。 网页运行在浏览器端&#xff0c;通常后续要发布&#xf…

docker部署wg-easy和firefly

Background WireGuard是一种新型的VPN协议,它通过在内核层运行,提供高效、安全、简单和现代的VPN解决方案。wg-easy是一个专为简化 WireGuard VPN配置和管理而设计的工具&#xff0c;提供了界面化的管理&#xff0c;进一步降低WireGuard 的使用门槛&#xff0c;让用户无需深入了…

在Linux中对Nginx配置rewrite跳转

nginx安装在IP为x.x.x.x的服务器上 rewrite语法&#xff1a; rewrite <正则表达式> <指定替换的内容> <flag标记> 注释&#xff1a;使用nginx提供的全局变量或自己设置的变量&#xff0c;结合正则表达式和标记位&#xff08;redirect返回302临时重定向…

css_23_多列布局

常用值&#xff1a; column-count&#xff1a;指定列数&#xff0c;值是数字。 column-width&#xff1a;指定列宽&#xff0c;值是长度。 columns &#xff1a;同时指定列宽和列数&#xff0c;复合属性&#xff1b;值没有数量和顺序要求。 column-gap&#xff1a;设置列边距…

Java时间转换

一、线程不安全 Date date new Date(); SimpleDateFormat dateFormat new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String prefix dateFormat.format(date);二、线程安全,建议使用 String t1 LocalDateTime.now().format(DateTimeFormatter.ofPattern("y…

【C++】STL-stack_queue

目录 1、stack和queue的使用 1.1 最小栈 1.2 栈的弹出和压入序列 1.3 二叉树的层序遍历 2、stack和queue的模拟实现 2.1 适配器 2.2 deque 2.2.1 deque的成员变量 2.2.2 deque的迭代器 2.2.3 deque尾插元素 2.2.4 deque头插元素 2.2.5 下标访问 2.2.6 deque的不足 …

Transformer模型学习

Transformer模型是深度学习领域的一种创新架构&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;任务中表现出色。它是由Vaswani等人在2017年的论文《Attention is All You Need》中首次提出的。以下是对Transformer模型的详细介绍&#xff1a; Transformer的起源和…

golang结合neo4j实现权限功能设计

neo4j 是非关系型数据库之图形数据库&#xff0c;这里不再赘述。 传统关系数据库基于rbac实现权限, user ---- role ------permission,加上中间表共5张表。 如果再添上部门的概念&#xff1a;用户属于部门&#xff0c;部门拥有 角色&#xff0c;则又多了一层&#xff1a; user-…

力扣刷题--3158. 求出出现两次数字的 XOR 值【简单】

题目描述 给你一个数组 nums &#xff0c;数组中的数字 要么 出现一次&#xff0c;要么 出现两次。 请你返回数组中所有出现两次数字的按位 XOR 值&#xff0c;如果没有数字出现过两次&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,1,3] 输出&…

数据加密解密和哈希的解析

[S1301]数据的加解密 对提供的原始数据&#xff08;字符串或者二进制数组&#xff09;进行加密是数据保护框架体提供的基本功能&#xff0c;接下来我们利用一个简单的控制台程序来演示一下加解密如何实现。数据的加解密均由IDataProtector对象来完成&#xff0c;而该对象由IDa…

Linux硬链接和软链接(符号链接)

ln 是 Linux 和 Unix 系统中用来创建链接的命令。它的基本用法如下&#xff1a; 创建硬链接&#xff1a; ln source_file target_link这会创建一个名为 target_link 的硬链接&#xff0c;指向 source_file。硬链接实际上是文件系统中的一个额外条目&#xff0c;指向相同的数据块…

Elasticsearch:Runtime fields - 运行时字段(一)

运行时字段&#xff08;runtime fields&#xff09;是在查询时计算的字段。运行时字段使你能够&#xff1a; 向现有文档添加字段而无需重新索引数据开始处理数据而无需了解其结构在查询时覆盖索引字段返回的值定义用于特定用途的字段而无需修改底层架构 你可以像访问其他任何…

bash条件判断基础adsawq1`1nn

判断的作用 判断后续操作的提前条件是否满足如果满足执行一种命令不满足则执行另一种指令 条件测试类型&#xff1a; 整型测试字符测试文字测试 整数测试&#xff1a;比较两个整数谁大谁小&#xff0c;是否相等&#xff1b; 二元测试&#xff1a; num1 操作符 num2 -eq: 等于…

uniapp封装虚拟列表滚动组件

uniapp封装虚拟列表滚动组件 这里用到一个列表&#xff0c;然后数据可能有很多很多…&#xff0c;一次性全部渲染到dom上会卡顿&#xff0c;很废性能&#xff0c;于是用了这个虚拟列表就变丝滑很多很多。 组件mosoweInventedList 代码&#xff1a; <!-- 虚拟滚动列表组件&a…

BASH and SH in SHELL scripts

一、执行脚本的现象 为了测试一个小的功能&#xff0c;写了一个小脚本&#xff0c;类似的内容如下&#xff1a; #!/bin/shecho "start api test ......"for((i1;i<10;i)); do echo "cur id :" $i; done echo "end."执行一下&#xff0c;“…

代码随想录Day67(图论 part04)

110.字符串接龙 题目&#xff1a;110. 字符串接龙 (kamacoder.com) 思路&#xff1a;没有思路 答案 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();String beginStr sc…