Files
gangyan/langchain-chat/configs/model_config.py
liuguancen 846380879b fix(langchain-chat): R1 思考过程显示 + 选题推荐放宽 + RAG 诊断日志
三个独立修复 / 排查:

1. R1 思考过程不显示
   - 根因: chat_test.py 等 <think> 开标签出现才进思考态,但 R1
     流式输出本来就在 reasoning 态启动,永远不出 <think>,所有
     reasoning 全部当 text 走到答案区
   - 修法: 引入 r1_thinking_done 状态机,默认在思考态,
     看到 </think> 切换;R1-70B 直连本地代理 deepseek-r1
     (官方 deepseek-reasoner 把 reasoning 放独立字段,旧版
     callback 取不到)
   - 结果验证: "1+1" → 269 think + 40 text,思考与答案正确分流

2. 选题推荐场景拒答 + chat 模板标记泄漏
   - 根因: prompt 写死了 "你只能回答有关选题推荐的问题"
     + 直接嵌入 <|im_start|>/<|im_end|> Qwen chat 标记
   - 修法: 改写 Topic Recommend Assistant prompt,删 chat 标记,
     行为准则改为"沾边查询用工具回答";agent_v2 增加 strip
     防守层
   - 结果验证: "钢铁行业研究重点方向" → agent 调工具,不再拒答

3. 知识库召回 0 排查(数据问题,未根治)
   - 根因: kb_config.py 把所有 KB(政策库/钢铁库/报告库等)
     都映射到 t_policy_total_bge_new_v2,但 Milvus 里根本没有
     这个 collection(实际只有 11 个 p_* 个人库 + 1 个
     t_journal_article_bge_v1)
   - 临时改: search_tool.py 加诊断日志 [RAG诊断] 输出每个 KB
     召回数;rag_search 内 for 循环里首个 KB 空就 return 的
     bug 改 continue
   - 待决策: kb_config 是否把默认 KB 映射到唯一存在的
     t_journal_article_bge_v1,或重建对应集合

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 15:44:05 +08:00

