feat(chat): 接入全局知识库上下文

This commit is contained in:
2026-06-08 21:38:12 +08:00
parent 5ecf78c5d6
commit 2244b69d62
5 changed files with 236 additions and 14 deletions

View File

@@ -201,17 +201,36 @@ def test_stream_message_returns_workflow_meta_when_triggered(settings, django_us
def test_stream_message_uses_normal_llm_path_when_not_triggered(monkeypatch, django_user_model):
user = django_user_model.objects.create_user(username="owner", password="pass")
conversation = Conversation.objects.create(user=user, title="会话")
calls = []
def fake_stream_reply(conversation, content):
def fake_stream_reply(conversation, content, knowledge_context=""):
calls.append(knowledge_context)
yield "普通回复"
monkeypatch.setattr("review_agent.services.stream_reply", fake_stream_reply)
monkeypatch.setattr(
"review_agent.services.search_knowledge_base",
lambda query, n_results=3: {
"query": query,
"results": [
{
"source": "用户知识库/1/2/孙之烨-260510.pdf",
"text": "孙之烨负责审核智能体项目。",
"score": 0.23,
}
],
"error_message": "",
},
)
frames = list(stream_message(conversation, "你好"))
frames = list(stream_message(conversation, "孙之烨是谁"))
joined = "".join(frames)
assert "普通回复" in joined
assert "workflow_started" not in joined
assert calls
assert "孙之烨负责审核智能体项目" in calls[0]
assert "用户知识库/1/2/孙之烨-260510.pdf" in calls[0]
def test_stream_message_meta_uses_first_prompt_title_for_new_conversation(monkeypatch, django_user_model):
@@ -257,12 +276,15 @@ def test_stream_message_falls_back_to_non_stream_reply_when_stream_breaks(monkey
user = django_user_model.objects.create_user(username="owner", password="pass")
conversation = Conversation.objects.create(user=user, title="会话")
def broken_stream_reply(conversation, content):
def broken_stream_reply(conversation, content, knowledge_context=""):
yield "已生成部分内容"
raise RuntimeError("provider connection reset")
monkeypatch.setattr("review_agent.services.stream_reply", broken_stream_reply)
monkeypatch.setattr("review_agent.services.generate_reply", lambda conversation, content: "非流式完整回复")
monkeypatch.setattr(
"review_agent.services.generate_reply",
lambda conversation, content, knowledge_context="": "非流式完整回复",
)
frames = list(stream_message(conversation, "普通问题"))