yanqiang commited on
Commit
96cd96f
0 Parent(s):

feature@init

Browse files
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ .idea
README.md ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # chinese-langchain
2
+
3
+ > Chinese-LangChain:中文langchain,基于ChatGLM-6b+langchain实现本地化知识库检索与智能答案生成
4
+
5
+ ## 特性
6
+
7
+ - 支持多种文档上传与内容解析:pdf、docx,ppt等
8
+ - 支持知识增量更新
9
+
10
+ [//]: # (- 支持检索结果与LLM生成结果对比)
11
+
12
+ ## 引用
13
+
14
+ - webui参考:https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui
15
+ - knowledge文档参考:https://github.com/imClumsyPanda/langchain-ChatGLM
16
+ - LLM模型:https://github.com/THUDM/ChatGLM-6B
clc/__init__.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 _*-
3
+ """
4
+ @author:quincy qiang
5
+ @license: Apache Licence
6
+ @file: __init__.py
7
+ @time: 2023/04/17
8
+ @contact: [email protected]
9
+ @software: PyCharm
10
+ @description: coding..
11
+ """
clc/config.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 _*-
3
+ """
4
+ @author:quincy qiang
5
+ @license: Apache Licence
6
+ @file: config.py
7
+ @time: 2023/04/17
8
+ @contact: [email protected]
9
+ @software: PyCharm
10
+ @description: coding..
11
+ """
12
+
13
+
14
+ class LangChainCFG:
15
+ llm_model_name = 'chatglm-6b' # 本地模型文件 or huggingface远程仓库
16
+ embedding_model_name = 'text2vec-large-chinese' # 检索模型文件 or huggingface远程仓库
17
+ vector_store_path = '.'
18
+ docs_path = './docs'
clc/gpt_service.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 _*-
3
+ """
4
+ @author:quincy qiang
5
+ @license: Apache Licence
6
+ @file: generate.py
7
+ @time: 2023/04/17
8
+ @contact: [email protected]
9
+ @software: PyCharm
10
+ @description: coding..
11
+ """
12
+
13
+ from typing import List, Optional
14
+
15
+ from langchain.llms.base import LLM
16
+ from langchain.llms.utils import enforce_stop_tokens
17
+ from transformers import AutoModel, AutoTokenizer
18
+
19
+
20
+ class ChatGLMService(LLM):
21
+ max_token: int = 10000
22
+ temperature: float = 0.1
23
+ top_p = 0.9
24
+ history = []
25
+ tokenizer: object = None
26
+ model: object = None
27
+
28
+ def __init__(self):
29
+ super().__init__()
30
+
31
+ @property
32
+ def _llm_type(self) -> str:
33
+ return "ChatGLM"
34
+
35
+ def _call(self,
36
+ prompt: str,
37
+ stop: Optional[List[str]] = None) -> str:
38
+ response, _ = self.model.chat(
39
+ self.tokenizer,
40
+ prompt,
41
+ history=self.history,
42
+ max_length=self.max_token,
43
+ temperature=self.temperature,
44
+ )
45
+ if stop is not None:
46
+ response = enforce_stop_tokens(response, stop)
47
+ self.history = self.history + [[None, response]]
48
+ return response
49
+
50
+ def load_model(self,
51
+ model_name_or_path: str = "THUDM/chatglm-6b"):
52
+ self.tokenizer = AutoTokenizer.from_pretrained(
53
+ model_name_or_path,
54
+ trust_remote_code=True
55
+ )
56
+ self.model = (
57
+ AutoModel.from_pretrained(
58
+ model_name_or_path,
59
+ trust_remote_code=True)
60
+ .half()
61
+ .cuda()
62
+ )
63
+
64
+ # if __name__ == '__main__':
65
+ # config=LangChainCFG()
66
+ # chatLLM = ChatGLMService()
67
+ # chatLLM.load_model(model_name_or_path=config.llm_model_name)
clc/langchain_application.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 _*-
3
+ """
4
+ @author:quincy qiang
5
+ @license: Apache Licence
6
+ @file: model.py
7
+ @time: 2023/04/17
8
+ @contact: [email protected]
9
+ @software: PyCharm
10
+ @description: coding..
11
+ """
12
+
13
+ from langchain.chains import RetrievalQA
14
+ from langchain.prompts.prompt import PromptTemplate
15
+ from clc.gpt_service import ChatGLMService
16
+ from clc.source_service import SourceService
17
+
18
+
19
+ class LangChainApplication(object):
20
+ def __init__(self, config):
21
+ self.config = config
22
+ self.llm_service = ChatGLMService()
23
+ self.llm_service.load_model(model_name_or_path=self.config.llm_model_name)
24
+ self.source_service = SourceService(config)
25
+ self.source_service.init_source_vector()
26
+
27
+ def get_knowledge_based_answer(self, query,
28
+ history_len=5,
29
+ temperature=0.1,
30
+ top_p=0.9,
31
+ chat_history=[]):
32
+ prompt_template = """基于以下已知信息,简洁和专业的来回答用户的问题。
33
+ 如果无法从中得到答案,请说 "根据已知信息无法回答该问题" 或 "没有提供足够的相关信息",不允许在答案中添加编造成分,答案请使用中文。
34
+ 已知内容:
35
+ {context}
36
+ 问题:
37
+ {question}"""
38
+ prompt = PromptTemplate(template=prompt_template,
39
+ input_variables=["context", "question"])
40
+ self.llm_service.history = chat_history[-history_len:] if history_len > 0 else []
41
+
42
+ self.llm_service.temperature = temperature
43
+ self.llm_service.top_p = top_p
44
+
45
+ knowledge_chain = RetrievalQA.from_llm(
46
+ llm=self.llm_service,
47
+ retriever=self.source_service.vector_store.as_retriever(
48
+ search_kwargs={"k": 2}),
49
+ prompt=prompt)
50
+ knowledge_chain.combine_documents_chain.document_prompt = PromptTemplate(
51
+ input_variables=["page_content"], template="{page_content}")
52
+
53
+ knowledge_chain.return_source_documents = True
54
+
55
+ result = knowledge_chain({"query": query})
56
+ return result
57
+
58
+ # if __name__ == '__main__':
59
+ # config = LangChainCFG()
60
+ # application = LangChainApplication(config)
61
+ # result = application.get_knowledge_based_answer('马保国是谁')
62
+ # print(result)
63
+ # application.source_service.add_document('/home/searchgpt/yq/Knowledge-ChatGLM/docs/added/马保国.txt')
64
+ # result = application.get_knowledge_based_answer('马保国是谁')
65
+ # print(result)
clc/source_service.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 _*-
3
+ """
4
+ @author:quincy qiang
5
+ @license: Apache Licence
6
+ @file: search.py
7
+ @time: 2023/04/17
8
+ @contact: [email protected]
9
+ @software: PyCharm
10
+ @description: coding..
11
+ """
12
+
13
+ import os
14
+
15
+ from langchain.document_loaders import UnstructuredFileLoader
16
+ from langchain.embeddings.huggingface import HuggingFaceEmbeddings
17
+ from langchain.vectorstores import FAISS
18
+
19
+
20
+ class SourceService(object):
21
+ def __init__(self, config):
22
+ self.config = config
23
+ self.embeddings = HuggingFaceEmbeddings(model_name=self.config.embedding_model_name)
24
+ self.docs_path = self.config.docs_path
25
+ self.vector_store_path = self.config.vector_store_path
26
+
27
+ def init_source_vector(self):
28
+ """
29
+ 初始化本地知识库向量
30
+ :return:
31
+ """
32
+ docs = []
33
+ for doc in os.listdir(self.docs_path):
34
+ if doc.endswith('.txt'):
35
+ print(doc)
36
+ loader = UnstructuredFileLoader(f'{self.docs_path}/{doc}', mode="elements")
37
+ doc = loader.load()
38
+ docs.extend(doc)
39
+ self.vector_store = FAISS.from_documents(docs, self.embeddings)
40
+ self.vector_store.save_local(self.vector_store_path)
41
+
42
+ def add_document(self, document_path):
43
+ loader = UnstructuredFileLoader(document_path, mode="elements")
44
+ doc = loader.load()
45
+ self.vector_store.add_documents(doc)
46
+ self.vector_store.save_local(self.vector_store_path)
47
+
48
+ def load_vector_store(self):
49
+ self.vector_store = FAISS.load_local(self.vector_store_path, self.embeddings)
50
+ return self.vector_store
51
+
52
+ # if __name__ == '__main__':
53
+ # config = LangChainCFG()
54
+ # source_service = SourceService(config)
55
+ # source_service.init_source_vector()
56
+ # search_result = source_service.vector_store.similarity_search_with_score('科比')
57
+ # print(search_result)
58
+ #
59
+ # source_service.add_document('/home/searchgpt/yq/Knowledge-ChatGLM/docs/added/科比.txt')
60
+ # search_result = source_service.vector_store.similarity_search_with_score('科比')
61
+ # print(search_result)
62
+ #
63
+ # vector_store=source_service.load_vector_store()
64
+ # search_result = source_service.vector_store.similarity_search_with_score('科比')
65
+ # print(search_result)
docs/added/马保国.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ 马保国(1952年- ) [1] ,英国混元太极拳协会创始人,自称“浑元形意太极拳掌门人”。 [2-4]
2
+ 2020年11月15日,马保国首度回应“屡遭恶搞剪辑”:“远离武林,已回归平静生活” [5] ;11月16日,马保国宣布将参演电影《少年功夫王》。 [6] 11月28日,人民日报客户端刊发评论《马保国闹剧,该立刻收场了》。 [7] 11月29日,新浪微博社区管理官方发布公告称,已解散马保国相关的粉丝群。 [8]
docs/姚明.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ 姚明(Yao Ming),男,汉族,无党派人士,1980年9月12日出生于上海市徐汇区,祖籍江苏省苏州市吴江区震泽镇,前中国职业篮球运动员,司职中锋,现任亚洲篮球联合会主席、中国篮球协会主席、中职联公司董事长兼总经理, [1-3] 十三届全国青联副主席, [4] 改革先锋奖章获得者。 [5] 第十四届全国人大代表 [108] 。
2
+ 1998年4月,姚明入选王非执教的国家队,开始篮球生涯。2001夺得CBA常规赛MVP,2002年夺得CBA总冠军以及总决赛MVP,分别3次当选CBA篮板王以及盖帽王,2次当选CBA扣篮王。在2002年NBA选秀中,他以状元秀身份被NBA的休斯敦火箭队选中,2003-09年连续6个赛季(生涯共8次)入选NBA全明星赛阵容,2次入选NBA最佳阵容二阵,3次入选NBA最佳阵容三阵。2009年,姚明收购上海男篮,成为上海久事大鲨鱼俱乐部老板。2011年7月20日,姚明宣布退役。
3
+ 2013年,姚明当选为第十二届全国政协委员。2015年2月10日,姚明正式成为北京申办冬季奥林匹克运动会形象大使之一。2016年4月4日,姚明正式入选2016年奈史密斯篮球名人纪念堂,成为首位获此殊荣的中国人;10月,姚明成为中国“火星大使”;11月,当选CBA公司副董事长。 [6]
4
+ 2017年10月20日,姚明已将上海哔哩哔哩俱乐部全部股权转让。 [7] 2018年9月,荣获第十届“中华慈善奖”慈善楷模奖项。 [8] 2019年10月28日,胡润研究院发布《2019胡润80后白手起家富豪榜》,姚明以22亿元排名第48。
docs/王治郅.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ 王治郅,1977年7月8日出生于北京,前中国篮球运动员,司职大前锋/中锋,现已退役。 [1]
2
+ 1991年12月,王治郅进入八一青年男子篮球队。1993年初入选中国少年特殊身材篮球队,并于同年入选中国青年男子篮球队,后加入八一男子篮球队。2001-05年曾效力于NBA独行侠、快船以及热火队。 [1]
3
+ 2015年9月15日新赛季CBA注册截止日,八一队的球员注册名单上并没有出现38岁老将王治郅的名字,王治郅退役已成事实 [2] 。2016年7月5日,王治郅的退役仪式在北京奥体中心举行,在仪式上,王治郅正式宣布退役。 [3] 2018年7月,王治郅正式成为八一南昌队主教练。 [1] [4]
4
+ 王治郅是中国篮球界进入NBA的第一人,被评选为中国篮坛50大杰出人物和中国申办奥运特使。他和姚明、蒙克·巴特尔一起,被称为篮球场上的“移动长城”。 [5]
docs/科比.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ 科比·布莱恩特(Kobe Bryant,1978年8月23日—2020年1月26日),全名科比·比恩·布莱恩特·考克斯(Kobe Bean Bryant Cox),出生于美国宾夕法尼亚州费城,美国已故篮球运动员,司职得分后卫/小前锋。 [5] [24] [84]
2
+ 1996年NBA选秀,科比于第1轮第13顺位被夏洛特黄蜂队选中并被交易至洛杉矶湖人队,整个NBA生涯都效力于洛杉矶湖人队;共获得5次NBA总冠军、1次NBA常规赛MVP、2次NBA总决赛MVP、4次NBA全明星赛MVP、2次NBA赛季得分王;共入选NBA全明星首发阵容18次、NBA最佳阵容15次(其中一阵11次、二阵2次、三阵2次)、NBA最佳防守阵容12次(其中一阵9次、二阵3次)。 [9] [24]
3
+ 2007年,科比首次入选美国国家男子篮球队,后帮助美国队夺得2007年美洲男篮锦标赛金牌、2008年北京奥运会男子篮球金牌以及2012年伦敦奥运会男子篮球金牌。 [91]
4
+ 2015年11月30日,科比发文宣布将在赛季结束后退役。 [100] 2017年12月19日,湖人队为科比举行球衣退役仪式。 [22] 2020年4月5日,科比入选奈·史密斯篮球名人纪念堂。 [7]
5
+ 美国时间2020年1月26日(北京时间2020年1月27日),科比因直升机事故遇难,享年41岁。 [23]
main.py ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 _*-
3
+ """
4
+ @author:quincy qiang
5
+ @license: Apache Licence
6
+ @file: main.py
7
+ @time: 2023/04/17
8
+ @contact: [email protected]
9
+ @software: PyCharm
10
+ @description: coding..
11
+ """
12
+
13
+ import os
14
+ import shutil
15
+
16
+ import gradio as gr
17
+
18
+ from clc.langchain_application import LangChainApplication
19
+
20
+
21
+ # 修改成自己的配置!!!
22
+ class LangChainCFG:
23
+ llm_model_name = '../../pretrained_models/chatglm-6b' # 本地模型文件 or huggingface远程仓库
24
+ embedding_model_name = '../../pretrained_models/text2vec-large-chinese' # 检索模型文件 or huggingface远程仓库
25
+ vector_store_path = './cache'
26
+ docs_path = './docs'
27
+
28
+
29
+ config = LangChainCFG()
30
+ application = LangChainApplication(config)
31
+
32
+
33
+ def get_file_list():
34
+ if not os.path.exists("docs"):
35
+ return []
36
+ return [f for f in os.listdir("docs")]
37
+
38
+
39
+ file_list = get_file_list()
40
+
41
+
42
+ def upload_file(file):
43
+ if not os.path.exists("docs"):
44
+ os.mkdir("docs")
45
+ filename = os.path.basename(file.name)
46
+ shutil.move(file.name, "docs/" + filename)
47
+ # file_list首位插入新上传的文件
48
+ file_list.insert(0, filename)
49
+ application.source_service.add_document("docs/" + filename)
50
+ return gr.Dropdown.update(choices=file_list, value=filename)
51
+
52
+
53
+ def clear_session():
54
+ return '', None
55
+
56
+
57
+ def predict(input,
58
+ large_language_model,
59
+ embedding_model,
60
+ history=None):
61
+ print(large_language_model, embedding_model)
62
+ if history == None:
63
+ history = []
64
+ resp = application.get_knowledge_based_answer(
65
+ query=input,
66
+ history_len=5,
67
+ temperature=0.1,
68
+ top_p=0.9,
69
+ chat_history=history
70
+ )
71
+ print(resp)
72
+ history.append((input, resp['result']))
73
+ return '', history, history
74
+
75
+
76
+ block = gr.Blocks()
77
+ with block as demo:
78
+ gr.Markdown("""<h1><center>Chinese-LangChain</center></h1>
79
+ <center><font size=3>
80
+ </center></font>
81
+ """)
82
+ with gr.Row():
83
+ with gr.Column(scale=1):
84
+ embedding_model = gr.Dropdown([
85
+ "text2vec-base"
86
+ ],
87
+ label="Embedding model",
88
+ value="text2vec-base")
89
+
90
+ large_language_model = gr.Dropdown(
91
+ [
92
+ "ChatGLM-6B-int4",
93
+ ],
94
+ label="large language model",
95
+ value="ChatGLM-6B-int4")
96
+
97
+ with gr.Tab("select"):
98
+ selectFile = gr.Dropdown(file_list,
99
+ label="content file",
100
+ interactive=True,
101
+ value=file_list[0] if len(file_list) > 0 else None)
102
+ with gr.Tab("upload"):
103
+ file = gr.File(label="请上传知识库文件",
104
+ file_types=['.txt', '.md', '.docx', '.pdf']
105
+ )
106
+
107
+ file.upload(upload_file,
108
+ inputs=file,
109
+ outputs=selectFile)
110
+ with gr.Column(scale=4):
111
+ chatbot = gr.Chatbot(label='Chinese-LangChain').style(height=400)
112
+ message = gr.Textbox(label='请输入问题')
113
+ state = gr.State()
114
+ with gr.Row():
115
+ clear_history = gr.Button("🧹 清除历史对话")
116
+ send = gr.Button("🚀 发送")
117
+
118
+ # 发送按钮 提交
119
+ send.click(predict,
120
+ inputs=[
121
+ message, large_language_model,
122
+ embedding_model, state
123
+ ],
124
+ outputs=[message, chatbot, state])
125
+
126
+ # 清空历史对话按钮 提交
127
+ clear_history.click(fn=clear_session,
128
+ inputs=[],
129
+ outputs=[chatbot, state],
130
+ queue=False)
131
+
132
+ # 输入框 回车
133
+ message.submit(predict,
134
+ inputs=[
135
+ message, large_language_model,
136
+ embedding_model, state
137
+ ],
138
+ outputs=[message, chatbot, state])
139
+ with gr.Column(scale=2):
140
+ message = gr.Textbox(label='搜索结果')
141
+ demo.queue().launch(server_name='0.0.0.0', server_port=8008, share=False)
requirements.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ unstructured[local-inference]
2
+ layoutparser[layoutmodels,tesseract]
3
+ nltk
4
+ sentence-transformers
5
+ beautifulsoup4
6
+ icetk
7
+ cpm_kernels
8
+ faiss-cpu
9
+ gradio>=3.25.0
tests/test_langchain.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+
3
+ from langchain.document_loaders import UnstructuredFileLoader
4
+ from langchain.embeddings.huggingface import HuggingFaceEmbeddings
5
+ from langchain.vectorstores import FAISS
6
+
7
+ embedding_model_name = '/home/searchgpt/pretrained_models/ernie-gram-zh'
8
+ docs_path = 'docs'
9
+ embeddings = HuggingFaceEmbeddings(model_name=embedding_model_name)
10
+
11
+ docs = []
12
+
13
+ for doc in os.listdir(docs_path):
14
+ if doc.endswith('.txt'):
15
+ print(doc)
16
+ loader = UnstructuredFileLoader(f'{docs_path}/{doc}', mode="elements")
17
+ doc = loader.load()
18
+ docs.extend(doc)
19
+
20
+ vector_store = FAISS.from_documents(docs, embeddings)
21
+ vector_store.save_local('vector_store_local')
22
+ search_result = vector_store.similarity_search_with_score(query='科比', k=2)
23
+ print(search_result)
24
+
25
+ loader = UnstructuredFileLoader(f'{docs_path}/added/科比.txt', mode="elements")
26
+ doc = loader.load()
27
+ vector_store.add_documents(doc)
28
+ print(doc)
29
+ search_result = vector_store.similarity_search_with_score(query='科比·布莱恩特', k=2)
30
+ print(search_result)
31
+
32
+
33
+ """
34
+ [(Document(page_content='王治郅,1977年7月8日出生于北京,前中国篮球运动员,司职大前锋/中锋,现已退役。 [1]', metadata={'source': 'docs/王治郅.txt', 'filename': 'docs/王治郅.txt', 'category': 'Title'}), 285.40765), (Document(page_content='王治郅是中国篮球界进入NBA的第一人,被评选为中国篮坛50大杰出人物和中国申办奥运特使。他和姚明、蒙克·巴特尔一起,被称为篮球场上的“移动长城”。 [5]', metadata={'source': 'docs/王治郅.txt', 'filename': 'docs/王治郅.txt', 'category': 'NarrativeText'}), 290.19086)]
35
+ [Document(page_content='科比·布莱恩特(Kobe Bryant,1978年8月23日—2020年1月26日),全名科比·比恩·布莱恩特·考克斯(Kobe Bean Bryant Cox),出生于美国宾夕法尼亚州费城,美国已故篮球运动员,司职得分后卫/小前锋。 [5] [24] [84]', metadata={'source': 'docs/added/科比.txt', 'filename': 'docs/added/科比.txt', 'category': 'NarrativeText'}), Document(page_content='1996年NBA选秀,科比于第1轮第13顺位被夏洛特黄蜂队选中并被交易至洛杉矶湖人队,整个NBA生涯都效力于洛杉矶湖人队;共获得5次NBA总冠军、1次NBA常规赛MVP、2次NBA总决赛MVP、4次NBA全明星赛MVP、2次NBA赛季得分王;共入选NBA全明星首发阵容18次、NBA最佳阵容15次(其中一阵11次、二阵2次、三阵2次)、NBA最佳防守阵容12次(其中一阵9次、二阵3次)。 [9] [24]', metadata={'source': 'docs/added/科比.txt', 'filename': 'docs/added/科比.txt', 'category': 'Title'}), Document(page_content='2007年,科比首次入选美国国家男子篮球队,后帮助美国队夺得2007年美洲男篮锦标赛金牌、2008年北京奥运会男子篮球金牌以及2012年伦敦奥运会男子篮球金牌。 [91]', metadata={'source': 'docs/added/科比.txt', 'filename': 'docs/added/科比.txt', 'category': 'Title'}), Document(page_content='2015年11月30日,科比发文宣布将在赛季结束后退役。 [100] 2017年12月19日,湖人队为科比举行球衣退役仪式。 [22] 2020年4月5日,科比入选奈·史密斯篮球名人纪念堂。 [7]', metadata={'source': 'docs/added/科比.txt', 'filename': 'docs/added/科比.txt', 'category': 'Title'}), Document(page_content='美国时间2020年1月26日(北京时间2020年1月27日),科比因直升机事故遇难,享年41岁。 [23]', metadata={'source': 'docs/added/科比.txt', 'filename': 'docs/added/科比.txt', 'category': 'Title'})]
36
+ [(Document(page_content='科比·布莱恩特(Kobe Bryant,1978年8月23日—2020年1月26日),全名科比·比恩·布莱恩特·考克斯(Kobe Bean Bryant Cox),出生于美国宾夕法尼亚州费城,美国已故篮球运动员,司职得分后卫/小前锋。 [5] [24] [84]', metadata={'source': 'docs/added/科比.txt', 'filename': 'docs/added/科比.txt', 'category': 'NarrativeText'}), 179.68744), (Document(page_content='2015年11月30日,科比发文宣布将在赛季结束后退役。 [100] 2017年12月19日,湖人队为科比举行球衣退役仪式。 [22] 2020年4月5日,科比入选奈·史密斯篮球名人纪念堂。 [7]', metadata={'source': 'docs/added/科比.txt', 'filename': 'docs/added/科比.txt', 'category': 'Title'}), 200.57565)]
37
+ """