3
Tir                 @   sZ  d Z ddlZddlZddlZddlmZmZmZmZ ddl	Z	ddl
Z
ddlmZ e
je
jd e
jeZG dd dZG dd	 d	ZG d
d dZG dd dZG dd dZG dd dZddlZddlZddlZddlmZ G dd dejjZ eddZ!dd Z"d e#dddZ$edkrVddl%Z%e&e%j'dkrPe%j'd dkrPe"  ne$  dS )!u   
简化版AI智能聊天机器人
使用豆包Doubao-Seed-1.6-Flash-250828模型
对接前端网站聊天窗口，智能回复用户问题
    N)ListDictOptionalTuple)datetime)levelc               @   s<   e Zd ZdZdeedddZdee ee	edd	d
Z
dS )	DoubaoAPIu   豆包大模型API调用器doubao-seed-1-6-flash-250828)api_key
model_namec             C   s   || _ || _d| _d S )Nz9https://ark.cn-beijing.volces.com/api/v3/chat/completions)r
   r   api_url)selfr
   r    r   simple_chatbot.py__init__   s    zDoubaoAPI.__init__ffffff?  )messagestemperature
max_tokensreturnc       
      C   s   dd| j  d}| j|||d}yDddd}tj| j||d|d}|j  |j }|d	 d
 d d S  tk
r }	 ztj	d|	  dS d}	~	X nX dS )u   调用豆包API进行对话zapplication/jsonzBearer )zContent-TypeZAuthorization)Zmodelr   r   Zmax_completion_tokensN)httpZhttps   )headersjsonZtimeoutproxieschoicesr   messagecontentu   豆包API调用失败: u?   抱歉，我现在无法回答您的问题，请稍后再试。)
r
   r   requestsZpostr   Zraise_for_statusr   	Exceptionloggererror)
r   r   r   r   r   datar   responseresulter   r   r   chat   s     zDoubaoAPI.chatN)r	   )r   r   )__name__
__module____qualname____doc__strr   r   r   floatintr'   r   r   r   r   r      s   r   c               @   sN   e Zd ZdZdedddZdeeeee dd	d
Z	eee dddZ
dS )
QADatabaseu   问答数据库管理器0   /root/老业务网站8.30/backend/ai_agent_qa.db)db_pathc             C   s
   || _ d S )N)r1   )r   r1   r   r   r   r   <   s    zQADatabase.__init__zh   )querylanguagelimitr   c             C   s>  yt j| j}t j|_|j }g }|jd|||f |j }|rV|jdd |D  t	||k r|jdd| d||t	| f |j }|jdd |D  t	||k r&| j
|}	xl|	D ]d}
t	||krP |jdd|
 dd|
 dd|
 d||t	| f |j }|jdd |D  qW t	|d	krd
ddddg}xh|D ]`}||krH|jdd| dd| d||f |j }|jdd |D  t	|d	krHP qHW |j  t }g }x<|D ]4}|d |d f}||kr|j| |j| qW |d| S  tk
r8 } ztjd|  g S d}~X nX dS )u   搜索相关问答z[SELECT question, answer, category FROM qa_pairs WHERE question = ? AND language = ? LIMIT ?c             S   s   g | ]}t |qS r   )dict).0rowr   r   r   
<listcomp>O   s    z(QADatabase.search_qa.<locals>.<listcomp>z^SELECT question, answer, category FROM qa_pairs WHERE question LIKE ? AND language = ? LIMIT ?%c             S   s   g | ]}t |qS r   )r7   )r8   r9   r   r   r   r:   X   s    zSELECT question, answer, category FROM qa_pairs WHERE (question LIKE ? OR answer LIKE ? OR keywords LIKE ?) AND language = ? LIMIT ?c             S   s   g | ]}t |qS r   )r7   )r8   r9   r   r   r   r:   e   s    r   u   公司u   产品u   服务u	   做什么u   业务zqSELECT question, answer, category FROM qa_pairs WHERE (question LIKE ? OR answer LIKE ?) AND language = ? LIMIT ?c             S   s   g | ]}t |qS r   )r7   )r8   r9   r   r   r   r:   r   s    questionanswerNu   数据库搜索失败: )sqlite3Zconnectr1   ZRowZrow_factorycursorZexecuteZfetchallextendlen_extract_keywordsclosesetaddappendr    r!   r"   )r   r4   r5   r6   Zconnr?   ZresultsZexact_resultsZfuzzy_resultskeywordskeywordZkeyword_resultsZ
core_wordswordZbroad_resultsseenZunique_resultsr%   keyr&   r   r   r   	search_qa?   sd    

0




zQADatabase.search_qa)textr   c                s^   t jdd|}|j }ddddddd	d
dddddddddddh  fdd|D }|dd S )u   提取关键词z[^\w\s\u4e00-\u9fff] u   的u   了u   在u   是u   我u   你u   他u   她u   它u   们u   这u   那u   什么u   怎么u   如何u	   为什么u   吗u   呢u   吧c                s$   g | ]}| krt |d kr|qS )   )rA   )r8   rI   )
stop_wordsr   r   r:      s    z0QADatabase._extract_keywords.<locals>.<listcomp>Nr3   )resubsplit)r   rM   ZwordsrG   r   )rP   r   rB      s
    *zQADatabase._extract_keywordsN)r0   )r2   r3   )r(   r)   r*   r+   r,   r   r.   r   r   rL   rB   r   r   r   r   r/   9   s   Hr/   c               @   s$   e Zd ZdZeeedddZdS )LanguageDetectoru   语言检测器)rM   r   c       
      C   s   t tjd| }t tjd| }t tjd| }t tjd| j }t | jdd}|dkr`dS || }| j r|t | j  nd}|| }|| }	|d	krdS |d	krd
