Files
assist/LLM配置统一说明.md

145 lines
3.2 KiB
Markdown
Raw Normal View History

# LLM<4C><4D><EFBFBD><EFBFBD>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
## ? <20><><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>ѽ<EFBFBD>LLM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǧ<EFBFBD><EFBFBD>ģ<EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>еط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ȡ<EFBFBD><EFBFBD>
## ?? <20><><EFBFBD>üܹ<C3BC>
### 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>`config/llm_config.py`
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>**Ψһ<CEA8><D2BB>**LLM<4C><4D><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǧ<EFBFBD><C7A7>ģ<EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
```python
QWEN_CONFIG = LLMConfig(
provider="qwen",
api_key="sk-c0dbefa1718d46eaa897199135066f00",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="qwen-plus-latest",
temperature=0.7,
max_tokens=2000
)
# Ĭ<><C4AC>ʹ<EFBFBD><CAB9>ǧ<EFBFBD><C7A7>ģ<EFBFBD><C4A3>
DEFAULT_CONFIG = QWEN_CONFIG
```
### 2. ͳһ<CDB3><D2BB><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`src/config/unified_config.py`
ͳһ<EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD> `config/llm_config.py` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
```python
def _load_default_llm_config(self) -> LLMConfig:
"""<22><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>LLM<4C><4D><EFBFBD><EFBFBD>"""
try:
from config.llm_config import DEFAULT_CONFIG
# ת<><D7AA><EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD>ʽ
return LLMConfig(...)
except Exception as e:
logger.warning(f"<22>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>LLM<4C><4D><EFBFBD>ã<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ: {e}")
return LLMConfig()
```
### 3. ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
ͨ<EFBFBD><EFBFBD> `get_config()` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡȫ<C8A1><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
```python
from src.config.unified_config import get_config
config = get_config()
llm_config = config.llm # <20><>ȡLLM<4C><4D><EFBFBD><EFBFBD>
```
## ? <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
### <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>Ҫʹ<D2AA><CAB9>LLM<4C>ĵط<C4B5><D8B7><EFBFBD>
```python
from src.config.unified_config import get_config
# <20><>ȡLLM<4C><4D><EFBFBD><EFBFBD>
llm_config = get_config().llm
# ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
print(f"Provider: {llm_config.provider}")
print(f"Model: {llm_config.model}")
print(f"API Key: {llm_config.api_key}")
```
### ʾ<><CABE><EFBFBD><EFBFBD>AI<41><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
```python
class AISuggestionService:
def __init__(self):
# <20><>ͳһ<CDB3><D2BB><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡLLM<4C><4D><EFBFBD><EFBFBD>
self.llm_config = get_config().llm
logger.info(f"ʹ<><CAB9>LLM<4C><4D><EFBFBD><EFBFBD>: {self.llm_config.provider} - {self.llm_config.model}")
```
## ? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
1. **<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>**<2A><>ͳһ<CDB3><D2BB><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>򻷾<EFBFBD><F2BBB7BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
2. **<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>**<2A><>`config/llm_config.py` <20>е<EFBFBD> `DEFAULT_CONFIG`
3. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ**<2A><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
## ? <20>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>
### <20><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
ֱ<EFBFBD>ӱ༭ `config/llm_config.py`<EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>API<EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD>ģ<EFBFBD>ͣ<EFBFBD>
```python
QWEN_CONFIG = LLMConfig(
provider="qwen",
api_key="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>API<50><49>Կ", # <20>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>
model="qwen-max", # <20><><EFBFBD>޸<EFBFBD>ģ<EFBFBD><C4A3>
...
)
```
### <20><><EFBFBD><EFBFBD>2<EFBFBD><32>ͨ<EFBFBD><CDA8>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
<EFBFBD>`config/unified_config.json`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD>
```json
{
"llm": {
"provider": "qwen",
"api_key": "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>API<50><49>Կ",
"model": "qwen-plus-latest",
...
}
}
```
### <20><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
```bash
export LLM_API_KEY="<22><><EFBFBD><EFBFBD>API<50><49>Կ"
export LLM_MODEL="qwen-plus-latest"
```
## ? <20><><EFBFBD><EFBFBD>
1. **<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ**<2A><>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD><D2AA> `config/llm_config.py` <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
2. **ͳһ<CDB3><D2BB><EFBFBD><EFBFBD>**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>鶼ͨ<EFBFBD><EFBFBD>ͳһ<EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
3. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><EFBFBD>**<2A><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>Ҫ<EFBFBD>޸Ķദ<C4B6><E0B4A6><EFBFBD><EFBFBD>
4. **<EFBFBD>Զ<EFBFBD>ͬ<EFBFBD><EFBFBD>**<2A><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD>õĵط<C4B5><D8B7>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
5. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fallback<63><6B><EFBFBD>ƣ<EFBFBD>ȷ<EFBFBD><C8B7>ϵͳ<CFB5>ȶ<EFBFBD><C8B6><EFBFBD><EFBFBD><EFBFBD>
## ? <20>Ѹ<EFBFBD><D1B8>µ<EFBFBD><C2B5>ļ<EFBFBD>
- ? `config/llm_config.py` - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `get_default_llm_config()` <20><><EFBFBD><EFBFBD>
- ? `src/config/unified_config.py` - <20><> `config/llm_config.py` <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- ? `src/integrations/ai_suggestion_service.py` - ʹ<><CAB9>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD>
- ? `src/agent/agent_assistant_core.py` - ʹ<><CAB9>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD>
## ? ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- **<2A><>Ҫ**<2A>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>OpenAI<41><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
- **<2A><>Ҫ**ֱ<>Ӵ<EFBFBD> `config/llm_config.py` <20><><EFBFBD><EFBFBD><EBA3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊfallback<63><6B>
- **<2A><><EFBFBD><EFBFBD>**ͨ<><CDA8> `get_config().llm` <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
- <20>޸<EFBFBD><DEB8><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч