from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI
from common.config import Config

conf = Config()

# ============ 配置llm区域 ============
my_llm = ChatOpenAI(
    api_key="AAAA",
    base_url="https://a674ab0b6f8d4da580fa259ce6f68937--8000.ap-shanghai2.cloudstudio.club/v1",
    model="tcm" # tcm  law cs
)


def extract_knowledge_from_text(input_text):
    messages = [
        SystemMessage(content="请从以下中医文本中抽取知识图谱结构，包括实体与关系。"),
        HumanMessage(content=input_text)
    ]

    result = ""
    for chunk in my_llm.stream(messages):
        print(chunk.content, end="", flush=True)
        result += chunk.content

    return result


if __name__ == '__main__':
    # response = my_llm.invoke("介绍一下中国历史。")
    # print(response.content)
    sample_text = """
                【中药名称】一点血
- 中医百科
- 一点血
1#
名称
红砖草（《全展选编•妇产科》）、一点红、石鼓子、威氏秋海棠
红砖草石鼓子威氏秋海棠
- 红砖草
- 石鼓子
- 威氏秋海棠
一点血的种植和炮制
来源
为秋海棠科植物一点血秋海棠的根茎。秋后采挖，鲜用或晒干用。
【原形态】
多年生草本，高20～30厘米。根茎短而肥厚，有环纹，断面红色，具须根。根出叶1-2片，近菱方形，长lO～15厘米，宽lO～12厘米，上部3～7浅裂，裂片三角形，基部偏心形，边缘有突尖细锯齿，上面绿色，具极稀疏的短刺毛，下面略带紫色；叶柄光滑，基部肥厚，长7～15厘米；托叶膜质，光滑，褐色，卵圆披针形。花6～7朵，粉红色，呈伞房状排列，花序梗粗壮，根出，长达10～20厘米；花雌雄同株；雄花花被4片，内外各2，外花被卵圆形，内花被长椭圆形，雄蕊10～16枚，离生；雌花具花被3片，内1外2，外花被宽卵圆形，内花被卵圆形或长椭圆形，子房呈纺锤形，3棱，花柱3枚，离生。蒴果无翅。花期7月。
【生境分布】
生长于阴处的岩石缝及小谷底。产四川。
性味
味甘；苦；性微寒
性状
干燥根茎呈圆柱形，弯曲，外表棕黄色，具扭曲的纵皱纹及须根残痕。质脆，横断面平坦，中心有一棕红色的圆心，如一点血状。
一点血的效果
功效
为秋海棠科植物一点血秋海棠的根茎。用于病后虚弱，劳伤，血虚经闭，崩漏，白带，吐血，咯血，衄血，外伤出血，跌打肿痛。
主治
养血补血，散瘀止痛。主病后虚弱，劳伤，血虚经闭，崩漏，白带，吐血，咯血，衄血，外伤出血，跌打肿痛。
用法用量
- 内服：煎汤，15-30g；绞汁、炖肉或浸酒。
- 外用：适量，鲜品捣敷。
一点血的药方
- ①治虚弱带下：一点血、一朵云。共研末，炖肉服。
- ②治女子干病：一点血、玉芙蓉、鹿衔草、蓝布正。炖鸡子服。（性味以下出《四川中药志》）
- ③治功能性子宫出血：一点血鲜品四至五两，或干品二、三两。炖鸡服。（《全展选编•妇产科》）

                """

    # 调用函数进行知识图谱抽取
    final_result = extract_knowledge_from_text(sample_text)
    print(f"\n最终结果长度: {len(final_result)}")