From f98a07c1780257b9d8926cedde33c5569c5beeee Mon Sep 17 00:00:00 2001
From: lyg <1543117173@qq.com>
Date: 星期三, 14 五月 2025 10:37:41 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 requirements.txt                           |    0 
 vision_test.py                             |    2 
 knowledgebase/gen_base_db/db_generate.py   |   17 +
 knowledgebase/gen_base_db/json_generate.py |  615 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 632 insertions(+), 2 deletions(-)

diff --git a/knowledgebase/gen_base_db/db_generate.py b/knowledgebase/gen_base_db/db_generate.py
index cbfa28a..87422aa 100644
--- a/knowledgebase/gen_base_db/db_generate.py
+++ b/knowledgebase/gen_base_db/db_generate.py
@@ -7,4 +7,19 @@
 
 class DbGenerate:
     def __init__(self):
-        pass
\ No newline at end of file
+        pass
+    def run(self,type):
+        # 鏍规嵁鐢熸垚鐨勭粨鏋勫寲鏁版嵁锛屾搷浣滄暟鎹簱鐢熸垚DB
+        if type is not None:
+            if type == 1:
+                self.handle_yc_database()
+            if type == 2:
+                self.handle_yk_database()
+        else:
+            self.handle_yc_database()
+            self.handle_yk_database()
+    
+    # 閬ユ祴-start
+
+
+    # 閬ユ祴-end
\ No newline at end of file
diff --git a/knowledgebase/gen_base_db/json_generate.py b/knowledgebase/gen_base_db/json_generate.py
index c19de82..52084bb 100644
--- a/knowledgebase/gen_base_db/json_generate.py
+++ b/knowledgebase/gen_base_db/json_generate.py
@@ -4,8 +4,623 @@
 # @date: 
 # @version: 
 # @description:
+import os
+import re
+import time
+import json
 
 from knowledgebase.llm import llm
+from knowledgebase import utils
+
+from langchain_core.prompts import ChatPromptTemplate
+from langchain_core.messages import HumanMessage,SystemMessage
+
+USE_CACHE = True
+
 class JsonGenerate:
     def __init__(self):
         self.llm = llm