S |	dkrdS |dkrdS dS dS )u   检测文本语言z[\u4e00-\u9fff]z\b[a-zA-Z]+\bz[\u0e00-\u0e7f]u   [àáạảãâầấậẩẫăằắặẳẵèéẹẻẽêềếệểễìíịỉĩòóọỏõôồốộổỗơờớợởỡùúụủũưừứựửữỳýỵỷỹđ] rN   r   r2   g333333?thg?vig      ?enN)rA   rQ   findalllowerreplacerS   )
rM   Zchinese_charsZenglish_wordsZ
thai_charsZvietnamese_charsZtotal_charsZchinese_ratioZenglish_ratioZ
thai_ratioZvietnamese_ratior   r   r   detect_language   s(    z LanguageDetector.detect_languageN)r(   r)   r*   r+   staticmethodr,   r\   r   r   r   r   rT      s   rT   c               @   s  e Zd ZdZdddddddgd	d
ddddgddgddd	gdddddddgddddgddgd d!gdd"d#d$d%d&gd'd(d)d*gd+d,gd-d.gdd/d0d1d2d3gd4d5d6d7gd8d9gd:d;gdd<d=d>d?d@gdAdBdCdDgdEdFgdGdHgddIdJdKdLdMdNgdOdPdQdRgdSdTgdUdVgddWZeeeedXdYdZZd[S )\IntentClassifieru   意图分类器u   你好u   您好u   嗨u   哈喽u	   早上好u	   下午好u	   晚上好ZhellohiZheyzgood morningzgood afternoonzgood eveningu   สวัสดีu   หวัดดีu	   xin chàou   chào)r2   rX   rV   rW   u   公司u   企业u   你们u   介绍u	   是什么u	   做什么ZcompanyZbusinesszwhat do you doZaboutu   บริษัทu   ธุรกิจu   công tyu   doanh nghiệpu   服务u   产品u   功能u   提供u   解决方案serviceproductZsolutionZofferu   บริการu   ผลิตภัณฑ์u   dịch vụu   sản phẩmu   价格u   费用u	   多少钱u   收费u   报价ZpriceZcostZfeezhow muchu   ราคาu   ค่าใช้จ่ายu   giáu   chi phíu   联系u   电话u   邮箱u   微信u   地址contactZphoneZemailZaddressu   ติดต่อu   โทรศัพท์u
   liên hệu   điện thoạiu   技术u   部署u   开发ZSEOu   安全u   性能	technicalZ
technologyZ
deploymentZdevelopmentu   เทคนิคu   เทคโนโลยีu   kỹ thuậtu   công nghệ)ZgreetingZcompany_infoZservice_inquiryZprice_inquiryrb   rc   )rM   r5   r   c             C   sN   |j  }x@| jj D ]2\}}|j|g }x|D ]}|j  |kr.|S q.W qW dS )u   分类用户意图Zgeneral)rZ   INTENT_KEYWORDSitemsget)clsrM   r5   Z
text_lowerintentZlang_keywordsrG   rH   r   r   r   classify_intent   s    
z IntentClassifier.classify_intentN)r(   r)   r*   r+   rd   classmethodr,   ri   r   r   r   r   r^      s6   








