llm_nlu.py 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import os
  2. from volcenginesdkarkruntime import Ark
  3. from .read_folder import read_jsons_in_order
  4. client = Ark(
  5. base_url="https://ark.cn-beijing.volces.com/api/v3",
  6. api_key="817dff39-5586-4f9b-acba-55004167c0b1",
  7. )
  8. system_prompt = """
  9. ## 角色:你是一个优秀的文本理解与解析专家,同时你也是一个优秀的视频剪辑创作者。
  10. ## 任务:请对输入的视频脚本进行深入理解与解析,将视频脚本按照人物服装进行拆分,当人物服装在颜色、款式上有较大的变动,才判定为更换了衣服。
  11. ## 背景:我需要将一个长视频按照视频人物所穿衣服来裁切成多个视频片段,要求裁切后的视频片段中主要人物衣服没有更换。当人物服装在颜色、款式上有较大的变动,才判定为更换了衣服。
  12. ## 输出格式:
  13. ```json
  14. {
  15. "裁切位置": //<例如:frame_07-frame_08,代表在视频片段编号frame_07和视频片段编号frame_08之间裁切,如果有多个裁切位置,请以列表形式输出>
  16. }
  17. ## 注意事项:
  18. - 长视频中的人物是按照时间顺序进行衣服更换的,因此不可能出现01片段和03片段穿同一件衣服,而02片段穿不同的衣服。
  19. - 视频片段编号格式为:frame_00000600,代表这是视频片段的第600秒。
  20. - 一个长视频通常有2到3个裁切位置,一定不可能超过3个裁切位置。
  21. """
  22. def get_answer(user_prompt):
  23. completion = client.chat.completions.create(
  24. model="deepseek-v3-241226",
  25. messages=[
  26. {"role": "system", "content": system_prompt},
  27. {"role": "user", "content": user_prompt},
  28. ],
  29. )
  30. return completion.choices[0].message.content
  31. def text_classifer(user_prompt):
  32. system_prompt = """
  33. ## 任务:判断输入的文本是否在讲解衣服特性、属性
  34. ## 背景知识:
  35. ---
  36. **正例:**
  37. - 这是假两件的款式
  38. - 我采用的来自澳大利亚进口的美丽诺羊毛是羊毛中的天花板
  39. - 采用立体裁切,A字版型
  40. - 100%新疆长绒棉,亲肤透气,久穿不易起球变形。
  41. - 高腰A字裙版型,腰线提升视觉比例,下摆微蓬显腿细。
  42. - 超短上衣+低腰裤组合,五五分身材慎选,易显腿短
  43. ---
  44. **反例:** 没有说明衣服属性、特性的具体内容。
  45. - 看看喜欢的款式。
  46. - 你可以去搜去问去找羊毛,
  47. - 对我们来说工艺更难,
  48. - 顶梁柱面料。
  49. - 利亚在冬天的招牌面料自然不可能便宜。
  50. - 今天水洗绵羊毛的这条背心裙以后来一千五只有一条。
  51. ---
  52. ## 输出格式:{"讲解衣服": //<文本是否在讲解衣服特性、属性,取值范围:是、否>}
  53. ## 要求:必须以JSON格式输出提取的结果
  54. ## 注意事项:
  55. - 如果是讲衣服便宜实惠,则输出:{"讲解衣服": "否"}
  56. - 如果没有讲解出衣服属性、特性的实质内容,则输出:{"讲解衣服": "否"}
  57. """
  58. completion = client.chat.completions.create(
  59. messages = [
  60. {"role": "system", "content": system_prompt},
  61. {"role": "user", "content": user_prompt},
  62. ],
  63. model="ep-20241018084532-cgm84", # ep-20241018084532-cgm84 deepseek-v3-241226
  64. temperature = 0.01,
  65. max_tokens = 200
  66. )
  67. return completion.choices[0].message.content
  68. if __name__ == "__main__":
  69. file_path = "/data/data/luosy/project/oral/data/img_caption/"
  70. sorted_files = read_jsons_in_order(file_path)
  71. clips_content = []
  72. for filename, content in sorted_files:
  73. clip_content = str(content)
  74. clips_content.append(clip_content)
  75. user_prompt = "\n".join(clips_content)
  76. answer = get_answer(user_prompt)
  77. print(answer)