feat(chat): 接入全局知识库上下文
This commit is contained in:
@@ -16,7 +16,7 @@ class LLMRequestError(RuntimeError):
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def generate_reply(conversation, user_message: str) -> str:
|
||||
def generate_reply(conversation, user_message: str, knowledge_context: str = "") -> str:
|
||||
"""Calls the SiliconFlow OpenAI-compatible chat endpoint and returns assistant text."""
|
||||
|
||||
if not settings.LLM_API_KEY:
|
||||
@@ -26,7 +26,7 @@ def generate_reply(conversation, user_message: str) -> str:
|
||||
|
||||
payload = {
|
||||
"model": settings.LLM_MODEL,
|
||||
"messages": build_messages(conversation, user_message),
|
||||
"messages": build_messages(conversation, user_message, knowledge_context=knowledge_context),
|
||||
"temperature": 0.3,
|
||||
}
|
||||
body = json.dumps(payload).encode("utf-8")
|
||||
@@ -98,7 +98,7 @@ def generate_completion(messages: list[dict[str, str]], *, temperature: float =
|
||||
raise LLMRequestError("模型接口返回格式不符合预期。") from exc
|
||||
|
||||
|
||||
def stream_reply(conversation, user_message: str):
|
||||
def stream_reply(conversation, user_message: str, knowledge_context: str = ""):
|
||||
"""Streams incremental assistant text from the SiliconFlow chat endpoint."""
|
||||
|
||||
if not settings.LLM_API_KEY:
|
||||
@@ -108,7 +108,7 @@ def stream_reply(conversation, user_message: str):
|
||||
|
||||
payload = {
|
||||
"model": settings.LLM_MODEL,
|
||||
"messages": build_messages(conversation, user_message),
|
||||
"messages": build_messages(conversation, user_message, knowledge_context=knowledge_context),
|
||||
"temperature": 0.3,
|
||||
"stream": True,
|
||||
}
|
||||
@@ -153,10 +153,21 @@ def stream_reply(conversation, user_message: str):
|
||||
raise LLMRequestError(f"模型接口调用失败:{exc.reason}") from exc
|
||||
|
||||
|
||||
def build_messages(conversation, latest_user_message: str) -> list[dict[str, str]]:
|
||||
def build_messages(conversation, latest_user_message: str, knowledge_context: str = "") -> list[dict[str, str]]:
|
||||
"""Builds system and conversation history messages for the provider call."""
|
||||
|
||||
messages = [{"role": "system", "content": system_prompt()}]
|
||||
if knowledge_context.strip():
|
||||
messages.append(
|
||||
{
|
||||
"role": "system",
|
||||
"content": (
|
||||
"以下是全局知识库检索到的材料片段。回答用户时优先依据这些片段;"
|
||||
"如果片段不足以支持结论,请明确说明信息不足,不要编造。\n\n"
|
||||
f"{knowledge_context.strip()}"
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
for message in conversation.messages.all():
|
||||
messages.append({"role": message.role, "content": message.content})
|
||||
|
||||
Reference in New Issue
Block a user