177 lines
6.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
# 可以指定一个绝对路径统一存放所有的Embedding和LLM模型。
# 每个模型可以是一个单独的目录,也可以是某个目录下的二级子目录。
# 如果模型目录名称和 MODEL_PATH 中的 key 或 value 相同,程序会自动检测加载,无需修改 MODEL_PATH 中的路径。
MODEL_ROOT_PATH = "/home/gc/gangyan/models"
# 选用的 Embedding 名称
EMBEDDING_MODEL = "bge-m3-api"
# 知识库表里或旧环境可能仍为本地键名;迁移内网 embedding API 后统一映射到 ONLINE_LLM_MODEL 的键
EMBED_MODEL_ALIASES = {
"bge_m3": "bge-m3-api",
}
# LLM 名称别名映射:用于旧前端/历史数据仍请求无权限模型时的兼容与兜底
# 例如内网网关令牌不允许 Qwen2-72B-Instruct则统一转到 deepseek-v3
LLM_MODEL_ALIASES = {
"Qwen2-72B-Instruct": "deepseek-v3",
}
# Embedding 模型运行设备。设为 "auto" 会自动检测(会有警告),也可手动设定为 "cuda","mps","cpu","xpu" 其中之一。
EMBEDDING_DEVICE = "cpu"
# mivlus混合检索条件
EXPR = ""
# 选用的reranker模型
RERANKER_MODEL = "bge-reranker"
# 是否启用reranker模型
USE_RERANKER = False
RERANKER_MAX_LENGTH = 1024
# 如果需要在 EMBEDDING_MODEL 中增加自定义的关键字时配置
EMBEDDING_KEYWORD_FILE = "keywords.txt"
EMBEDDING_MODEL_OUTPUT_PATH = "output"
#模型数据库的定义
POLICY_KNOWLEDGE_BASE = "t_policy_total_bge_new_v2"
# REPORT_KNOWLEDGE_BASE = "t_strategy_report_bge_v2"
REPORT_KNOWLEDGE_BASE = "gydemo_report_v2"
JOURNAL_KNOWLEDGE_BASE = "t_journal_article_bge_v1"
# 润色改写等功能相关模型设置
STRATEGY_MODEL_DICT = {
'DEFAULT_EXTRACT_KEYWORDS_MODEL_NAME': "deepseek-v3",
'DEFAULT_QUERY_REWRITE_MODEL_NAME': "deepseek-v3",
'DEFAULT_SUMMARY_MODEL_NAME': "deepseek-v3",
'DEFAULT_RRQJ_MODEL_NAME': "deepseek-v3",
'CONTINUE_WRITE_MODEL_NAME': "deepseek-v3",
'REWRITE_MODEL_NAME': "deepseek-v3",
'EXPAND_WRITE_MODEL_NAME': "deepseek-v3",
'ABB_REWRITE_MODEL_NAME': "deepseek-v3",
'EMBELLISH_MODEL_NAME': "deepseek-v3",
'CHI_TO_ENS_MODEL_NAME': "deepseek-v3",
'ENS_TO_CHI_MODEL_NAME': "deepseek-v3",
'FORMAL_STYLE_MODEL_NAME': "deepseek-v3",
'PARTY_STYLE_MODEL_NAME': "deepseek-v3",
'COLLOQUIAL_STYLE_MODEL_NAME': "deepseek-v3",
}
# 要运行的 LLM 名称,可以包括本地模型和在线模型。列表中本地模型将在启动项目时全部加载。
# 列表中第一个模型将作为 API 和 WEBUI 的默认模型。
# 在这里使用目前主流的两个离线模型其中chatglm3-6b 为默认加载模型。
# 如果你的显存不足,可使用 Qwen-1_8B-Chat, 该模型 FP16 仅需 3.8G显存。
LLM_MODELS = ["deepseek-v3", "deepseek-r1", "deepseek-chat", "qwen-max", "Qwen2-72B-Instruct"]
Agent_MODEL = None
# LLM 模型运行设备。设为"auto"会自动检测(会有警告),也可手动设定为 "cuda","mps","cpu","xpu" 其中之一。
LLM_DEVICE = "cuda"
HISTORY_LEN = 20
MAX_TOKENS = None
MAX_CUT_TOKENS = 30 * 1024
TEMPERATURE = 0.7
DEEPSEEK_MODELS = ["deepseek-r1", "deepseek-reasoner", "deepseek-chat"]
CAST_MODELS = ["kexie_0.5b"]
ONLINE_LLM_MODEL = {
# 本地部署的大模型 API (10.102.24.75:3000)
"bge-m3-api": {
"model_name": "bge-m3",
"api_base_url": "http://10.102.24.75:3000/v1",
"api_key": "sk-nDr7vDHOxJQOGFxbmSE6g2wCK0WELtyZst4kD3eo4383P6j5",
"provider": "OpenAIWorker",
},
"bge-reranker": {
"model_name": "bge-reranker",
"api_base_url": "http://10.102.24.75:3000/v1",
"api_key": "sk-nDr7vDHOxJQOGFxbmSE6g2wCK0WELtyZst4kD3eo4383P6j5",
"provider": "OpenAIWorker",
},
"deepseek-v3": {
"model_name": "deepseek-v3",
"api_base_url": "http://10.102.24.75:3000/v1",
"api_key": "sk-BlQIGRrotbVDWE5mXCPBFjVWIvJ83hldzz67xInNwzVo7pPb",
},
"deepseek-r1": {
"model_name": "deepseek-r1",
"api_base_url": "http://10.102.24.75:3000/v1",
"api_key": "sk-BlQIGRrotbVDWE5mXCPBFjVWIvJ83hldzz67xInNwzVo7pPb",
},
"Qwen2-72B-Instruct": {
"model_name": "Qwen2-72B-Instruct",
"api_base_url": "http://10.102.24.75:3000/v1",
"api_key": "sk-BlQIGRrotbVDWE5mXCPBFjVWIvJ83hldzz67xInNwzVo7pPb",
},
# 阿里云通义千问
# 文档参考 https://help.aliyun.com/zh/model-studio/qwen-api-reference/
"qwen-max":{
"model_name":"qwen-max",
"api_base_url":"https://dashscope.aliyuncs.com/compatible-mode/v1",
"api_key":"sk-672f9d1fc4404674bf1a713dfd130a14",
},
# deepseek
"deepseek-chat":{
# DeepSeek-V3.2
"model_name":"deepseek-chat",
"api_base_url":"https://api.deepseek.com/v1",
"api_key":"sk-26858b50690a49828766fcfcf3290de9",
},
"deepseek-reasoner":{
# DeepSeek-V3.2
"model_name":"deepseek-reasoner",
"api_base_url":"https://api.deepseek.com/v1",
"api_key":"sk-26858b50690a49828766fcfcf3290de9",
},
# 智谱AI API,具体注册及api key获取请前往 http://open.bigmodel.cn
"zhipu-api": {
"api_key": "http://open.bigmodel.cn",
"version": "glm-4",
"provider": "ChatGLMWorker",
},
}
# 在以下字典中修改属性值以指定本地embedding模型存储位置。支持3种设置方法
# 1、将对应的值修改为模型绝对路径
# 2、不修改此处的值以 text2vec 为例):
# 2.1 如果{MODEL_ROOT_PATH}下存在如下任一子目录:
# - text2vec
# - GanymedeNil/text2vec-large-chinese
# - text2vec-large-chinese
# 2.2 如果以上本地路径不存在则使用huggingface模型
MODEL_PATH = {
"embed_model": {
"bge_m3": "bge-m3",
},
"llm_model": {
"deepseek-v3": "deepseek-v3",
"deepseek-r1": "deepseek-r1",
"qwen-max": "qwen-max",
"deepseek-chat": "deepseek-chat",
"deepseek-reasoner": "deepseek-reasoner",
"Qwen2-72B-Instruct": "Qwen2-72B-Instruct"
},
"reranker": {
"bge-reranker": "bge-reranker",
"bge-reranker-large": "bge-reranker-large",
}
}
# 通常情况下不需要更改以下内容
# nltk 模型存储路径
NLTK_DATA_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "nltk_data")
# 使用VLLM可能导致模型推理能力下降无法完成Agent任务
VLLM_MODEL_DICT = {
"chatglm3-6b": "chatglm3-6b",
}
SUPPORT_AGENT_MODEL = [
"Qwen", # 所有Qwen系列本地模型
"chatglm3-6b"
]