r^   c               @   sJ   e Zd ZdZdedddZeedddZee	 d	d
dZ
dd ZdS )ConversationMemoryu   对话记忆管理器
   )max_historyc             C   s   || _ g | _d S )N)rm   history)r   rm   r   r   r   r      s    zConversationMemory.__init__)roler   c             C   sL   | j j||tj j d t| j | jd krH| j | j d d | _ dS )u   添加消息到历史)ro   r   	timestamp   N)rn   rF   r   now	isoformatrA   rm   )r   ro   r   r   r   r   add_message   s    zConversationMemory.add_message)r   c             C   s   | j S )u   获取对话历史)rn   )r   r   r   r   get_history  s    zConversationMemory.get_historyc             C   s
   g | _ dS )u   清空历史N)rn   )r   r   r   r   clear  s    zConversationMemory.clearN)rl   )r(   r)   r*   r+   r.   r   r,   rt   r   r   ru   rv   r   r   r   r   rk      s
   rk   c               @   sd   e Zd ZdZedddZeedddZeee eeee dd	d
Z	eedddZ
dd ZdS )AIAgentu   AI智能体)r
   c             C   s>   t || _t | _t | _t | _t | _	ddddd| _
d S )Nu/  你是一个友好专业的客服代表，正在与客户进行对话。你的任务是理解客户的问题，查找相关信息，然后用自然、拟人化的方式回答。

**重要提醒**：
- 不要直接复制粘贴数据库中的内容
- 要像真正理解内容后，用自己的话自然地表达出来
- 保持对话的流畅性和友好感
- 可以添加适当的语气词和表达，让回答更像真人在说话

**回答风格**：
- 像好朋友在解释一样，自然亲切
- 可以用"是这样的"、"让我来介绍一下"、"简单来说"等自然表达
- 避免"您好，根据..."这种官方开场白
- 直接回答核心内容，就像面对面聊天一样

**内容组织**：
- 如果信息较多，可以用简单的数字标题（1、2、3）来组织
- 每个点不要超过2句话
- 总长度控制在150字以内，保持简洁

**特别要求**：
- 看到"我们提供"这种表达时，改成"我们有"或"我们可以帮你"
- 不要出现"核心优势包括："这种列表式表述
- 用"我可以帮您"代替"我们可以为您提供"
- 让回答有温度、有感情、有人情味

示例：
❌ 不好的回答："我们提供三大核心产品：销售/客服Copilot、经营数据分析Agent、内容生成&自动发布Agent。"
✅ 好的回答："我们有三大产品可以帮你。销售助手可以实时跟进客户，数据分析工具能让你一眼看清业务状况，还有内容生成器自动写文案发稿子，挺省事的。"

记住：你就是客服本人，不要告诉客户"数据库显示"或"根据资料"。u  You are a friendly and professional customer service representative having a conversation with customers. Your task is to understand customer questions, find relevant information, and respond naturally like a real person.

**Important**:
- Do NOT copy and paste database content directly
- Rewrite the information in your own words after understanding it
- Keep conversations flowing and friendly
- Add appropriate tone and expressions to make responses sound like a real person speaking

**Response Style**:
- Explain like talking to a friend, natural and warm
- Use natural phrases like "So here's the thing", "Let me explain", "Simply put"
- Avoid official greetings like "Hello, according to..."
- Answer core content directly, like face-to-face chatting

**Content Organization**:
- If there's a lot of information, use simple numbered headings (1, 2, 3)
- No more than 2 sentences per point
- Keep total length under 150 words, stay concise

**Special Requirements**:
- Change "We provide" to "We have" or "We can help you"
- Avoid list-style expressions like "Core advantages include:"
- Use "I can help you" instead of "We can provide you with"
- Make responses warm, emotional, and human

Example:
❌ Bad: "We provide three core products: Sales/Customer Service Copilot, Business Data Analysis Agent, and Content Generation & Auto-Publish Agent."
✅ Good: "We have three products to help you. The sales assistant tracks customers in real-time, the data analysis tool lets you see your business at a glance, and there's a content generator that writes copy and publishes automatically. Pretty handy."

