@@ -29,7 +29,7 @@ def _build_repos_table(self, repos: List[Dict]) -> str:
2929 sorted_repos = sorted (repos , key = lambda x : x .get ('stars_today' , 0 ), reverse = True )
3030
3131 table_parts = [
32- "| 排名 | 项目 | 语言 | 今日 | 总计 | 简介 |" ,
32+ "| 排名 | 项目 | 语言 | 今日 | 总计 | 一句话总结 |" ,
3333 "|:---:|------|:----:|------:|-----:|------|"
3434 ]
3535
@@ -40,13 +40,10 @@ def _build_repos_table(self, repos: List[Dict]) -> str:
4040 language = repo .get ('language' , 'Unknown' ) or 'Unknown'
4141 stars_today = repo .get ('stars_today' , 0 )
4242 stars = repo .get ('stars' , 0 )
43- desc = repo .get ('description' , 'No description' ) or 'No description'
44- # 截断描述
45- if len (desc ) > 30 :
46- desc = desc [:27 ] + "..."
43+ summary = "[基于README生成]"
4744
4845 table_parts .append (
49- f"| { rank } | [{ name } ]({ url } ) | { language } | +{ stars_today :,} | { stars :,} | { desc } |"
46+ f"| { rank } | [{ name } ]({ url } ) | { language } | +{ stars_today :,} | { stars :,} | { summary } |"
5047 )
5148
5249 return "\n " .join (table_parts )
@@ -56,53 +53,34 @@ def _build_repos_summary_for_llm(self, repos: List[Dict]) -> str:
5653 summary_parts = []
5754 for i , repo in enumerate (repos , 1 ):
5855 topics = ", " .join (repo .get ("topics" , [])[:5 ]) if repo .get ("topics" ) else "无"
56+ original_desc = repo .get ('description' , 'No description' ) or 'No description'
57+
5958 summary_parts .append (
6059 f"{ i } . **{ repo .get ('full_name' , 'Unknown' )} ** ({ repo .get ('language' , 'Unknown' )} )\n "
6160 f" - Stars: { repo .get ('stars' , 0 ):,} (+{ repo .get ('stars_today' , 0 ):,} today)\n "
6261 f" - Forks: { repo .get ('forks' , 0 ):,} \n "
63- f" - Description: { repo . get ( 'description' , 'No description' ) } \n "
62+ f" - Description: { original_desc } \n "
6463 f" - Topics: { topics } \n "
6564 f" - URL: { repo .get ('url' , '' )} "
6665 )
6766 return "\n \n " .join (summary_parts )
6867
6968 def _build_detailed_repo_info (self , repo : Dict ) -> str :
7069 """Build detailed repository info including README excerpt"""
70+ original_desc = repo .get ('description' , 'No description' ) or 'No description'
71+ readme_excerpt = repo .get ('readme_excerpt' , '' )[:500 ] if repo .get ('readme_excerpt' ) else ''
72+
7173 info_parts = [
7274 f"## 项目: { repo .get ('full_name' , 'Unknown' )} " ,
7375 f"- **编程语言**: { repo .get ('language' , 'Unknown' )} " ,
7476 f"- **Star 数**: { repo .get ('stars' , 0 ):,} (+{ repo .get ('stars_today' , 0 ):,} today)" ,
7577 f"- **Fork 数**: { repo .get ('forks' , 0 ):,} " ,
76- f"- **Open Issues**: { repo .get ('open_issues' , 0 ):,} " ,
77- f"- **License**: { repo .get ('license' , 'Unknown' )} " ,
78- f"- **项目描述**: { repo .get ('description' , 'No description' )} " ,
78+ f"- **原始描述**: { original_desc } " ,
7979 ]
8080
81- # Topics
82- if repo .get ("topics" ):
83- info_parts .append (f"- **Topics**: { ', ' .join (repo ['topics' ][:10 ])} " )
84-
85- # Languages breakdown
86- if repo .get ("languages" ):
87- total = sum (repo ["languages" ].values ())
88- if total > 0 :
89- lang_breakdown = ", " .join ([
90- f"{ lang } : { bytes / total * 100 :.1f} %"
91- for lang , bytes in list (repo ["languages" ].items ())[:5 ]
92- ])
93- info_parts .append (f"- **语言分布**: { lang_breakdown } " )
94-
95- # Recent commits
96- if repo .get ("recent_commits" ):
97- info_parts .append ("\n **最近提交**:" )
98- for commit in repo ["recent_commits" ][:3 ]:
99- info_parts .append (f" - [{ commit ['sha' ]} ] { commit ['message' ]} " )
100-
101- # README excerpt
102- if repo .get ("readme_excerpt" ):
103- # 截取 README 的前 800 字符
104- readme = repo ["readme_excerpt" ][:800 ]
105- info_parts .append (f"\n **README 摘要**:\n ```\n { readme } \n ```" )
81+ # 添加README摘要用于LLM分析
82+ if readme_excerpt :
83+ info_parts .append (f"\n **README摘要**:\n ```\n { readme_excerpt } \n ```" )
10684
10785 return "\n " .join (info_parts )
10886
@@ -191,16 +169,19 @@ def analyze_trends(self, repos: List[Dict]) -> str:
191169请用中文提供以下内容:
192170
193171### 热点总结
194- 用一段话(50-80字)概括今日GitHub热榜的主要热点和趋势,要抓住最核心的1-2个趋势。这段话将作为报告的开篇摘要。
172+ 用一段话(50-80字)概括今日GitHub热榜的主要热点和趋势,要抓住最核心的1-2个趋势。
195173
196174### 关键观察
197175用3-4个要点(每个20-40字)列出今日最值得关注的技术趋势或现象,使用 markdown 加粗标注关键词。
198176
177+ ### 项目一句话总结
178+ 基于每个项目的README、描述和技术特点,为每个项目生成一个精准的一句话中文总结(15-25字),突出核心价值。
179+
199180格式要求:
2001811. 热点总结直接输出一段话,不需要标题
2011822. 关键观察用 "- **关键词**:说明" 的格式
202- 3. 语言要精炼有力,避免废话
203- 4. 内容要有洞察力,不要泛泛而谈 """
183+ 3. 项目总结要基于技术实质,不是简单翻译
184+ 4. 语言要精炼有力,避免废话 """
204185
205186 response = self .client .chat .completions .create (
206187 model = self .model ,
@@ -242,55 +223,39 @@ def analyze_single_repo_detailed(self, repo: Dict, rank: int) -> str:
242223
243224### { rank } . { repo .get ('full_name' , 'Unknown' )} — [项目简短定位,5-10个字]
244225
245- > **一句话总结**:[用一句话概括项目的核心价值和特点,30-50字]
246-
247- #### 价值主张
226+ > **一句话总结**:[基于项目的README、代码功能和技术特点,用一句话精准总结项目的核心价值,20-30字]
248227
228+ #### 项目亮点
249229| 维度 | 说明 |
250230|------|------|
251- | **解决痛点** | [项目解决的核心问题,20-40字] |
252- | **目标用户** | [主要使用人群,15-30字] |
253- | **核心亮点** | [3-5个关键特性,用 + 连接] |
254-
255- #### 技术架构
231+ | **核心功能** | [基于README提炼的1-2个核心功能,15-25字] |
232+ | **技术特色** | [技术实现的关键亮点,15-25字] |
233+ | **应用场景** | [主要使用场景,10-20字] |
256234
257- [如果项目有明确的技术流程,用mermaid图展示,格式如下:]
258- ```mermaid
259- graph LR
260- A[输入] --> B[处理]
261- B --> C[输出]
262- ```
263-
264- **技术特色**:
265- - [技术亮点1,15-30字]
266- - [技术亮点2,15-30字]
267- - [技术亮点3,15-30字]
268-
269- #### 热度分析
235+ #### 技术洞察
236+ - **技术价值**:[基于代码和README的技术分析,20-35字]
237+ - **创新点**:[与传统方案相比的创新之处,15-30字]
238+ - **生态位**:[在开源生态中的定位,15-25字]
270239
271- - [基于Star/Fork数据的增长分析,20-40字]
272- - [社区活跃度或生态位置分析,20-40字]
273-
274- #### 快速上手
240+ #### 使用建议
241+ - **适用场景**:[具体使用场景描述,15-25字]
242+ - **上手难度**:[简单/中等/困难 + 原因,10-20字]
275243
244+ #### 快速体验
276245```bash
277- # 简洁的上手命令示例(2-4行)
246+ # 基于README的最简使用示例
247+ git clone { repo .get ('url' , '' )}
248+ cd { repo .get ('name' , 'project' )}
249+ # 添加具体的使用命令
278250```
279251
280- #### 注意事项
281-
282- - [注意事项1]
283- - [注意事项2]
284-
285252---
286253
287254要求:
288- 1. 内容要精炼,避免冗长
289- 2. 技术分析要有深度和洞察
290- 3. mermaid图要简洁清晰,节点不超过6个
291- 4. 代码示例要实用可运行
292- 5. 如果项目信息不足以生成mermaid图,可以省略该部分
293- 6. 不要使用emoji"""
255+ 1. **必须基于README内容**进行分析,不是简单翻译描述
256+ 2. 一句话总结要精准体现项目技术价值
257+ 3. 技术分析要有深度,避免表面描述
258+ 4. 所有内容基于项目实际功能和代码特点"""
294259
295260 response = self .client .chat .completions .create (
296261 model = self .model ,
0 commit comments