做网站的钱付款用途写什么,长春做网站优化的公司,买标准的网站建设,wordpress批量文章RAGFlow 学习笔记 0. 引言1. RAGFlow 支持的文档格式2. 嵌入模型选择后不再允许改变3. 干预文件解析4. RAGFlow 与其他 RAG 产品有何不同#xff1f; 5. RAGFlow 支持哪些语言#xff1f; 6. 哪些嵌入模型可以本地部署#xff1f; 7. 为什么RAGFlow解析文档的时间比… RAGFlow 学习笔记 0. 引言1. RAGFlow 支持的文档格式2. 嵌入模型选择后不再允许改变3. 干预文件解析4. RAGFlow 与其他 RAG 产品有何不同 5. RAGFlow 支持哪些语言 6. 哪些嵌入模型可以本地部署 7. 为什么RAGFlow解析文档的时间比LangChain要长 8. 为什么RAGFlow比其他项目需要更多的资源 9. RAGFlow 支持哪些架构或设备 10. 可以通过URL分享对话吗 11. 为什么我的 pdf 解析在接近完成时停止而日志没有显示任何错误 12. 为什么我无法将 10MB 以上的文件上传到本地部署的 RAGFlow 13. 如何增加RAGFlow响应的长度 14. Empty response(空响应)是什么意思怎么设置呢 15. 如何配置 RAGFlow 以 100% 匹配的结果进行响应而不是利用 LLM 16. 使用 DataGrip 连接 ElasticSearch99. 功能扩展99-1. 扩展支持本地 LLM 功能99-2. 扩展支持 OCI Cohere Embedding 功能99-3. 扩展支持 OCI Cohere Command-r 功能99-4. 扩展支持 Cohere Rerank 功能  0. 引言 
这篇文章记录一下学习 RAGFlow 是一些笔记方便以后自己查看和回忆。 
1. RAGFlow 支持的文档格式 
RAGFlow 支持的文件格式包括文档PDF、DOC、DOCX、TXT、MD、表格CSV、XLSX、XLS、图片JPEG、JPG、PNG、TIF、GIF和幻灯片PPT、PPTX。 
2. 嵌入模型选择后不再允许改变 
一旦您选择了嵌入模型并使用它来解析文件您就不再允许更改它。明显的原因是我们必须确保特定知识库中的所有文件都使用相同的嵌入模型进行解析确保它们在相同的嵌入空间中进行比较。 
3. 干预文件解析 
RAGFlow 具有可见性和可解释性允许您查看分块结果并在必要时进行干预。 
4. RAGFlow 与其他 RAG 产品有何不同  
尽管 LLMs 显着推进了自然语言处理 (NLP)但“垃圾进垃圾出”的现状仍然没有改变。为此RAGFlow 引入了与其他检索增强生成 (RAG) 产品相比的两个独特功能。 
细粒度文档解析文档解析涉及图片和表格您可以根据需要灵活干预。可追踪的答案减少幻觉您可以信任 RAGFlow 的答案因为您可以查看支持它们的引文和参考文献。 
5. RAGFlow 支持哪些语言  
目前有英文、简体中文、繁体中文。 
6. 哪些嵌入模型可以本地部署  
BAAI/bge-large-zh-v1.5BAAI/bge-base-en-v1.5BAAI/bge-large-en-v1.5BAAI/bge-small-en-v1.5BAAI/bge-small-zh-v1.5jinaai/jina-embeddings-v2-base-enjinaai/jina-embeddings-v2-small-ennomic-ai/nomic-embed-text-v1.5sentence-transformers/all-MiniLM-L6-v2maidalun1020/bce-embedding-base_v1 
7. 为什么RAGFlow解析文档的时间比LangChain要长  
RAGFlow 使用了视觉模型在布局分析、表格结构识别和 OCR光学字符识别等文档预处理任务中投入了大量精力。这会增加所需的额外时间。 
8. 为什么RAGFlow比其他项目需要更多的资源  
RAGFlow 有许多用于文档结构解析的内置模型这些模型占用了额外的计算资源。 
9. RAGFlow 支持哪些架构或设备  
目前我们仅支持 x86 CPU 和 Nvidia GPU。 
10. 可以通过URL分享对话吗  
是的此功能现已可用。 
11. 为什么我的 pdf 解析在接近完成时停止而日志没有显示任何错误  
如果您的 RAGFlow 部署在本地则解析进程可能会因 RAM 不足而被终止。尝试通过增加 docker/.env 中的 MEM_LIMIT 值来增加内存分配。 
12. 为什么我无法将 10MB 以上的文件上传到本地部署的 RAGFlow  
您可能忘记更新 MAX_CONTENT_LENGTH 环境变量 
将环境变量 MAX_CONTENT_LENGTH 添加到 ragflow/docker/.env 
MAX_CONTENT_LENGTH100000000更新 docker-compose.yml 
environment:- MAX_CONTENT_LENGTH${MAX_CONTENT_LENGTH}重新启动 RAGFlow 服务器 
docker compose up ragflow -d现在您应该能够上传大小小于 100MB 的文件。 
13. 如何增加RAGFlow响应的长度  
右键单击所需的对话框以显示“Chat Configuration(聊天配置)”窗口。 
切换到Model Setting(模型设置)选项卡并调整Max Tokens(最大令牌)滑块以获得所需的长度。 
单击“确定”确认您的更改。 
14. Empty response(空响应)是什么意思怎么设置呢  
如果从您的知识库中未检索到任何内容则您可以将系统的响应限制为您在“Empty response(空响应)”中指定的内容。如果您没有在空响应中指定任何内容您就可以让您的 LLM 即兴创作给它一个产生幻觉的机会。 
15. 如何配置 RAGFlow 以 100% 匹配的结果进行响应而不是利用 LLM  
单击页面中间顶部的知识库。 右键单击所需的知识库以显示配置对话框。 选择“QA(问答)”作为块方法然后单击“保存”以确认您的更改。 
16. 使用 DataGrip 连接 ElasticSearch 
curl -X POST -u elastic:infini_rag_flow -k http://localhost:1200/_license/start_trial?acknowledgetruepretty99. 功能扩展 
99-1. 扩展支持本地 LLM 功能 
vi rag/utils/__init__.py---
# encoder  tiktoken.encoding_for_model(gpt-3.5-turbo)
encoder  tiktoken.encoding_for_model(gpt-4-128k)
---vi api/settings.py---Local-OpenAI: {chat_model: gpt-4-128k,embedding_model: ,image2text_model: ,asr_model: ,},    
---vi api/db/init_data.py---
factory_infos  [{name: OpenAI,logo: ,tags: LLM,TEXT EMBEDDING,SPEECH2TEXT,MODERATION,status: 1,
}, {name: Local-OpenAI,logo: ,tags: LLM,status: 1,
},
---# ---------------------- Local-OpenAI ------------------------{fid: factory_infos[0][name],llm_name: gpt-4-128k,tags: LLM,CHAT,128K,max_tokens: 128000,model_type: LLMType.CHAT.value},vi rag/llm/__init__.py---
ChatModel  {OpenAI: GptTurbo,Local-OpenAI: GptTurbo,
---vi web/src/pages/user-setting/setting-model/index.tsx---
const IconMap  {Tongyi-Qianwen: tongyi,Moonshot: moonshot,OpenAI: openai,Local-OpenAI: openai,  ZHIPU-AI: zhipu,文心一言: wenxin,Ollama: ollama,Xinference: xinference,DeepSeek: deepseek,VolcEngine: volc_engine,BaiChuan: baichuan,Jina: jina,
};
---vi web/src/pages/user-setting/setting-model/api-key-modal/index.tsx---{llmFactory  Local-OpenAI  (Form.ItemFieldTypelabel{t(baseUrl)}namebase_urltooltip{t(baseUrlTip)}Input placeholderhttps://api.openai.com/v1 //Form.Item)}
---连接 MySQL 数据库1. 向llm_factories表插入数据
Local-OpenAI,1717812204952,2024-06-08 10:03:24,1717812204952,2024-06-08 10:03:24,,LLM,12. 向llm表插入数据
gpt-4-128k,1717812204975,2024-06-08 10:03:24,1717812204975,2024-06-08 10:03:24,chat,Local-OpenAI,128000,LLM,CHAT,128K,199-2. 扩展支持 OCI Cohere Embedding 功能 
连接 MySQL 数据库1. 向llm_factories表插入数据
OCI-Cohere,1717812204967,2024-06-08 10:03:24,1717812204967,2024-06-08 10:03:24,,TEXT EMBEDDING,12. 向llm表插入数据
cohere.embed-multilingual-v3.0,1717812204979,2024-06-08 10:03:24,1717812204979,2024-06-08 10:03:24,embedding,OCI-Cohere,512,TEXT EMBEDDING,,1vi api/apps/llm_app.py---fac  LLMFactoriesService.get_all()return get_json_result(data[f.to_dict() for f in fac if f.name not in [Youdao, FastEmbed, BAAI]])# return get_json_result(data[f.to_dict() for f in fac if f.name not in [Youdao, FastEmbed, BAAI, OCI-Cohere]])
------for m in llms:m[available]  m[fid] in facts or m[llm_name].lower()  flag-embedding or m[fid] in [Youdao,FastEmbed, BAAI]# m[available]  m[fid] in facts or m[llm_name].lower()  flag-embedding or m[fid] in [Youdao,FastEmbed, BAAI, OCI-Cohere]
---vi api/settings.py---OCI-Cohere: {chat_model: ,embedding_model: cohere.embed-multilingual-v3.0,image2text_model: ,asr_model: ,},
---vi api/db/init_data.py---
factory_infos  [{name: OpenAI,logo: ,tags: LLM,TEXT EMBEDDING,SPEECH2TEXT,MODERATION,status: 1,
}, {name: OCI-Cohere,logo: ,tags: TEXT EMBEDDING,status: 1,
},
---# ---------------------- OCI-Cohere ------------------------{fid: factory_infos[0][name],llm_name: cohere.embed-multilingual-v3.0,tags: TEXT EMBEDDING,512,max_tokens: 512,model_type: LLMType.EMBEDDING.value},vi rag/llm/__init__.py---
EmbeddingModel  {OCI-Cohere: OCICohereEmbed,
---vi rag/llm/embedding_model.py---
class OCICohereEmbed(Base):def __init__(self, key, model_namecohere.embed-multilingual-v3.0,base_urlhttps://inference.generativeai.us-chicago-1.oci.oraclecloud.com):if not base_url:base_url  https://inference.generativeai.us-chicago-1.oci.oraclecloud.comCONFIG_PROFILE  DEFAULTconfig  oci.config.from_file(~/.oci/config, CONFIG_PROFILE)self.client  oci.generative_ai_inference.GenerativeAiInferenceClient(configconfig, service_endpointbase_url,retry_strategyoci.retry.NoneRetryStrategy(),timeout(10, 240))self.model_name  model_nameself.compartment  keydef encode(self, texts: list, batch_size1):token_count  0texts  [truncate(t, 512) for t in texts]for t in texts:token_count  num_tokens_from_string(t)embed_text_detail  oci.generative_ai_inference.models.EmbedTextDetails()embed_text_detail.serving_mode  oci.generative_ai_inference.models.OnDemandServingMode(model_idself.model_name)embed_text_detail.inputs  textsembed_text_detail.truncate  NONEembed_text_detail.compartment_id  self.compartmentres  self.client.embed_text(embed_text_detail)print(f{res.data})return res.data.embeddings, token_countdef encode_queries(self, text):text  truncate(text, 512)token_count  num_tokens_from_string(text)res  self.encode(texts[text])return res[0], token_count在服务器上设置好 ~/.oci/config。 添加的模型时OCI-Cohere输入使用的OCI CompartmentID。 
制作图标访问 https://brandfetch.com/oracle.com 下载 oracle svg 图标保存到 web/src/assets/svg/llm 目录下面。 
vi web/src/pages/user-setting/setting-model/index.tsx---
const IconMap  {OCI-Cohere: oracle,
---99-3. 扩展支持 OCI Cohere Command-r 功能 
连接 MySQL 数据库1. 向llm_factories表插入数据
OCI-Cohere,1717812204967,2024-06-08 10:03:24,1717812204967,2024-06-08 10:03:24,,LLM,TEXT EMBEDDING,12. 向llm表插入数据
cohere.embed-multilingual-v3.0,1717812204979,2024-06-08 10:03:24,1717812204979,2024-06-08 10:03:24,embedding,OCI-Cohere,512,TEXT EMBEDDING,,1vi api/apps/llm_app.py---fac  LLMFactoriesService.get_all()return get_json_result(data[f.to_dict() for f in fac if f.name not in [Youdao, FastEmbed, BAAI]])# return get_json_result(data[f.to_dict() for f in fac if f.name not in [Youdao, FastEmbed, BAAI, OCI-Cohere]])
------for m in llms:m[available]  m[fid] in facts or m[llm_name].lower()  flag-embedding or m[fid] in [Youdao,FastEmbed, BAAI]# m[available]  m[fid] in facts or m[llm_name].lower()  flag-embedding or m[fid] in [Youdao,FastEmbed, BAAI, OCI-Cohere]
---vi api/settings.py---OCI-Cohere: {chat_model: cohere.command-r-16k,embedding_model: cohere.embed-multilingual-v3.0,image2text_model: ,asr_model: ,},
---vi api/db/init_data.py---
factory_infos  [{name: OpenAI,logo: ,tags: LLM,TEXT EMBEDDING,SPEECH2TEXT,MODERATION,status: 1,
}, {name: OCI-Cohere,logo: ,tags: LLM,TEXT EMBEDDING,status: 1,
},
---# ---------------------- OCI-Cohere ------------------------{fid: factory_infos[0][name],llm_name: cohere.embed-multilingual-v3.0,tags: TEXT EMBEDDING,512,max_tokens: 512,model_type: LLMType.EMBEDDING.value},{fid: factory_infos[0][name],llm_name: cohere.command-r-16k,tags: LLM,CHAT,16K,max_tokens: 16385,model_type: LLMType.CHAT.value},vi rag/llm/__init__.py---
ChatModel  {OCI-Cohere: OCICohereChat,
---vi rag/llm/chat_model.py---
class OCICohereChat(Base):def __init__(self, key, model_namecohere.command-r-16k,base_urlhttps://inference.generativeai.us-chicago-1.oci.oraclecloud.com):if not base_url:base_url  https://inference.generativeai.us-chicago-1.oci.oraclecloud.comCONFIG_PROFILE  DEFAULTconfig  oci.config.from_file(~/.oci/config, CONFIG_PROFILE)self.client  oci.generative_ai_inference.GenerativeAiInferenceClient(configconfig, service_endpointbase_url,retry_strategyoci.retry.NoneRetryStrategy(),timeout(10, 240))self.model_name  model_nameself.compartment  keystaticmethoddef _format_params(params):return {max_tokens: params.get(max_tokens, 3999),temperature: params.get(temperature, 0),frequency_penalty: params.get(frequency_penalty, 0),top_p: params.get(top_p, 0.75),top_k: params.get(top_k, 0),}def chat(self, system, history, gen_conf):chat_detail  oci.generative_ai_inference.models.ChatDetails()chat_request  oci.generative_ai_inference.models.CohereChatRequest()params  self._format_params(gen_conf)chat_request.max_tokens  params.get(max_tokens)chat_request.temperature  params.get(temperature)chat_request.frequency_penalty  params.get(frequency_penalty)chat_request.top_p  params.get(top_p)chat_request.top_k  params.get(top_k)chat_detail.serving_mode  oci.generative_ai_inference.models.OnDemandServingMode(model_idself.model_name)chat_detail.chat_request  chat_requestchat_detail.compartment_id  self.compartmentchat_request.is_stream  Falseif system:chat_request.preamble_override  systemprint(f{history[-1]})chat_request.message  history[-1][content]chat_response  self.client.chat(chat_detail)# Print resultprint(**************************Chat Result**************************)print(vars(chat_response))chat_response  vars(chat_response)chat_response_data  chat_response[data]chat_response_data_chat_response  chat_response_data.chat_responseans  chat_response_data_chat_response.texttoken_count  0for t in history[-1][content]:token_count  num_tokens_from_string(t)for t in ans:token_count  num_tokens_from_string(t)return ans, token_countdef chat_streamly(self, system, history, gen_conf):chat_detail  oci.generative_ai_inference.models.ChatDetails()chat_request  oci.generative_ai_inference.models.CohereChatRequest()params  self._format_params(gen_conf)chat_request.max_tokens  params.get(max_tokens)chat_request.temperature  params.get(temperature)chat_request.frequency_penalty  params.get(frequency_penalty)chat_request.top_p  params.get(top_p)chat_request.top_k  params.get(top_k)chat_detail.serving_mode  oci.generative_ai_inference.models.OnDemandServingMode(model_idself.model_name)chat_detail.chat_request  chat_requestchat_detail.compartment_id  self.compartmentchat_request.is_stream  Trueif system:chat_request.preamble_override  systemprint(f{history[-1]})token_count  0for t in history[-1][content]:token_count  num_tokens_from_string(t)chat_request.message  history[-1][content]chat_response  self.client.chat(chat_detail)# Print resultprint(**************************Chat Result**************************)chat_response  vars(chat_response)chat_response_data  chat_response[data]# for msg in chat_response_data.iter_content(chunk_sizeNone):for event in chat_response_data.events():token_count  1yield json.loads(event.data)[text]yield token_count在服务器上设置好 ~/.oci/config。 添加的模型时OCI-Cohere输入使用的OCI CompartmentID。 
99-4. 扩展支持 Cohere Rerank 功能 
连接 MySQL 数据库1. 向llm_factories表插入数据
Cohere,1717812204971,2024-06-08 10:03:24,1717812204971,2024-06-08 10:03:24,,TEXT RE-RANK,12. 向llm表插入数据
rerank-multilingual-v3.0,1717812205057,2024-06-08 10:03:25,1717812205057,2024-06-08 10:03:25,rerank,Cohere,4096,RE-RANK,4k,1vi api/settings.py---Cohere: {chat_model: ,embedding_model: ,image2text_model: ,asr_model: ,rerank_model: rerank-multilingual-v3.0,},
---vi api/db/init_data.py---
factory_infos  [{name: OpenAI,logo: ,tags: LLM,TEXT EMBEDDING,SPEECH2TEXT,MODERATION,status: 1,
}, {name: Cohere,logo: ,tags: TEXT RE-RANK,status: 1,
}
---# ---------------------- Cohere ------------------------{fid: factory_infos[12][name],llm_name: rerank-multilingual-v3.0,tags: RE-RANK,4k,max_tokens: 4096,model_type: LLMType.RERANK.value},vi rag/llm/__init__.py---
RerankModel  {Cohere: CohereRerank,
---vi rag/llm/rerank_model.py---def similarity(self, query: str, texts: list):token_count  1texts  [truncate(t, 4096) for t in texts]for t in texts:token_count  num_tokens_from_string(t)for t in query:token_count  num_tokens_from_string(t)response  self.co.rerank(modelself.model,queryquery,documentstexts,top_nlen(texts),return_documentsFalse,)return np.array([r.relevance_score for r in response.results]), token_count添加的模型时Cohere输入使用的Cohere 的 API Key。 
制作图标访问 https://brandfetch.com/cohere.com 下载 cohere svg 图标保存到 web/src/assets/svg/llm 目录下面。 
vi web/src/pages/user-setting/setting-model/index.tsx---
const IconMap  {Cohere: cohere,
---未完待续 文章转载自: http://www.morning.wkgyz.cn.gov.cn.wkgyz.cn http://www.morning.mdmc.cn.gov.cn.mdmc.cn http://www.morning.glnfn.cn.gov.cn.glnfn.cn http://www.morning.qqnjr.cn.gov.cn.qqnjr.cn http://www.morning.jtfcd.cn.gov.cn.jtfcd.cn http://www.morning.pbtrx.cn.gov.cn.pbtrx.cn http://www.morning.rjynd.cn.gov.cn.rjynd.cn http://www.morning.tpchy.cn.gov.cn.tpchy.cn http://www.morning.rgsgk.cn.gov.cn.rgsgk.cn http://www.morning.fdwlg.cn.gov.cn.fdwlg.cn http://www.morning.kjawz.cn.gov.cn.kjawz.cn http://www.morning.coffeedelsol.com.gov.cn.coffeedelsol.com http://www.morning.cniedu.com.gov.cn.cniedu.com http://www.morning.amlutsp.cn.gov.cn.amlutsp.cn http://www.morning.ndcf.cn.gov.cn.ndcf.cn http://www.morning.ypbp.cn.gov.cn.ypbp.cn http://www.morning.xpzgg.cn.gov.cn.xpzgg.cn http://www.morning.ydhmt.cn.gov.cn.ydhmt.cn http://www.morning.ktrh.cn.gov.cn.ktrh.cn http://www.morning.kjkml.cn.gov.cn.kjkml.cn http://www.morning.rfwqt.cn.gov.cn.rfwqt.cn http://www.morning.tzzxs.cn.gov.cn.tzzxs.cn http://www.morning.rdpps.cn.gov.cn.rdpps.cn http://www.morning.hpdpp.cn.gov.cn.hpdpp.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.dxrbp.cn.gov.cn.dxrbp.cn http://www.morning.gfznl.cn.gov.cn.gfznl.cn http://www.morning.qwdqq.cn.gov.cn.qwdqq.cn http://www.morning.zqdzg.cn.gov.cn.zqdzg.cn http://www.morning.fbpdp.cn.gov.cn.fbpdp.cn http://www.morning.c7617.cn.gov.cn.c7617.cn http://www.morning.czwed.com.gov.cn.czwed.com http://www.morning.yjtnc.cn.gov.cn.yjtnc.cn http://www.morning.zqkms.cn.gov.cn.zqkms.cn http://www.morning.dhbyj.cn.gov.cn.dhbyj.cn http://www.morning.jgcrr.cn.gov.cn.jgcrr.cn http://www.morning.fylqz.cn.gov.cn.fylqz.cn http://www.morning.rzmlc.cn.gov.cn.rzmlc.cn http://www.morning.dfkby.cn.gov.cn.dfkby.cn http://www.morning.zdzgf.cn.gov.cn.zdzgf.cn http://www.morning.rkkh.cn.gov.cn.rkkh.cn http://www.morning.bpncd.cn.gov.cn.bpncd.cn http://www.morning.ztnmc.cn.gov.cn.ztnmc.cn http://www.morning.qgghr.cn.gov.cn.qgghr.cn http://www.morning.ndpwg.cn.gov.cn.ndpwg.cn http://www.morning.wyzby.cn.gov.cn.wyzby.cn http://www.morning.nbpqx.cn.gov.cn.nbpqx.cn http://www.morning.snnkt.cn.gov.cn.snnkt.cn http://www.morning.pqcbx.cn.gov.cn.pqcbx.cn http://www.morning.tzlfc.cn.gov.cn.tzlfc.cn http://www.morning.sgqw.cn.gov.cn.sgqw.cn http://www.morning.qyfqx.cn.gov.cn.qyfqx.cn http://www.morning.fjglf.cn.gov.cn.fjglf.cn http://www.morning.gthgf.cn.gov.cn.gthgf.cn http://www.morning.cylbs.cn.gov.cn.cylbs.cn http://www.morning.dbfwq.cn.gov.cn.dbfwq.cn http://www.morning.wdply.cn.gov.cn.wdply.cn http://www.morning.ndyrb.com.gov.cn.ndyrb.com http://www.morning.pmnn.cn.gov.cn.pmnn.cn http://www.morning.kljhr.cn.gov.cn.kljhr.cn http://www.morning.nd-test.com.gov.cn.nd-test.com http://www.morning.wffxr.cn.gov.cn.wffxr.cn http://www.morning.qdsmile.cn.gov.cn.qdsmile.cn http://www.morning.fnzbx.cn.gov.cn.fnzbx.cn http://www.morning.rqlzz.cn.gov.cn.rqlzz.cn http://www.morning.rnqrl.cn.gov.cn.rnqrl.cn http://www.morning.wqbzt.cn.gov.cn.wqbzt.cn http://www.morning.ytnn.cn.gov.cn.ytnn.cn http://www.morning.wkmyt.cn.gov.cn.wkmyt.cn http://www.morning.wcqxj.cn.gov.cn.wcqxj.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn http://www.morning.hgbzc.cn.gov.cn.hgbzc.cn http://www.morning.tstkr.cn.gov.cn.tstkr.cn http://www.morning.myxps.cn.gov.cn.myxps.cn http://www.morning.nxbsq.cn.gov.cn.nxbsq.cn http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn http://www.morning.sqnxk.cn.gov.cn.sqnxk.cn http://www.morning.kwblwbl.cn.gov.cn.kwblwbl.cn http://www.morning.gkxyy.cn.gov.cn.gkxyy.cn