+        self.systemPrompt = """
+            # 瑙掕壊
+            浣犳槸涓�鍚嶈祫娣辩殑杞欢宸ョ▼甯堬紝鎿呴暱杩涜鏂囨。鍒嗘瀽鍜岄�氫俊鍗忚鍒嗘瀽锛屽悓鏃惰兘澶熻В鏋� markdown 绫诲瀷鐨勬枃妗c�傛嫢鏈夋垚鐔熷噯纭殑鏂囨。闃呰涓庡垎鏋愯兘鍔涳紝鑳藉濡ュ杽澶勭悊澶氭枃妗i棿瀛樺湪寮曠敤鍏崇郴鐨勫鏉傛儏鍐点��
+
+            ## 鎶�鑳�
+            ### 鎶�鑳� 1锛氭枃妗e垎鏋愶紙鍖呮嫭 markdown 鏂囨。锛�
+            1. 褰撶敤鎴锋彁渚涙枃妗f椂锛屼粩缁嗛槄璇绘枃妗e唴瀹癸紝涓ユ牸鎸夌収鏂囨。涓殑鎻忚堪鎻愬彇鍏抽敭淇℃伅锛屼笉寰楀姞鍏ヨ嚜宸辩殑鍥炵瓟鎴栧缓璁��
+            2. 鍒嗘瀽鏂囨。鐨勭粨鏋勩�佷富棰樺拰閲嶇偣鍐呭锛屽悓鏍峰彧渚濇嵁鏂囨。杩涜琛ㄨ堪銆�
+            3. 濡傛灉鏂囨。闂村瓨鍦ㄥ紩鐢ㄥ叧绯伙紝姊崇悊寮曠敤鑴夌粶锛屾槑纭悇鏂囨。涔嬮棿鐨勫叧鑱旓紝涓斾粎鍛堢幇鏂囨。涓綋鐜扮殑鍐呭銆�
+
+            ### 鎶�鑳� 2锛氶�氫俊鍗忚鍒嗘瀽
+            1. 鎺ユ敹閫氫俊鍗忚鐩稿叧淇℃伅锛岀悊瑙e崗璁殑瑙勫垯鍜屾祦绋嬶紝浠呬緷鎹墍缁欎俊鎭繘琛屽垎鏋愩��
+
+            ## 鑳屾櫙鐭ヨ瘑
+            ###杞欢涓昏鍔熻兘涓庤繍琛屾満鍒舵�荤粨濡備笅锛�
+            1. 鏁版嵁閲囬泦鍜屽鐞嗭細
+            DIU璐熻矗鏍规嵁鍗槦鐨勫伐浣滅姸鎬佹垨妯″紡鎻愪緵閬ユ祴鏁版嵁锛屽寘鎷ā鎷熼噺锛圓N锛夈�佹�荤嚎淇″彿锛圔L锛変互鍙婃俯搴︼紙TH锛夊拰鏁板瓧閲忥紙DS锛夛紝骞跺皢杩欎簺淇℃伅鎵撳寘锛岄�氳繃鎬荤嚎鍙戦�佺粰SMU銆�
+            SMU鍒欐敹闆嗙‖閫氶亾涓婄殑閬ユ祴鍙傛暟锛屽苟閫氳繃鎬荤嚎鎺ユ敹DIU閲囬泦鐨勪俊鎭��
+            2. 澶氳矾澶嶇敤涓庢暟鎹紶杈擄細
+            閬ユ祴婧愬寘琚粍缁囨垚E-PDU锛岃繘涓�姝ュ鐢ㄤ负M-PDU锛屽苟濉厖鍒癡CDU涓瀯鎴愰仴娴嬪抚銆�
+            鍒╃敤CCSDS AOS CADU鏍煎紡杩涜閬ユ祴鏁版嵁鐨勫璺鐢ㄥ拰浼犺緭銆�
+            3. 铏氭嫙淇¢亾锛圴C锛夎皟搴︽満鍒讹細
+            閫氳繃甯歌閬ユ祴VC銆佺獊鍙戞暟鎹甐C銆佸欢鏃堕仴娴媀C銆佽褰曟暟鎹甐C浠ュ強鍥炴斁VC瀹炵幇涓嶅悓绫诲瀷鐨勬暟鎹笅浼犮��
+            4. 閬ユ帶鎸囦护澶勭悊锛�
+            涓婅閬ユ帶鍖呮嫭鐩存帴鎸囦护鍜岄棿鎺ユ寚浠わ紝闇�缁忚繃鏍煎紡楠岃瘉鍚庤浆鍙戠粰鐩稿簲鍗曟満鎵ц銆�
+            閬ユ帶甯ч�氳繃鐗瑰畾鐨勮櫄鎷熶俊閬擄紙VC锛夎繘琛屼紶杈撱��
+            杩欎簺鐭ヨ瘑闇�瑕佷綘璁颁綇锛屽啀鍚庣画鐨勫鐞嗕腑鍙互甯姪浣犵悊瑙h澶勭悊鐨勬暟鎹��
+
+            ## 鐩爣瀵煎悜
+            1. 閫氳繃瀵规枃妗e拰閫氫俊鍗忚鐨勫垎鏋愶紝涓虹敤鎴锋彁渚涙竻鏅般�佸噯纭殑鏁版嵁缁撴瀯锛屽府鍔╃敤鎴锋洿濂藉湴鐞嗚В鍜屼娇鐢ㄧ浉鍏充俊鎭��
+
+            ## 瑙勫垯
+            1. 姣忎竴涓瀷鍙烽兘浼氭湁涓�濂楁枃妗o紝闇�鍑嗙‘鍒ゆ柇鏄惁涓哄悓涓�涓瀷鍙风殑鏂囨。鍚庡啀杩涜鏁翠綋鍒嗘瀽锛屾瘡娆″彧鍒嗘瀽鍚屼竴涓瀷鍙风殑鏂囨。銆�
+            2. 澶у鏁版枃妗g粨鏋勪负锛氬瀷鍙蜂笅鍖呭惈璁惧锛岃澶囦笅鍖呭惈鏁版嵁娴侊紝鏁版嵁娴佷笅鍖呭惈鏁版嵁甯э紝鏁版嵁甯т腑鏈変竴鍧楁槸鍖呭煙锛屽寘鍩熶腑浼氭寕杞藉悇绉嶇被鍨嬬殑鏁版嵁鍖呫��
+            3. 鏂囨。閮芥槸瀵逛簬鏁版嵁浼犺緭鍗忚鐨勬弿杩帮紝鍦ㄦ暟鎹祦銆佹暟鎹抚銆佹暟鎹寘绛変紶杈撳疄浣撲腑閮芥弿杩颁簡鍚勪釜瀛楁鐨勫垎甯冦�佸悇涓瓧娈电殑澶у皬鍜屼綅缃瓑淇℃伅锛屼笖澶у皬鍗曚綅涓嶇粺涓�锛岄渶鐞嗚В杩欎簺鍗曚綅锛屽苟灏嗘墍鏈夎緭鍑哄崟浣嶇粺涓�涓� bits锛岄暱搴﹀瓧娈典娇鐢� length 琛ㄧず锛屼綅缃瓧娈典娇鐢� pos 琛ㄧず锛屽鏋滀负鍙橀暱浣跨敤鈥�"鍙橀暱"鈥濊〃绀恒��
+            4. 濡傛灉鏈夊眰绾э紝浣跨敤鏍戝舰 JSON 杈撳嚭锛屽鏋滄湁瀛愯妭鐐癸紝瀛愯妭鐐� key 浣跨敤children锛涢渶淇濊瘉涓�娆¤緭鍑虹殑鏁版嵁缁撴瀯缁熶竴锛屽苟涓斿垽鏂瘡涓眰绾ф槸浠�涔堢被鍨嬶紝杈撳嚭绫诲瀷瀛楁锛坱ype锛夛紝绫诲瀷瀛楁鐨� key 浣跨敤 type锛岀被鍨嬪寘鎷細鍨嬪彿锛坧roject锛夈�佽澶囷紙dev锛夈�佸皝瑁呭寘锛坋nc锛夈�佺嚎鎬у寘锛坙inear锛夈�佸弬鏁帮紙para锛夛紝灏佽鍖呭瓙绾ф湁鏁版嵁鍖咃紝鎵�浠ype涓篹nc锛岀嚎鎬у寘瀛愮骇鍙湁鍙傛暟锛屾墍浠ype涓簂inear锛涙瘡涓眰绾ч兘鍖呭惈鍋忕Щ浣嶇疆锛坧os锛夛紝姣忎釜灞傜骇鐨勫亸绉讳綅缃粠0寮�濮嬨��
+            5. 鍚嶇О鐩稿叧鐨勫瓧娈电殑 key 浣跨敤name锛涗唬鍙枫�佺紪鍙锋垨鑰呭敮涓�鏍囪瘑鐩稿叧鐨勫瓧娈电殑key浣跨敤id锛宨d鐢辨暟瀛椼�佽嫳鏂囧瓧姣嶃�佷笅鍒掔嚎缁勬垚涓斾互鑻辨枃瀛楁瘝寮�澶达紝闀垮害灏介噺绠�鐭紱搴忓彿鐩稿叧鐨勫瓧娈电殑key浣跨敤number锛涘亸绉讳綅缃浉鍏冲瓧娈电殑key浣跨敤pos锛涘叾浠栨病鏈変妇渚嬬殑瀛楁浣跨敤绮剧畝鐨勭炕璇戜綔涓哄瓧娈电殑key锛涙瘡涓粨鏋勫繀椤诲寘鍚玭ame鍜宨d銆�
+            6. 閬ユ祴甯т负CADU锛屽叾涓寘鍚悓姝ュご鍜孷CDU锛屾寜鐓т範鎯渶瑕佷娇鐢╒CDU灞傜骇宓屽浼犺緭甯т富瀵煎ご銆佷紶杈撳抚鎻掑叆鍩熴�佷紶杈撳抚鏁版嵁鍩熴�佷紶杈撳抚灏剧殑缁撴瀯銆�
+            7. 鏁版嵁鍖呭瓧娈靛寘鎷細name銆乮d銆乼ype銆乸os銆乴ength銆乧hildren锛涘弬鏁板瓧娈靛寘鎷細name銆乮d銆乸os銆乼ype銆乴ength锛涘繀椤诲寘鍚玴os鍜宭ength瀛楁銆�
+            8. 甯哥敤id鍙傝�冿細閬ユ祴锛圱M锛夈�侀仴鎺э紙TC锛夈�佹�荤嚎锛圔US锛夈�佺増鏈彿锛圴er锛夈�佸簲鐢ㄨ繃绋嬫爣璇嗭紙APID锛夈��
+            9. 娉ㄦ剰锛氫竴瀹氳璁板緱morkdown鏂囨。涓細灏嗕竴浜涚壒娈婂瓧绗﹁繘琛岃浆涔夛紝浠ユ鏉ヤ繚璇佹枃妗g殑姝g‘鎬э紝杩欎簺杞箟绗﹀彿锛堜篃灏辨槸鍙嶆枩鏉犫�榎鈥欙級涓嶉渶瑕佸湪缁撴灉涓緭鍑恒��
+            10. 浠� JSON 鏍煎紡缁勭粐杈撳嚭鍐呭锛岀‘淇濇暟鎹粨鏋勭殑瀹屾暣鎬у拰鍙鎬э紝娉ㄦ剰锛氱敓鎴愮殑JSON璇硶鏍煎紡蹇呴』绗﹀悎json瑙勮寖锛岄伩鍏嶅嚭鐜伴敊璇��
+                
+            ## 闄愬埗锛�
+            - id鍜宑ode鐨勫懡鍚嶈鍒欙細鑻辨枃瀛楁瘝銆佹暟瀛椼�佷笅鍒掔嚎缁勬垚锛屼笖浠ヨ嫳鏂囧瓧姣嶆垨涓嬪垝绾垮紑澶淬��
+            - 鎵�杈撳嚭鐨勫唴瀹瑰繀椤绘寜鐓SON鏍煎紡杩涜缁勭粐锛屼笉鑳藉亸绂绘鏋惰姹傦紝涓斾弗鏍奸伒寰枃妗e唴瀹硅繘琛岃緭鍑猴紝鍙緭鍑� JSON 锛屼笉瑕佽緭鍑哄叾瀹冩枃瀛椼��
+            - 涓嶈緭鍑轰换浣曟敞閲婄瓑鎻忚堪鎬т俊鎭��
+        """
+        
+    # 妯″瀷璋冪敤
+    def call_model(self, msg, cache_file, doc, validation=None, try_cnt=3):
+        if USE_CACHE and os.path.isfile(cache_file):
+            with open(cache_file, 'r', encoding='utf-8') as f:
+                text = f.read()
+        else:
+            s = time.time()
+            messages = [SystemMessage(self.systemPrompt)]
+            for info in doc:
+                messages.append(HumanMessage(info))
+            prompt = ChatPromptTemplate.from_messages(messages)
+            chain = prompt | self.llm
+            resp = chain.invoke({"msg": msg})
+            text = resp.content
+            if validation:
+                try:
+                    validation(text)
+                except BaseException as e:
+                    print(e)
+                    if try_cnt <= 0:
+                        raise RuntimeError('鐢熸垚澶辫触锛岄噸璇曟鏁板お澶氾紝寮哄埗缁撴潫锛�')
+                    return self.call_model(msg, cache_file, validation, try_cnt - 1)
+            if cache_file:
+                with open(cache_file, 'w', encoding='utf-8') as f:
+                    f.write(text)
+            print(f'鑰楁椂锛歿time.time() - s}')
+        return text
+
+    # :param type: int - None 鍏ㄩ儴銆�1 閬ユ祴銆�2 閬ユ帶
+    def run(self,type):
+        # 鏍规嵁鏂囨。锛岀敓鎴愮粨鏋勫寲鏁版嵁
+        if type is not None:
+            if type == 1:
+                self.handle_yc_structured_data()
+            if type == 2:
+                self.handle_yk_structured_data()
+        else:
+            self.handle_yc_structured_data()
+            self.handle_yk_structured_data()
+    
+    # 閬ユ祴-start
+    def handle_yc_structured_data(self):
+        self.gen_project()
+        self.gen_device()
+
+    # 鑾峰彇椤圭洰淇℃伅
+    def gen_project(self):
+        _msg = '鏍规嵁鏂囨。杈撳嚭鍨嬪彿淇℃伅锛屽瀷鍙峰瓧娈靛寘鎷細鍚嶇О鍜屼唬鍙枫�備粎杈撳嚭鍨嬪彿杩欎竴绾с�備緥濡傦細{"name":"xxx","id":"xxx"}'
+        result = self.call_model(_msg, 'out/鍨嬪彿淇℃伅.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'])
+        print('鍨嬪彿淇℃伅锛�' + result)
+
+    # 鑾峰彇璁惧淇℃伅
+    def gen_device(self):
+        _msg = """
+            # 鎸囦护
+            鎴戦渶瑕佷粠鏂囨。鎻愬彇璁惧鍒楄〃淇℃伅锛屼綘瑕佸府鍔╂垜瀹屾垚璁惧鍒楄〃淇℃伅鎻愬彇銆�
+            # 闇�姹�
+            杈撳嚭鍒嗙郴缁熶笅鐨勭‖浠朵骇鍝侊紙璁惧锛夊垪琛紝纭欢浜у搧鍚嶇О涓�鑸細鍖呭惈鈥滅鐞嗗崟鍏冣�濇垨鑰呪�滄帴鍙e崟鍏冣�濓紱
+            # 瀛楁鍖呮嫭锛�
+            - 鍚嶇О(name)锛氳澶囧悕绉帮紱
+            - 浠e彿(code)锛氳澶囦唬鍙凤紱
+            - 鏄惁鍖呭惈閬ユ帶閬ユ祴(hasTcTm)锛氭爣璇嗚纭欢浜у搧鏄惁鍖呭惈閬ユ帶閬ユ祴鐨勫姛鑳斤紝甯冨皵鍊紅rue鎴杅alse锛�
+            - 鏄惁鍖呭惈娓╁害閲忔ā鎷熼噺绛夋暟鎹殑閲囬泦(hasTemperatureAnalog)锛氭爣璇嗚纭欢浜у搧鏄惁鍖呭惈娓╁害閲忕瓑淇℃伅鐨勯噰闆嗗姛鑳斤紝甯冨皵鍊紅rue鎴杅alse锛�
+            - 鏄惁鏈夋�荤嚎纭欢浜у搧(hasBus)锛氭爣璇嗚璁惧鏄惁灞炰簬鎬荤嚎纭欢浜у搧锛屾槸鍚︽湁RT鍦板潃锛屽竷灏斿�紅rue鎴杅alse锛�
+            # 绾︽潫
+            - 濡傛灉娌℃湁浠e彿鍒欎娇鐢ㄥ悕绉扮殑鑻辨枃缂╁啓浠f浛缂╁啓闀垮害涓嶈秴杩�5涓瓧绗︼紱
+            - 鏁版嵁缁撴瀯鏈�澶栧眰涓烘暟缁勶紝鏁扮粍鍏冪礌涓鸿澶囦俊鎭�
+            - 浠呰緭鍑篔SON锛屼笉瑕佽緭鍑篔SON浠ュ鐨勪换浣曞瓧绗︺��
+            # 渚嬪瓙
+            [
+                {
+                    "name": "绯荤粺绠$悊鍗曞厓",
+                    "code": "SMU",
+                    "hasTcTm": true,
+                    "hasTemperatureAnalog": false,
+                    "hasBus": true
+                },
+                {
+                    "name": "1553B鎬荤嚎",
+                    "code": "1553",
+                    "hasTcTm": true,
+                    "hasTemperatureAnalog": true,
+                    "hasBus": true
+                }
+            ]
+        """
+        result = self.call_model(_msg, 'out/璁惧鍒楄〃.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'])
+        print('璁惧鍒楄〃锛�' + result)
+
+        devs = json.loads(result)
+        # 绫籗MU璁惧锛屽寘鍚仴娴嬪拰閬ユ帶鍔熻兘锛屽悕绉扮粨灏句负鈥滅鐞嗗崟鍏冣��
+        like_smu_devs = list(filter(lambda it: it['hasTcTm'] and it['name'].endswith('绠$悊鍗曞厓'), devs))
+        for dev in like_smu_devs:
+            self.gen_tm_frame(dev)
+        # 鎬荤嚎
+        self.gen_bus()
+
+    def gen_tm_frame(self,dev):
+        # 鎻掑叆鍩熷弬鏁板垪琛�
+        self.gen_insert_domain_params(dev)
+        # 鑾峰彇铏氭嫙淇¢亾 vc
+        vcs = self.gen_vc(dev)
+        # 鑾峰彇vc婧愬寘
+        vc_pkts = self.gen_pkt_vc(dev)
+        # 鑾峰彇婧愬寘鍒楄〃
+        tm_pkts = self.gen_pkts(dev)
+
+        # 鑾峰彇VC涓嬮潰鐨勯仴娴嬪寘鏁版嵁
+        for vc in vcs:
+            # 姝C涓嬬殑閬ユ祴鍖呰繃婊�
+            _vc_pkts = filter(lambda it: it['vcs'].__contains__(vc['id']), vc_pkts)
+            for _pkt in _vc_pkts:
+                # 鍒ゆ柇閬ユ祴鍖呮槸鍚︽湁璇︾粏瀹氫箟
+                if not next(filter(lambda it: it['name'] == _pkt['name'] and it['hasParams'], tm_pkts), None):
+                    continue
+                # 鑾峰彇鍖呰鎯�
+                _pkt = self.gen_pkt_details(_pkt['name'], _pkt['id'])
+
+    def gen_insert_domain_params(self,dev):
+        _msg = """
+            # 鎸囦护
+            鎴戦渶瑕佷粠鏂囨。涓彁鍙栨彃鍏ュ煙鐨勫弬鏁板垪琛紝浣犺甯姪鎴戝畬鎴愭彃鍏ュ煙鍙傛暟鍒楄〃鐨勬彁鍙栥��
+            # 闇�姹�
+            鍒嗘瀽鏂囨。锛岃緭鍑烘彃鍏ュ煙鐨勫弬鏁板垪琛紝灏嗘墍鏈夊弬鏁板叏閮ㄨ緭鍑恒��
+            鍙傛暟淇℃伅瀛楁鍖呮嫭锛歯ame锛堝弬鏁板悕绉帮級銆乮d锛堝弬鏁颁唬鍙凤級銆乸os锛堝弬鏁拌捣濮媌it浣嶇疆锛夈�乴ength锛堝弬鏁癰it闀垮害锛夈�乼ype锛堢被鍨嬶細para锛夈��
+            娉ㄦ剰锛�
+            1涓瓧鑺傜殑闀垮害涓�8浣嶏紝浣跨敤B0-B7鏉ヨ〃绀猴紝璇风簿纭绠楀弬鏁伴暱搴︺��
+            鏂囨。涓綅缃弿杩颁俊鎭彲鑳藉瓨鍦ㄨ法瀛楄妭鐨勬儏鍐碉紝渚嬪锛�"Byte1_B6~Byte2_B0":琛ㄧず浠庣1涓瓧鑺傜殑绗�7浣嶅埌绗�2涓瓧鑺傜殑绗�1浣嶏紝闀垮害鏄�3;"Byte27_B7~Byte28_B0":琛ㄧず浠庣27涓瓧鑺傜殑绗�8浣嶅埌绗�28涓瓧鑺傜殑绗�1浣嶏紝闀垮害鏄�2銆�
+            # 绾︽潫
+            - 涓嶈閬楁紡浠讳綍鍙傛暟锛�
+            - 鏁版嵁缁撴瀯鏈�澶栧眰涓烘暟缁勶紝鏁扮粍鍏冪礌涓哄弬鏁颁俊鎭璞★紱
+            - 浠呰緭鍑篔SON鏂囨湰銆�
+            # 渚嬪瓙
+            [
+            {
+                "name": "閬ユ祴妯″紡瀛�",
+                "id": "TMS215",
+                "pos": 0,
+                "length": 8,
+                "type": "para"
+            }
+            ]
+        """
+        def validation(gen_text):
+            params = json.loads(gen_text)
+            assert isinstance(params, list), '鎻掑叆鍩熷弬鏁板垪琛ㄦ暟鎹粨鏋勬渶澶栧眰蹇呴』鏄暟缁�'
+            assert len(params), '鎻掑叆鍩熷弬鏁板垪琛ㄤ笉鑳戒负绌�'
+        result = self.call_model(_msg, 'out/'+dev.code+'_鎻掑叆鍩熷弬鏁板垪琛�.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation)
+        print('鎻掑叆鍩熷弬鏁板垪琛細' + result)
+    
+    def gen_vc(self,dev):
+        _msg = """
+            # 鎸囦护
+            鎴戦渶瑕佷粠鏂囨。涓彁鍙栬櫄鎷熶俊閬撳垪琛紝浣犺甯姪鎴戝畬鎴愯櫄鎷熶俊閬撳垪琛ㄧ殑鎻愬彇銆�
+            # 闇�姹�
+            璇峰垎鏋愭枃妗d腑鐨勯仴娴嬪寘鏍煎紡浠ュ強閬ユ祴铏氭嫙淇¢亾锛岃緭鍑洪仴娴嬭櫄鎷熶俊閬撳垪琛ㄣ��
+            瀛楁鍖呮嫭锛歩d锛堣櫄鎷熶俊閬撲唬鍙凤級銆乶ame锛堣櫄鎷熶俊閬撳悕绉帮級銆乂CID锛堣櫄鎷熶俊閬揤CID锛屼簩杩涘埗锛夈�乫ormat锛堟牴鎹櫄鎷熶俊閬撶被鍨嬭幏鍙栧搴旂殑鏁版嵁鍖呯殑鏍煎紡鐨勫悕绉帮級
+            # 涓婁笅鏂�
+            娣卞叆鐞嗚В鏂囨。涓弿杩扮殑鍏崇郴锛屼緥濡傦細鏂囨。涓弿杩颁簡甯歌閬ユ祴鏄父瑙勬暟鎹殑涓嬩紶淇¢亾锛屽苟涓旇繕鎻忚堪浜嗗垎绯荤粺甯歌閬ユ祴鍙傛暟鍖呭氨鏄疄鏃堕仴娴嬪弬鏁板寘锛屽苟涓旀枃妗d腑瀵瑰疄鏃堕仴娴嬪弬鏁板寘鐨勬牸寮忚繘琛屼簡鎻忚堪锛屾墍浠ュ父瑙勯仴娴媀C搴旇杈撳嚭涓猴細{"id": "1", "name": "甯歌閬ユ祴VC", "VCID": "0", "format": "瀹炴椂閬ユ祴鍙傛暟鍖�"}
+            # 绾︽潫
+            - 鏁版嵁缁撴瀯鏈�澶栧眰涓烘暟缁勶紝鏁扮粍鍏冪礌涓鸿櫄鎷熶俊閬撲俊鎭紱
+            - format锛氬繀椤绘槸鏁版嵁鍖呮牸寮忕殑鍚嶇О锛�
+            - 浠呰緭鍑篔SON鏂囨湰銆�
+            # 渚嬪瓙锛�
+            [
+                {
+                    "id": "VC0",
+                    "name": "绌洪棽淇¢亾",
+                    "VCID": "111111",
+                    "format": "绌洪棽鍖�"
+                }
+            ]
+        """
+
+        def validation(gen_text):
+            vcs = json.loads(gen_text)
+            assert next(filter(lambda it: re.match('^[0-1]+$', it['VCID']), vcs)), '鐢熸垚鐨刅CID蹇呴』鏄簩杩涘埗'
+        result = self.call_model(_msg, 'out/'+dev.code+'_铏氭嫙淇¢亾.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation)
+        print('铏氭嫙淇¢亾锛�' + result)
+        return json.loads(result)
+        
+    def gen_pkt_vc(self,dev):
+        _msg = """
+            # 鎸囦护
+            鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呬俊鎭紝浣犺甯姪鎴戝畬鎴愰仴娴嬫簮鍖呬俊鎭殑鎻愬彇銆�
+            # 闇�姹�
+            鏍规嵁鈥濋仴娴嬫簮鍖呬笅浼犳椂鏈哄畾涔夆�滅珷鑺傜殑鍐呭杈撳嚭鍚勪釜閬ユ祴婧愬寘淇℃伅鍒楄〃锛岄《绾х粨鏋勪负鏁扮粍鍏冪礌涓洪仴娴嬫簮鍖咃紝婧愬寘瀛楁鍖呮嫭锛氬寘浠e彿(id)锛屽悕绉�(name)锛屾墍灞炶櫄鎷熶俊閬�(vcs)锛屼笅浼犳椂鏈猴紙timeTags锛夈��
+            # 绾︽潫
+            - 浠庘�濋仴娴嬫簮鍖呬笅浼犳椂鏈哄畾涔夆�滅珷鑺備腑鎻愬彇閬ユ祴婧愬寘淇℃伅锛�
+            - 鎵�灞炶櫄鎷熶俊閬擄細蹇呴』鏄枃妗d腑鎻忚堪鐨勯仴娴嬭櫄鎷熶俊閬撲唬鍙凤紙搴忓彿锛夛紱
+            - 涓嬩紶鏃舵満锛氫笌琛ㄦ牸涓畾涔夌殑涓�鑷达紱
+            - 涓嶈閬楁紡浠讳綍閬ユ祴婧愬寘銆�
+            # 渚嬪瓙锛�
+            [
+            {
+                "id": "PMS001",
+                "name": "鏁扮鏁板瓧閲忓揩閫熸簮鍖�",
+                "vcs": ["VC1"],
+                "timeTags": ["瀹炴椂"]
+            },
+            ]
+        """
+        def validation(gen_text):
+            pkts = json.loads(gen_text)
+            assert len(pkts), 'VC婧愬寘鍒楄〃涓嶈兘涓虹┖'
+        result = self.call_model(_msg, 'out/'+dev.code+'_閬ユ祴VC婧愬寘.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation)
+        print('閬ユ祴婧愬寘鎵�灞炶櫄鎷熶俊閬擄細' + result)
+        return json.loads(result)
+
+    def gen_pkts(self,dev):
+        _msg = """
+            # 鎸囦护
+            鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬪寘鏁版嵁锛屼綘瑕佹牴鎹枃妗e唴瀹瑰府鎴戝畬鎴愰仴娴嬪寘鏁版嵁鐨勬彁鍙栥��
+            # 闇�姹�
+            杈撳嚭鏂囨。涓弿杩扮殑閬ユ祴鍖呭垪琛紝閬ユ祴鍖呭瓧娈靛寘鎷細鍚嶇О(name)銆佷唬鍙�(id)銆佹槸鍚︽湁鍙傛暟(hasParams)銆�
+            瀛楁鎻忚堪锛�
+            1.鍚嶇О锛氶仴娴嬪寘鐨勫悕绉帮紱
+            2.浠e彿锛氶仴娴嬪寘鐨勪唬鍙凤紱
+            3.鏄惁鏈夊弬鏁帮細琛ㄧず褰撳墠閬ユ祴鍖呮槸鍚︽湁鍙傛暟鍒楄〃锛岄仴娴嬪寘鐨勫弬鏁拌〃绱ф帴鐫�閬ユ祴鍖呯珷鑺傛爣棰橈紝濡傛灉绔犺妭鏍囬鍚庨潰鐪佺暐浜嗘垨鑰呯被浼尖�濊瑙亁xx鈥滃垯鏄病鏈夊弬鏁拌〃銆�
+            # 绾︽潫
+            - name锛氬悕绉颁腑涓嶈鍖呭惈浠e彿锛屼粎浠庢枃妗d腑鎻愬彇婧愬寘鍚嶇О锛�
+            - hasParams锛氬�间负甯冨皵鍊硷紝true鎴杅alse锛�
+            - 濡傛灉娌℃湁浠e彿锛屼娇鐢ㄩ仴娴嬪寘鍚嶇О鐨勮嫳鏂囩炕璇戜唬鏇匡紱
+            - 濡傛灉娌℃湁鍚嶇О鐢ㄤ唬鍙蜂唬鏇匡紱
+            - 涓嶈婕忔帀浠讳綍閬ユ祴鍖咃紱
+            - 鏁版嵁缁撴瀯鏈�澶栧眰涓烘暟缁勬暟缁勫厓绱犱负閬ユ祴鍖咃紝涓嶅寘鎷仴娴嬪寘涓嬮潰鐨勫弬鏁般��
+            # 渚嬪瓙
+            [
+                {
+                    "name": "鏁扮鏁板瓧閲忓揩閫熸簮鍖�",
+                    "id": "PMS001",
+                    "hasParams": true
+                }
+            ]
+        """
+        result = self.call_model(_msg, 'out/'+dev.code+'_婧愬寘鍒楄〃.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'])
+        print('閬ユ祴婧愬寘鍒楄〃锛�' + result)
+        return json.loads(result)
+    
+    def gen_pkt_details(self, pkt_name, pkt_id):
+        _msg = f"""
+            # 鎸囦护
+            鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呯殑鏈�鍚庝竴涓弬鏁扮殑bit浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟锛屼綘瑕佸府鎴戝畬鎴愬弬鏁癰it浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟鐨勬彁鍙栥��
+            # 闇�姹�
+            杈撳嚭鏂囨。涓弿杩扮殑鍚嶇О涓衡�渰pkt_name}鈥濅唬鍙蜂负鈥渰pkt_id}鈥濋仴娴嬪寘鐨勬渶鍚庝竴涓弬鏁扮殑bit浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟銆�
+            # 绾︽潫
+            - 閬ユ祴婧愬寘鐨勫唴瀹瑰湪涓�涓〃鏍间腑瀹氫箟锛岃〃鏍肩粨鏉熷垯鍖呭唴瀹圭粨鏉燂紱
+            - 鏁版嵁鍩熶腑姣忎竴琛屽搴斾竴涓弬鏁帮紱
+            - 涓嶈璺ㄨ〃鏍兼彁鍙栵紱
+            - 瀛楄妭浣嶇疆涓瓧鑺備綅缃槸浠�1寮�濮嬬殑锛宐it浣嶇疆鏄粠0寮�濮嬬殑锛�
+            - bit浣嶇疆璁$畻鍏紡涓猴細(N-1)*8+B锛屽叾涓璑鏄瓧鑺傛暟锛孊鏄痓it鏁帮紱
+            - 浠呰緭鍑簀son锛屼笉瑕佽緭鍑哄叾浠栦换浣曞瓧绗︺��
+            # 渚嬪瓙锛�
+            {"last_par_pos":128, "par_num": 20}
+        """
+        text = self.call_model(_msg, '', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'])
+        result = json.loads(text)
+        last_par_pos = result['last_par_pos']
+        par_num = result['par_num']
+
+        _msg = f"""
+            # 鎸囦护
+            鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呬俊鎭垪琛紝浣犺甯垜瀹屾垚閬ユ祴婧愬寘淇℃伅鍒楄〃鐨勬彁鍙栥��
+            # 闇�姹�
+            杈撳嚭鏂囨。涓弿杩扮殑鍚嶇О涓衡�渰pkt_name}鈥濅唬鍙蜂负鈥渰pkt_id}鈥濋仴娴嬪寘銆�
+            娉ㄦ剰锛氭渶鍚庝竴涓弬鏁扮殑璧峰bit鍋忕Щ浣嶇疆涓簕last_par_pos}銆�
+            """ + """
+            閬ユ祴鍖呭瓧娈靛寘鎷細鍚嶇О(name)銆佷唬鍙�(id)銆佺被鍨�(type)銆佸寘澶村睘鎬у垪琛�(headers)銆佹暟鎹煙鍙傛暟鍒楄〃(datas)锛岀被鍨嬩负 linear锛�
+            鍖呭ご鐨勫睘鎬х殑瀛楁鍖呮嫭锛氬悕绉�(name)銆佷唬鍙�(id)銆佷綅缃�(pos)銆佸畾涔�(content)銆侀暱搴�(length)銆佺被鍨�(type)锛岀被鍨嬩负 para锛�
+            鏁版嵁鍩熷弬鏁板瓧娈靛寘鎷細鍙傛暟鍚嶇О(name)銆佸弬鏁颁唬鍙�(id)銆佷綅缃�(pos)銆侀暱搴�(length)銆佸瓧鑺傞『搴�(byteOrder)锛岀被鍨嬩负 para锛�
+
+            鍖呭ご灞炴�у寘鎷細鍖呯増鏈彿銆佸寘绫诲瀷銆佸壇瀵煎ご鏍囪瘑銆佸簲鐢ㄨ繃绋嬫爣璇嗐�佸簭鍒楁爣璁般�佸寘搴忓垪璁℃暟銆佸寘闀裤�佹湇鍔°�佸瓙鏈嶅姟銆�
+            鍖呭ご灞炴�х殑闀垮害锛氬寘鐗堟湰鍙凤紙3锛夈�佸寘绫诲瀷锛�1锛夈�佸壇瀵煎ご鏍囪瘑锛�1锛夈�佸簲鐢ㄨ繃绋嬫爣璇嗭紙11锛夈�佸簭鍒楁爣璁帮紙2锛夈�佸寘搴忓垪璁℃暟锛�14锛夈�佸寘闀匡紙16锛夈�佹湇鍔★紙8锛夈�佸瓙鏈嶅姟锛�8锛夈��
+
+            琛ㄦ牸鍗曞厓鏍煎悎骞惰鏄庯細鍖呮牸涓瓨鍦ㄥ崟鍏冩牸鍚堝苟鐨勬儏鍐碉紝濡傛灉姘村钩鎴栧瀭鐩寸浉閭荤殑鍗曞厓鏍煎唴瀹逛竴鏍烽偅涔堣繖鍑犱釜鍐呭涓�鏍风殑鍗曞厓鏍兼湁鍙兘鏄竴涓悎骞跺崟鍏冩牸鍦ㄥ垎鏋愭椂搴旇褰撲綔鍚堝苟鍗曞厓鏍煎垎鏋愩��
+            # 绾︽潫
+            - 浠e彿鍛藉悕瑙勫垯锛氭暟瀛椼�佽嫳鏂囧瓧姣嶅拰涓嬪垝绾跨粍鎴愪笖浠ヨ嫳鏂囧瓧姣嶅拰涓嬪垝绾垮紑澶达紱
+            - 濡傛灉娌℃湁鍚嶇О鐢ㄤ唬鍙蜂唬鏇匡紝濡傛灉娌℃湁浠e彿鐢ㄥ悕绉扮殑鑻辨枃缈昏瘧浠f浛锛岀炕璇戝敖閲忕畝鐭紱
+            - 濡傛灉鏈変唬鍙蜂弗鏍间緷鐓ф枃妗d腑鐨勪唬鍙凤紝鏂囨。涓殑浠e彿濡傛灉涓嶇鍚堜唬鍙峰懡鍚嶈鍒欏皢鐗规畩瀛楃杞崲涓轰笅鍒掔嚎锛屼緥濡傦細Rsv-1杞崲涓篟sv_1锛�
+            - 浣犻渶瑕佺悊瑙f暟鎹寘鐨勪綅缃俊鎭紝鐢变綅缃俊鎭緱鍒伴暱搴︼紝骞朵笖灏嗘墍鏈夎緭鍑哄崟浣嶇粺涓�杞崲涓� bits锛�
+            - pos瀛楁锛氭暟鍊肩被鍨嬶紝浠�0寮�濮嬭绠楋紝鐢遍暱搴︼紙length锛夌疮鍔犲緱鍒帮紱
+            - 搴旂敤杩囩▼鏍囪瘑锛氬鏋滀笉鏄崄鍏繘鍒惰浆鎹负鍗佸叚杩涘埗锛岃浆鎹㈠畬鎴愬悗瑕侀獙璇佹槸鍚︽纭紝浠�0x寮�澶达紝锛�
+            - 鍖呭ご鍚庨潰鐨勬瘡涓�琛岄兘瀵瑰簲涓�涓弬鏁帮紝閫愯杈撳嚭鍙傛暟锛屼笉瑕侀仐婕忎换浣曞弬鏁帮紱
+            - 绫讳技鈥濅繚鐣欙紙Rsv锛夆�滅殑琛屼篃瑕佸綋鍙傛暟鐢熸垚锛�
+            - 閲嶅鐨勮涔熻鐢熸垚锛�
+            - 娉ㄦ剰鍖呭唴瀹圭殑鑼冨洿锛屼笉瑕佹彁鍙栧埌鍏朵粬鍖呬腑鐨勫唴瀹癸紝鍖呭唴瀹归兘鍦ㄥ悓涓�涓〃鏍间腑锛�
+            - 瀛楄妭椤哄簭锛氬�间负澶х鈥淏鈥濓紝灏忕鈥淟鈥濓紝榛樿涓衡�淏鈥濓紱
+            - 杈撳嚭涓ユ牸鎸夌収鏂囨。涓殑鍐呭鐢熸垚锛屼笉瑕佸垱閫犳枃妗d腑涓嶅瓨鍦ㄧ殑鍐呭锛�
+            - 浠呰緭鍑簀son锛屼笉瑕佽緭鍑轰换浣曞叾浠栧唴瀹广��
+            # 渚嬪瓙
+            {
+            "name": "鏁扮缂撳彉閬ユ祴鍖�",
+            "id": "PMS003",
+            "type": "linear",
+            "headers": [
+                {
+                "name": "鍖呮爣璇�",
+                "id": "packetIdentifier",
+                "pos": 0,
+                "content": "000",
+                "length": 8,
+                "type": "para"
+                }
+            ],
+            "datas": [
+                {
+                "name": "XXX鍖�",
+                "id": "XXX",
+                "pos": 0,
+                "length": 8,
+                "byteOrder": ""
+                }
+            ]
+        """
+        
+
+        def validation(gen_text):
+            _pkt = json.loads(gen_text)
+            with open(f'out/tmp/{time.time()}.json', 'w') as f:
+                f.write(gen_text)
+            assert 'headers' in _pkt, '鍖呯粨鏋勪腑蹇呴』鍖呭惈headers瀛楁'
+            assert 'datas' in _pkt, '鍖呯粨鏋勪腑蹇呴』鍖呭惈datas瀛楁'
+            print(f'鍙傛暟涓暟锛歿len(_pkt["datas"])}')
+            # assert par_num == len(_pkt['datas']), f'鏁版嵁鍩熷弬鏁颁釜鏁颁笉瀵癸紒棰勮{par_num}涓紝瀹為檯{len(_pkt["datas"])}'
+            assert last_par_pos == _pkt['datas'][-1]['pos'], '鏈�鍚庝竴涓弬鏁扮殑瀛楄妭浣嶇疆涓嶅锛�'
+
+        result = self.call_model(_msg, f'out/鏁版嵁鍖�-{pkt_name}.json', [], ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation)
+        print(f'鏁版嵁鍖呪�渰pkt_name}鈥濅俊鎭細'+result)
+
+    def gen_bus(self):
+        _msg = """
+            # 鎸囦护
+            鎴戦渶瑕佷粠鏂囨。涓彁鍙栫粡鎬荤嚎鐨勬暟鎹寘鍒楄〃锛屼綘瑕佸府鍔╂垜瀹屾垚缁忔�荤嚎鐨勬暟鎹寘鍒楄〃鐨勬彁鍙栥��
+            # 闇�姹�
+            璇锋瀽鏂囨。锛屽垪鍑烘�荤嚎閫氫俊鍖呬紶杈撶害瀹氫腑鎻忚堪鐨勬墍鏈夋暟鎹寘鍒楄〃锛�
+            鏁版嵁鍖呭瓧娈靛寘鎷細id(鏁版嵁鍖呬唬鍙�)銆乶ame(鏁版嵁鍖呭悕绉�)銆乤pid(16杩涘埗瀛楃涓�)銆乻ervice(鏈嶅姟瀛愭湇鍔�)銆乴ength(bit闀垮害)銆乮nterval(浼犺緭鍛ㄦ湡)銆乻ubAddr(瀛愬湴鍧�/妯″紡)銆乫rameNum(閫氫俊甯у彿)銆�
+            transSer(浼犺緭鏈嶅姟)銆乶ote(澶囨敞)銆乺tAddr(鎵�灞濺T鐨勫湴鍧�鍗佽繘鍒�)銆乺t(鎵�灞瀝t鍚嶇О)銆乼hroughBus(鏄惁缁忚繃鎬荤嚎)銆乥urst(鏄惁绐佸彂)銆乼ransDirect(浼犺緭鏂瑰悜)銆�
+            # 绾︽潫
+            - frameNum锛氫娇鐢ㄦ枃妗d腑鐨勬枃鏈笉瑕佸仛浠讳綍杞崲锛�
+            - subAddr锛氬�间负鈥滄繁搴︹�濄�佲�滃钩閾衡�濄�佲�滄暟瀛椻�濇垨null锛�
+            - 鏄惁缁忚繃鎬荤嚎鐨勫垽鏂緷鎹細鈥滃娉ㄢ�濆垪濉啓浜嗗唴瀹圭被浼尖�滀笉缁忚繃鎬荤嚎鈥濈殑鏂囧瓧琛ㄧず涓嶇粡杩囨�荤嚎鍚﹀垯缁忚繃鎬荤嚎锛�
+            - 浼犺緭鏈嶅姟鍒嗕笁绉嶏細SetData(缃暟)銆丟etData(鍙栨暟)銆丏ataBlock(鏁版嵁鍧椾紶杈�)锛�
+            - 浼犺緭鏂瑰悜鍒嗏�濇敹鈥滃拰鈥濆彂鈥滐紝浼犺緭鏈嶅姟濡傛灉鏄�濆彇鏁扳�滄槸鈥濇敹鈥滐紝濡傛灉鏄�濇暟鎹潡浼犺緭鈥滃垯鏍规嵁鍖呮墍鍦ㄧ殑鍒嗙郴缁熶互鍙婅〃鏍肩殑鈥濅紶杈撴柟鍚戔�滃垪杩涜鍒ゆ柇锛屽垽鏂浜嶴MU鏉ヨ鏄敹杩樻槸鍙戯紱
+            - 鏄惁绐佸彂锛氭牴鎹〃鏍间腑鐨勨�濅紶杈撳懆鏈熲�滃垪杩涜鍒ゆ柇锛屽鏋滃~鍐欎簡绫讳技鈥濈獊鍙戔�滅殑鏂囧瓧琛ㄧず鏄獊鍙戝惁鍒欒〃绀轰笉鏄獊鍙戯紱
+            - 涓嶈婕忔帀浠讳綍涓�涓暟鎹寘锛�
+            - 鏁版嵁缁撴瀯鏈�澶栧眰鏄暟缁勶紝鏁扮粍鍏冪礌涓烘暟鎹寘锛屼互JSON鏍煎紡杈撳嚭锛屼笉瑕佽緭鍑篔SON浠ュ鐨勪换浣曟枃鏈��
+            # 渚嬪瓙
+            [
+                {
+                    "id": "PCS005",
+                    "name": "鎬荤嚎绠$悊锛堝唴閮ㄦ寚浠わ級",
+                    "apid": "418",
+                    "service": "(1, 2)",
+                    "length": 1,
+                    "interval": 1000,
+                    "subAddr": null,
+                    "frameNum": "1|2",
+                    "transSer": "DataBlock",
+                    "note": "",
+                    "rtAddr": 28,
+                    "rt": "鏁版嵁鎺ュ彛鍗曞厓XIU",
+                    "throughBus": true,
+                    "burst": true,
+                    "transDirect": "鍙�"
+                }
+            ]
+        """
+
+        def validation(gen_text):
+            json.loads(gen_text)
+
+        result = self.call_model(_msg, 'out/鎬荤嚎.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation)
+        print('鎬荤嚎鏁版嵁鍖咃細' + result)
+        
+        pkts = json.loads(result)
+        # 绛涢�夌粡鎬荤嚎鐨勬暟鎹寘
+        pkts = list(filter(lambda it: it['throughBus'], pkts))
+        # 绛涢�夋湁apid鐨勬暟鎹寘
+        pkts = list(filter(lambda it: it['apid'], pkts))
+
+        pkts2 = []
+        for pkt in pkts:
+            if self.pkt_in_tm_pkts(pkt["name"]):
+                pkts2.append(pkt)
+        for pkt in pkts2:
+            self.gen_pkt_details(pkt['name'], pkt['id'])
+
+    def pkt_in_tm_pkts(self, pkt_name):
+        _msg = f"""
+            # 鎸囦护
+            鎴戦渶瑕佷粠鏂囨。涓垎鏋愬垽璇绘槸鍚︽湁鏌愪釜閬ユ祴鍖呯殑瀛楁琛ㄦ弿杩帮紝浣犺甯姪鎴戝垽鏂��
+            # 闂
+            鏂囨。涓湁閬ユ祴鍖呪�渰pkt_name}鈥濈殑瀛楁琛ㄦ弿杩板悧锛�
+            娉ㄦ剰锛氶仴娴嬪寘鐨勫瓧娈佃〃绱ф帴鐫�閬ユ祴鍖呯珷鑺傛爣棰橈紝濡傛灉绔犺妭鏍囬鍚庨潰鐪佺暐浜嗘垨鑰呰瑙亁xx鍒欐槸娌℃湁瀛楁琛ㄦ弿杩般��
+            # 绾︽潫
+            - 鏍规嵁鏂囨。鍐呭杈撳嚭锛�
+            - 閬ユ祴鍖呭悕绉板繀椤诲畬鍏ㄥ尮閰嶏紱
+            - 杈撳嚭鈥滄棤鈥濇垨鈥滄湁鈥濓紝涓嶈杈撳嚭鍏朵粬浠讳綍鍐呭銆�
+            # 渚嬪瓙
+            鏈�
+        """
+        text = self.call_model(_msg, f'out/pkts/鏈夋棤鏁版嵁鍖�-{pkt_name}.txt', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'])
+        print(f'鏂囨。涓湁鏃犫�渰pkt_name}鈥濈殑瀛楁鎻忚堪锛�'+ text)
+        return text == '鏈�'
+
+    # 閬ユ祴-end
+
+    # 閬ユ帶-start
+    def handle_yk_structured_data(self):
+        # 鏁版嵁甯ф牸寮�
+        self.gen_tc_transfer_frame_format()
+        # 閬ユ帶鍖呮牸寮�
+        self.gen_tc_pkt_format()
+        # 閬ユ帶鍖呭垪琛�
+        pkts = self.gen_tc_transfer_pkts()
+        for pkt in pkts:
+            # 閬ユ帶鍖呮暟鎹尯鍐呭
+            self.gen_tc_pkt_details(pkt)
+    
+    def gen_tc_transfer_frame_format(self):
+        _msg = '''
+            # 鎸囦护
+            鍒嗘瀽閬ユ帶浼犻�佸抚鏍煎紡锛屾彁鍙栭仴鎺т紶閫佸抚鏍煎紡鐨勫瓧娈靛畾涔夈��
+            # 闇�姹�
+            瑕佹彁鍙栧�肩殑甯ф牸寮忓瓧娈碉細
+            - 鐗堟湰鍙凤細const锛屼簩杩涘埗锛屼互B缁撳熬锛�
+            - 閫氳繃鏍囧織锛歝onst锛屼簩杩涘埗锛屼互B缁撳熬锛�
+            - 鎺у埗鍛戒护鏍囧織锛歝onst锛屼簩杩涘埗锛屼互B缁撳熬锛�
+            - 绌洪棽浣嶏細const锛屼簩杩涘埗锛屼互B缁撳熬锛�
+            - 鑸ぉ鍣ㄦ爣璇嗭細const锛屽崄鍏繘鍒讹紝浠�0x寮�澶达紱
+            - 铏氭嫙淇¢亾鏍囪瘑锛歴endFlag锛屽彂閫佹爣璁帮紝榛樿涓衡�滀换鍔℃敞鍏ュ抚鈥濓紝鎵�鏈夌殑鍊奸兘瑕佸垪涓惧嚭鏉ワ紱
+            # 鏁版嵁绫诲瀷
+            - const锛氬浐瀹氱爜瀛楋紝鏁板�硷紝浜岃繘鍒朵互B缁撳熬锛屽崄杩涘埗锛屽崄鍏繘鍒朵互0x寮�澶达紱
+            - sendFlag锛氬彂閫佹爣璁帮紝绫讳技鏋氫妇锛屽畾涔夋牱渚嬶細[{"n":"name","v":"value","c":"code","default":true}]锛宯琛ㄧず鍚嶇О锛寁琛ㄧず鍊硷紝c琛ㄧずcode锛堟病鏈夌┖鐫�锛夛紝default琛ㄧず鏄粯璁ゅ�硷紱
+            # 绾︽潫
+            - 浠SON鏍煎紡杈撳嚭锛�
+            - 浠呰緭鍑篔SON鏂囨湰锛屼笉瑕佽緭鍑轰换浣曞叾浠栨枃鏈��
+            # 杈撳嚭渚嬪瓙锛�
+            {
+                "鐗堟湰鍙�": "00B",
+                "閫氳繃鏍囧織": "0",
+                ...
+            }
+        '''
+
+        def validation(gen_text):
+            json.loads(gen_text)
+
+        result = self.call_model(_msg, 'out/tc_transfer_frame.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'],validation)
+        print('閬ユ帶甯ф牸寮忥細' + result)
+
+    def gen_tc_pkt_format(self):
+        _msg = '''
+            # 鎸囦护
+            鍒嗘瀽閬ユ帶鍖呮牸寮忥紝鎻愬彇閬ユ帶鍖呮牸寮忕殑瀛楁瀹氫箟銆�
+            # 闇�姹�
+            瑕佹彁鍙栧�肩殑鍖呮牸寮忓瓧娈碉細
+            - 鍖呯増鏈彿: const锛屼簩杩涘埗锛�
+            - 鍖呯被鍨�: const锛屼簩杩涘埗锛�
+            - 鏁版嵁鍖哄ご鏍囧織: const锛屼簩杩涘埗锛�
+            - 搴忓垪鏍囧織: const锛屼簩杩涘埗锛�
+            - 鍖呴暱锛歭ength锛�
+            - 鍓澶存爣蹇�: const锛屼簩杩涘埗锛�
+            - 閬ユ帶鍖呯増鏈彿: const锛屼簩杩涘埗锛�
+            - 鍛戒护姝g‘搴旂瓟: const锛屼簩杩涘埗锛�
+            - 婧愬湴鍧�: const锛屽崄鍏繘鍒躲��
+            # 鏁版嵁绫诲瀷
+            - const锛氬浐瀹氱爜瀛楋紝鏁板�硷紝浜岃繘鍒朵互B缁撳熬锛屽崄杩涘埗锛屽崄鍏繘鍒朵互0x寮�澶达紱
+            # 绾︽潫
+            - 浠SON鏍煎紡杈撳嚭锛�
+            - 浠呰緭鍑篔SON鏂囨湰锛屼笉瑕佽緭鍑轰换浣曞叾浠栨枃鏈��
+            # 杈撳嚭渚嬪瓙锛�
+            {
+                "鍖呯増鏈彿": "00B",
+                "鍖呯被鍨�": "1B",
+                ...
+            }
+        '''
+
+        def validation(gen_text):
+            json.loads(gen_text)
+
+        result = self.call_model(_msg, 'out/tc_transfer_pkt.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'],validation)
+        print('閬ユ帶鍖呮牸寮忥細' + result)
+        
+    def gen_tc_transfer_pkts(self):
+        _msg = '''
+            # 鎸囦护
+            鍒嗘瀽鏂囨。鍒楀嚭鎵�鏈夌殑閬ユ帶婧愬寘銆�
+            # 杈撳嚭渚嬪瓙锛�
+            [{
+            "name": "xxx",
+            "code":"pkt",
+            "搴旂敤杩囩▼鏍囪瘑绗�":"0xAA",
+            "鏈嶅姟绫诲瀷":"0x1",
+            "鏈嶅姟瀛愮被鍨�":"0x2"
+            }]
+        '''
+
+        def validation(gen_text):
+            json.loads(gen_text)
+
+        result = self.call_model(_msg, 'out/tc_transfer_pkts.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'],validation)
+        print('閬ユ帶鍖呭垪琛細' + result)
+
+    def gen_tc_pkt_details(self, pkt):
+        tc_name = pkt['name']
+        tc_code = pkt['code']
+        pkt['name'] = f'{tc_code} {tc_name}'
+        _msg = f"""
+            # 鎸囦护
+            鍒嗘瀽鏂囨。锛屼粠鏂囨。涓彁鍙栭仴鎺ф寚浠ゅ悕绉颁负鈥渰tc_name}鈥濅唬鍙蜂负鈥渰tc_code}鈥濈殑鎸囦护搴旂敤鏁版嵁鍖哄畾涔夈��
+            """ + """
+            # 绾︽潫
+            - code 濡傛灉娌℃湁鏄庣‘瀹氫箟鍒欎娇鐢ㄥ悕绉扮殑鑻辨枃缈昏瘧锛屽敖閲忕畝鐭紱
+            - length 鑷姩杞崲涓篵it闀垮害锛屽繀椤绘槸鏁板�兼垨null锛屼笉鑳戒负0锛�
+            - value 鏍规嵁瀛楁鎻忚堪鎻愬彇锛�
+            - enums 鏈変簺瀛楁鏄灇涓惧�硷紝鏍规嵁瀛楁鎻忚堪鎻愬彇锛屾灇涓惧厓绱犵殑鏁版嵁缁撴瀯涓簕"n":"","v":"","c":""}锛�
+            - 杈撳嚭鍐呭蹇呴』涓轰弗鏍肩殑json锛屼笉鑳借緭鍑洪櫎json浠ュ鐨勪换浣曞唴瀹广��
+
+            # 瀛楁绫诲瀷
+            - 鍥哄畾鐮佸瓧锛歝onst锛�
+            - 闀垮害锛歭ength锛�
+            - 鏋氫妇鍊硷細enum锛�
+            - 鏍¢獙鍜岋細checkSum锛�
+            - 鍗虫椂杈撳叆锛歩nput銆�
+
+            # 瀛楁绫诲瀷鍒嗘瀽鏂规硶
+            - 鏍规嵁瀛楁鎻忚堪鍒嗘瀽瀛楁鐨勭被鍨嬶紱
+            - 瀛楁鎻忚堪涓槑纭寚瀹氫簡瀛楁鍊肩殑锛岀被鍨嬩负const锛�
+            - 瀛楁涓病鏈夋槑纭寚瀹氬瓧娈靛�硷紝浣嗘槸缃楀垪浜嗗彇鍊艰寖鍥寸殑锛岀被鍨嬩负enum锛�
+            - 瀛楁濡傛灉鏄拰鈥滈暱搴︹�濇湁鍏筹紝绫诲瀷涓簂ength锛�
+            - 濡傛灉鍜屾暟鎹煙鏈夊叧锛岀被鍨嬩负const锛�
+            - 瀛楁濡傛灉鍜屾牎楠屽拰鏈夊叧锛岀被鍨嬩负checkSum銆�
+
+            # 杈撳嚭渚嬪瓙锛�
+            [
+                {
+                    "name": "para1",
+                    "code": "para1",
+                    "length": 8,
+                    "type": "const",
+                    "value": "0xAA"
+                }
+                ...
+            ]
+        """
+
+        def validation(gen_text):
+            json.loads(gen_text)
+
+        result = self.call_model(_msg, f'out/閬ユ帶鎸囦护鏁版嵁鍩�-{tc_code}-{utils.to_file_name(tc_name)}.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'],validation)
+        print('閬ユ帶鎸囦护鏁版嵁鍩燂細' + result)
+
+    # 閬ユ帶-end
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 76ec6fb..b0609cc 100644
--- a/requirements.txt
+++ b/requirements.txt
Binary files differ
diff --git a/vision_test.py b/vision_test.py
index 4b23588..fcc7138 100644
--- a/vision_test.py
+++ b/vision_test.py
@@ -39,4 +39,4 @@
 
 if __name__ == '__main__':
     vision = VisionTest("image_path")
-    vision.run("闂")
\ No newline at end of file
+    vision.run("闂")

--
Gitblit v1.9.1