Remember: You ARE the customer service person, don't tell customers "database shows" or "according to the information".u[  คุณเป็นพนักงานบริการลูกค้าที่เป็นมิตรและมืออาชีพ กำลังสนทนากับลูกค้า งานของคุณคือทำความเข้าใจคำถามของลูกค้า ค้นหาข้อมูลที่เกี่ยวข้อง แล้วตอบกลับอย่างเป็นธรรมชาติเหมือนคนจริงๆ

**สำคัญมาก**:
- อย่าคัดลอกเนื้อหาจากฐานข้อมูลโดยตรง
- เขียนใหม่ด้วยคำพูดของคุณเองหลังจากเข้าใจแล้ว
- รักษาการสนทนาให้ราบรื่นและเป็นมิตร
- เพิ่มน้ำเสียงและสำนวนที่เหมาะสมเพื่อให้คำตอบฟังดูเหมือนคนจริงๆ

**สไตล์การตอบ**:
- อธิบายเหมือนคุยกับเพื่อน เป็นธรรมชาติและอบอุ่น
- ใช้สำนวนธรรมชาติ เช่น "ก็คือว่า"、"ให้ผมอธิบายนะ"、"ง่ายๆ ก็คือ"
- หลีกเลี่ยงการทักทายอย่างเป็นทางการ เช่น "สวัสดี ตามที่..."
- ตอบเนื้อหาหลักโดยตรง เหมือนพูดคุยต่อหน้า

**การจัดเนื้อหา**:
- ถ้ามีข้อมูลมาก ใช้หัวข้อตัวเลขง่ายๆ (1, 2, 3)
- ไม่เกิน 2 ประโยคต่อหัวข้อ
- เก็บความยาวรวมไว้ต่ำกว่า 150 คำ รักษาความกระชับ

**ตัวอย่าง**:
❌ ไม่ดี: "เรามีผลิตภัณฑ์หลักสามอย่าง: Sales/Customer Service Copilot, Business Data Analysis Agent, และ Content Generation & Auto-Publish Agent"
✅ ดี: "เรามีผลิตภัณฑ์สามอย่างให้คุณ แอสซิสแทนต์ขายติดตามลูกค้าแบบเรียลไทม์ เครื่องมือวิเคราะห์ข้อมูลให้เห็นสถานะธุรกิจได้ในทีเดียว และยังมีตัวสร้างเนื้อหาที่เขียนคัดข้อความและเผยแพร่อัตโนมัติ ค่อนข้างสะดวก"

จำไว้: คุณคือพนักงานบริการลูกค้า อย่าบอกลูกค้าว่า "ฐานข้อมูลแสดงว่า" หรือ "ตามข้อมูลu  Bạn là nhân viên chăm sóc khách hàng thân thiện và chuyên nghiệp, đang trò chuyện với khách hàng. Nhiệm vụ của bạn là hiểu câu hỏi của khách hàng, tìm thông tin liên quan, rồi trả lời một cách tự nhiên như người thật.

**Quan trọng**:
- KHÔNG sao chép trực tiếp nội dung cơ sở dữ liệu
- Viết lại bằng lời của chính bạn sau khi hiểu
- Giữ cuộc trò chuyện mượt mà và thân thiện
- Thêm giọng điệu và biểu cảm phù hợp để câu trả lời nghe như người thật nói

**Phong cách trả lời**:
- Giải thích như nói chuyện với bạn bè, tự nhiên và ấm áp
- Sử dụng cụm từ tự nhiên như "Vấn đề là", "Để tôi giải thích", "Nói đơn giản là"
- Tránh lời chào chính thức như "Xin chào, theo..."
- Trả lời nội dung chính trực tiếp, như nói chuyện trực tiếp

**Tổ chức nội dung**:
- Nếu có nhiều thông tin, dùng tiêu đề số đơn giản (1, 2, 3)
- Không quá 2 câu mỗi điểm
- Giữ tổng độ dài dưới 150 từ, giữ súc tích

**Yêu cầu đặc biệt**:
- Thay "Chúng tôi cung cấp" bằng "Chúng tôi có" hoặc "Chúng tôi có thể giúp bạn"
- Tránh biểu hiện kiểu danh sách như "Ưu điểm cốt lõi bao gồm:"
- Dùng "Tôi có thể giúp bạn" thay vì "Chúng tôi có thể cung cấp cho bạn"
- Làm câu trả lời ấm áp, có cảm xúc, có tính người

