Files
kefu/wechat_rpa/test_rag_context_audit.py
T
2026-09-21 10:34:06 +08:00

51 lines
3.0 KiB
Python

"""Exercise real retrieval/injection with synthetic archive data and mocked LLMs."""
import json
from unittest import TestCase, mock
import httpx
import test_knowledge as fixtures
class KnowledgeContextAudit(TestCase):
setUp = fixtures.KnowledgeGatewayTest.setUp
tearDown = fixtures.KnowledgeGatewayTest.tearDown
seed = fixtures.KnowledgeGatewayTest.seed
_post_then_drain = fixtures.KnowledgeGatewayTest._post_then_drain
def request(self, messages, customer_text=''):
item = self.seed()
captured = []
def upstream(request):
data = json.loads(request.content)
captured.append(data)
return httpx.Response(200, json={'choices':[{'message':{'content':'请先确认就诊日期和科室。'}}]})
response, _ = self._post_then_drain(upstream, body={'messages':messages,'customer_text':customer_text,'task_id':'context-audit'})
self.assertEqual(response.status_code,200,response.text)
return item,response.json(),captured
def test_multimodal_messages_only_retrieves_and_preserves_image(self):
image = {'type':'image_url','image_url':{'url':'data:image/png;base64,AUDIT_IMAGE'}}
item, response, captured = self.request([{'role':'user','content':[image,{'type':'text','text':'预约挂号需要什么材料?'}]}])
self.assertEqual([hit['id'] for hit in response['knowledge']['hits']],[item['id']])
self.assertIn('已审核知识参考',json.dumps(captured[0],ensure_ascii=False))
self.assertIn('AUDIT_IMAGE',json.dumps(captured[0]))
def test_followup_uses_recent_topic_for_retrieval_and_keeps_history(self):
messages=[{'role':'system','content':'你是测试客服。'},
{'role':'user','content':'预约挂号需要什么材料?'},
{'role':'assistant','content':'请先确认就诊日期和科室。'},
{'role':'user','content':'那需要提前准备什么?'}]
item,response,captured=self.request(messages,'那需要提前准备什么?')
self.assertEqual([hit['id'] for hit in response['knowledge']['hits']],[item['id']])
self.assertEqual(captured[0]['messages'][:3],messages[:3])
def test_full_current_question_is_prioritized_over_long_preamble(self):
messages=[{'role':'user','content':'旧说明文字。'*600+'\n客户 10:01\n预约挂号需要什么材料?'}]
item,response,_=self.request(messages)
self.assertEqual([hit['id'] for hit in response['knowledge']['hits']],[item['id']])
def test_new_self_contained_topic_does_not_inherit_old_knowledge(self):
messages=[{'role':'user','content':'预约挂号需要什么材料?'},
{'role':'assistant','content':'请先确认就诊日期和科室。'},
{'role':'user','content':'请问蓝牙耳机怎么连接电脑?'}]
_,response,_=self.request(messages,'请问蓝牙耳机怎么连接电脑?')
self.assertEqual(response['knowledge']['hits'],[])