Ví dụ:
❌ Tệ: "Chúng tôi cung cấp ba sản phẩm cốt lõi: Sales/Customer Service Copilot, Business Data Analysis Agent, và Content Generation & Auto-Publish Agent."
✅ Tốt: "Chúng tôi có ba sản phẩm có thể giúp bạn. Trợ lý bán hàng theo dõi khách hàng theo thời gian thực, công cụ phân tích dữ liệu để bạn thấy tình hình kinh doanh trong nháy mắt, và còn có trình tạo nội dung tự viết copy và đăng tự động. Khá tiện lợi."

Hãy nhớ: Bạn là nhân viên chăm sóc khách hàng, đừng nói với khách hàng "cơ sở dữ liệu cho thấy" hoặc "theo thông tin".)r2   rX   rV   rW   )r   
doubao_apir/   qa_dbrT   language_detectorr^   intent_classifierrk   memorysystem_prompts)r   r
   r   r   r   r     s    
!zAIAgent.__init__)
user_inputr   c             C   s   y| j j|}| jj||}| jj||dd}| j||||}| jj|}| j	j
d| | j	j
d| |||t|dk|dd tj j dS  tk
 r } zLtjd	|  | jd
t kr|ndd
t kr|ndddg tj j dS d}~X nX dS )u!   处理用户输入并生成回复   )r6   userZ	assistantr   Nrq   )r$   r5   rh   context_used
related_qarp   u   聊天处理失败: r5   r2   r"   F)rz   r\   r{   ri   ry   rL   _build_messagesrx   r'   r|   rt   rA   r   rr   rs   r    r!   r"   _get_error_messagelocals)r   r~   r5   rh   
qa_resultsr   r$   r&   r   r   r   r'     s,    

zAIAgent.chat)r~   r   r5   rh   r   c          	   C   s   g }| j j|| j d }|jd|d |r~d}x4|D ],}|d|d  d|d  d	|d
  d7 }q6W |d7 }|jd|d | jj }	x,|	dd D ]}
|j|
d |
d d qW |jd|d |S )u   构建消息列表r2   system)ro   r   u   【重要】：以下是客户问题的相关信息，请你理解后用自己的话自然地回答，不要照搬原文。

相关信息：
u	   问题：r<   u
   
答案：r=   u
   
分类：categoryz

uk   
⚠️ 切记：理解这些信息后，用你自己的话表达，就像在跟朋友解释一样自然！   Nro   r   r   i)r}   rf   rF   r|   ru   )r   r~   r   r5   rh   r   Zsystem_promptcontextqarn   msgr   r   r   r     s    
,
zAIAgent._build_messages)r5   r   c             C   s   ddddd}|j ||d S )u   获取错误消息zSorry, I'm experiencing some technical issues right now. Please try again later or contact us through the website contact form.)r2   rX   rV   rW   rX   )rf   )r   r5   Zerror_messagesr   r   r   r     s
    zAIAgent._get_error_messagec             C   s   | j j  dS )u   重置对话N)r|   rv   )r   r   r   r   reset_conversation  s    zAIAgent.reset_conversationN)r(   r)   r*   r+   r,   r   r   r'   r   r   r   r   r   r   r   r   rw   
  s    +
rw   )Threadc               @   sb   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zde	e
dddZe
edddZdd ZdS )ChatbotHandleru   聊天机器人HTTP处理器c             C   s8   | j dkr| j  n | j dkr(| j  n| jdd dS )u   处理POST请求z	/api/chatz
/api/reseti  z	Not FoundN)path_handle_chat_handle_reset_send_error)r   r   r   r   do_POST  s
    



zChatbotHandler.do_POSTc             C   s$   | j dkr| j  n| jdd dS )u   处理GET请求z/api/healthi  z	Not FoundN)r   _handle_healthr   )r   r   r   r   do_GET  s    

zChatbotHandler.do_GETc             C   s   yt | jd }| jj|}tj|jd}|jddj }|sV| j	dddd d	S t
j|}d
|d |d |d |d dd |d D |d dd}| j	| W nD tk
r } z(tjd|  | j	dddd W Y d	d	}~X nX d	S )u   处理聊天请求zContent-Lengthzutf-8r   rN   u   消息不能为空F)r"   successi  NTr$   r5   rh   r   c             S   s   g | ]}|d  qS )r<   r   )r8   r   r   r   r   r:     s    z/ChatbotHandler._handle_chat.<locals>.<listcomp>r   rp   )r$   r5   rh   r   Zrelated_questionsrp   )r   r#   u   处理聊天请求失败: u   服务器内部错误i  )r.   r   Zrfilereadr   loadsdecoderf   strip_send_json_responseai_agentr'   r    r!   r"   )r   Zcontent_lengthZ	post_datar#   r~   r%   Zresponse_datar&   r   r   r   r     s(    
zChatbotHandler._handle_chatc             C   sf   yt j  | jddd W nD tk
r` } z(tjd|  | jdddd W Y d	d	}~X nX d	S )
u   处理重置请求Tu   对话已重置)r   r   u   重置对话失败: u   重置失败F)r"   r   i  N)r   r   r   r    r!   r"   )r   r&   r   r   r   r     s    zChatbotHandler._handle_resetc             C   s    | j dddtj j d dS )u   处理健康检查ZhealthyzAI Agent Chatbotz1.0.0)Zstatusr`   versionrp   N)r   r   rr   rs   )r   r   r   r   r   $  s
    zChatbotHandler._handle_health   )r#   status_codec             C   sh   | j | | jdd | jdd | jdd | jdd | j  tj|d	d
d}| jj|jd dS )u   发送JSON响应zContent-typezapplication/jsonzAccess-Control-Allow-Origin*zAccess-Control-Allow-MethodszGET, POST, OPTIONSzAccess-Control-Allow-HeaderszContent-TypeFrq   )Zensure_asciiindentzutf-8N)send_responsesend_headerend_headersr   dumpsZwfilewriteencode)r   r#   r   Zresponse_jsonr   r   r   r   -  s    
z"ChatbotHandler._send_json_response)coder   c             C   s   | j |dd| dS )u   发送错误响应F)r"   r   N)r   )r   r   r   r   r   r   r   9  s    zChatbotHandler._send_errorc             C   s:   | j d | jdd | jdd | jdd | j  dS )	u#   处理OPTIONS请求（CORS预检）r   zAccess-Control-Allow-Originr   zAccess-Control-Allow-MethodszGET, POST, OPTIONSzAccess-Control-Allow-HeaderszContent-TypeN)r   r   r   )r   r   r   r   
do_OPTIONS=  s
    
zChatbotHandler.do_OPTIONSN)r   )r(   r)   r*   r+   r   r   r   r   r   r7   r.   r   r,   r   r   r   r   r   r   r     s   	!		r   z$2249d4c5-2e08-4787-9df6-cf5beee474a5)r
   c              C   s:  t d t dd  t d t d t dd  xytdj } | j dkrXt d P | j dkrvtj  t d w4| s|w4t d tj| }t d|d  d|d   |d rt d x"|d D ]}t d|d   qW W q4 tk
r    t d P Y q4 tk
r0 } zt d|  W Y dd}~X q4X q4W dS )u   命令行测试u+   🤖 企业经营AI智能体聊天机器人=2   u   输入 'quit' 或 'exit' 退出u   输入 'reset' 重置对话u   
您: quitexit   退出qu	   再见！reset   重置u   对话已重置u   🤖 正在思考...u   AI智能体 [r5   z]: r$   r   u   
💡 相关问题:z  - r<   u   

程序被用户中断u   发生错误: N)r   r   r   r   )r   r   )	printinputr   rZ   r   r   r'   KeyboardInterruptr    )r~   r%   r   r&   r   r   r   test_chatbotI  s:    
r   q  )portc             C   s   t jd| ftn}td td|   td|  d td|  d td y|j  W n tk
rx   td	 Y nX W d
Q R X d
S )u   启动HTTP服务器rN   u.   🚀 AI智能体聊天机器人服务已启动u   API地址: http://localhost:u   健康检查: http://localhost:z/api/healthu$   聊天接口: POST http://localhost:z	/api/chatu   按 Ctrl+C 停止服务u   
服务已停止N)socketserverZ	TCPServerr   r   Zserve_foreverr   )r   Zhttpdr   r   r   start_serverq  s    r   __main__rO   Ztest)r   )(r+   r>   r   rQ   Ztypingr   r   r   r   r   Zloggingr   ZbasicConfigINFOZ	getLoggerr(   r!   r   r/   rT   r^   rk   rw   Zhttp.serverr   r   Zurllib.parseZurllibZ	threadingr   ZserverZBaseHTTPRequestHandlerr   r   r   r.   r   sysrA   argvr   r   r   r   <module>   s:   
$Y&7 Y_
(
 