Native CLI i18n: The TrustGraph CLI has built-in translation support that dynamically loads language strings. You can test and use different languages by simply passing the --lang flag (e.g., --lang es for Spanish, --lang ru for Russian) or by configuring your environment's LANG variable. Automated Docs Translations: This PR introduces autonomously translated Markdown documentation into several target languages, including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew, Arabic, Simplified Chinese, and Russian.
19 KiB
| layout | title | parent |
|---|---|---|
| default | Vigezo vya Kiufundi vya Utoaji wa Majibu ya LLM kwa Kutiririsha | Swahili (Beta) |
Vigezo vya Kiufundi vya Utoaji wa Majibu ya LLM kwa Kutiririsha
Beta Translation: This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
Muhtasari
Vigezo hivi vinaelezea utekelezaji wa msaada wa utiririshaji kwa majibu ya LLM katika TrustGraph. Utiririshaji unawezesha utoaji wa wakati halisi wa alama (tokens) zinazozalishwa na LLM, badala ya kusubiri hadi majibu kamili yatengenezwe.
Utendaji huu unaunga mkono matumizi yafuatayo:
- Mawasiliano ya Mtumiaji ya Kawaida: Tuma alama kwenye UI wakati zinaozalishwa, huku ukitoa maoni ya kuonekana mara moja.
- Punguuzo la Muda wa Alama ya Kwanza: Watumiaji huona matokeo mara moja badala ya kusubiri hadi utengenezaji kamili utimalike.
- Usimamizi wa Majibu Marefu: Shirikisha matokeo marefu sana ambayo vinginevyo yanaweza kusababisha kukatika au kuzidi mipaka ya kumbukumbu.
- Matumizi Tendo: Wezesha mawasiliano na mawakala yenye majibu.
Lengo
Ulinganishaji na Mifumo ya Zamani: Wateja wa zamani ambao hawatumiwi teknolojia ya utiririshaji wanaendelea kufanya kazi bila mabadiliko. Muundo wa API Unaofuata Kanuni: Utiririshaji na mfumo ambao hautiririshi hutumia muundo sawa na tofauti ndogo. Uwezo wa Mtoa Huduma: Kusaidia utiririshaji pale unapopatikana, na utaratibu wa kurejesha pale unapokosekana. Utekelezaji Hatua kwa Hatua: Utaratibu wa kutekeleza hatua kwa hatua ili kupunguza hatari. Usaidizi Kamili: Utiririshaji kutoka kwa mtoa huduma wa LLM hadi kwa programu za mteja kupitia Pulsar, Gateway API, na Python API.
Asili
Muundo wa Sasa
Mchakato wa sasa wa kukamilisha maandishi wa LLM unafanya kazi kama ifuatavyo:
- Mteja hutuma
TextCompletionRequestpamoja na sehemu zasystemnaprompt. - Huduma ya LLM huchakata ombi na kusubiri uzalishaji kamili.
TextCompletionResponsemoja inarejeshwa pamoja naresponsekamili.
Muundo wa sasa (trustgraph-base/trustgraph/schema/services/llm.py):
class TextCompletionRequest(Record):
system = String()
prompt = String()
class TextCompletionResponse(Record):
error = Error()
response = String()
in_token = Integer()
out_token = Integer()
model = String()
Marekebisho ya Sasa
Ucheleweshaji: Watumiaji lazima wasubiri hadi utengenezaji kukamilika kabisa kabla ya kuona matokeo yoyote. Hatari ya Muda wa Kufikia (Timeout): Utengenezaji mrefu unaweza kuzidi mipaka ya muda wa kufikia ya mteja. Uzoefu duni wa mtumiaji (UX): Hakuna maelezo wakati wa utengenezaji huunda hisia ya utaratibu polepole. Matumizi ya Rasilimali: Majibu kamili lazima yakahifadhiwe katika kumbukumbu.
Maelekezo haya yanashughulikia mapungufu haya kwa kuwezesha utoaji wa majibu kwa hatua, huku ikiendelea kudumisha utangamano kamili wa zamani.
Muundo wa Kiufundi
Awamu ya 1: Miundombinu
Awamu ya 1 huunda msingi wa utiririshaji kwa kufanya mabadiliko katika muundo, API, na zana za CLI.
Mabadiliko ya Muundo
Muundo wa LLM (trustgraph-base/trustgraph/schema/services/llm.py)
Mabadiliko ya Ombi:
class TextCompletionRequest(Record):
system = String()
prompt = String()
streaming = Boolean() # NEW: Default false for backward compatibility
streaming: Wakati true, huomba utoaji wa majibu kwa njia ya mtiririko.
Chaguya: false (tabia iliyopo inahifadhiwa).
Mabadiliko ya Majibu:
class TextCompletionResponse(Record):
error = Error()
response = String()
in_token = Integer()
out_token = Integer()
model = String()
end_of_stream = Boolean() # NEW: Indicates final message
end_of_stream: Wakati true, inaonyesha kwamba hii ndiyo jibu la mwisho (au pekee).
Kwa ombi lisilo la utiririshaji: Jibu moja na end_of_stream=true.
Kwa ombi la utiririshaji: Majibu mengi, yote na end_of_stream=false.
isipokuwa jibu la mwisho.
Muundo wa Ombi (trustgraph-base/trustgraph/schema/services/prompt.py)
Huduma ya ombi inajumuisha kukamilisha maandishi, kwa hivyo inafuata muundo sawa:
Mabadiliko ya Ombi:
class PromptRequest(Record):
id = String()
terms = Map(String())
streaming = Boolean() # NEW: Default false
Mabadiliko ya Majibu:
class PromptResponse(Record):
error = Error()
text = String()
object = String()
end_of_stream = Boolean() # NEW: Indicates final message
Mabadiliko ya API ya Langara
API ya Langara lazima iweze kuonyesha uwezo wa utiririshaji kwa wateja wa HTTP/WebSocket.
Sasisho za API ya REST:
POST /api/v1/text-completion: Kukubali parameter streaming katika mwili wa ombi
Tabia ya majibu inategemea bendera ya utiririshaji:
streaming=false: Jibu moja la JSON (tabia ya sasa)
streaming=true: Mto wa Matukio Yanayotumwa na Server (SSE) au ujumbe wa WebSocket
Muundo wa Majibu (Utiririshaji):
Kila sehemu iliyoyirishwa ifuataye muundo sawa:
{
"response": "partial text...",
"end_of_stream": false,
"model": "model-name"
}
Sehemu ya mwisho:
{
"response": "final text chunk",
"end_of_stream": true,
"in_token": 150,
"out_token": 500,
"model": "model-name"
}
Mabadiliko ya API ya Python
API ya mteja wa Python lazima iunge mkono njia zote mbili za utiririshaji na zisizo za utiririshaji huku ikiendelea kutoa utangamano na matoleo ya awali.
Sasisho za LlmClient (trustgraph-base/trustgraph/clients/llm_client.py):
class LlmClient(BaseClient):
def request(self, system, prompt, timeout=300, streaming=False):
"""
Non-streaming request (backward compatible).
Returns complete response string.
"""
# Existing behavior when streaming=False
async def request_stream(self, system, prompt, timeout=300):
"""
Streaming request.
Yields response chunks as they arrive.
"""
# New async generator method
Sasisho za PromptClient (trustgraph-base/trustgraph/base/prompt_client.py):
Mfumo sawa na parameter ya streaming na toleo la jenereta isiyo na usumbufu.
Mabadiliko ya Zana ya CLI
tg-invoke-llm (trustgraph-cli/trustgraph/cli/invoke_llm.py):
tg-invoke-llm [system] [prompt] [--no-streaming] [-u URL] [-f flow-id]
Uhamishaji (streaming) huwezeshwa kwa chagu kuendana na uzoefu bora wa mtumiaji.
Bendera --no-streaming inazuia uhamishaji.
Wakati uhamishaji unafanya kazi: Tuma alama (tokens) kwenye stdout kadri zinavyofika.
Wakati uhamishaji haufanyi kazi: Subiri jibu kamili, kisha toa.
tg-invoke-prompt (trustgraph-cli/trustgraph/cli/invoke_prompt.py):
tg-invoke-prompt [template-id] [var=value...] [--no-streaming] [-u URL] [-f flow-id]
Mfumo sawa na tg-invoke-llm.
Mabadiliko ya Darasa Msingi la Huduma ya LLM.
LlmService (trustgraph-base/trustgraph/base/llm_service.py):
class LlmService(FlowProcessor):
async def on_request(self, msg, consumer, flow):
request = msg.value()
streaming = getattr(request, 'streaming', False)
if streaming and self.supports_streaming():
async for chunk in self.generate_content_stream(...):
await self.send_response(chunk, end_of_stream=False)
await self.send_response(final_chunk, end_of_stream=True)
else:
response = await self.generate_content(...)
await self.send_response(response, end_of_stream=True)
def supports_streaming(self):
"""Override in subclass to indicate streaming support."""
return False
async def generate_content_stream(self, system, prompt, model, temperature):
"""Override in subclass to implement streaming."""
raise NotImplementedError()
--
Awamu ya 2: Uthibitisho wa Dhana wa VertexAI
Awamu ya 2 inatekeleza utiririshaji katika mtoa huduma mmoja (VertexAI) ili kuthibitisha miundombinu na kuwezesha majaribio ya mwisho hadi mwisho.
Utendaji wa VertexAI
Moduli: trustgraph-vertexai/trustgraph/model/text_completion/vertexai/llm.py
Mabadiliko:
- Badilisha
supports_streaming()ili irudisheTrue - Leta mtayarishaji wa async
generate_content_stream() - Shiriki modeli zote za Gemini na Claude (kupitia API ya VertexAI Anthropic)
Utiririshaji wa Gemini:
async def generate_content_stream(self, system, prompt, model, temperature):
model_instance = self.get_model(model, temperature)
response = model_instance.generate_content(
[system, prompt],
stream=True # Enable streaming
)
for chunk in response:
yield LlmChunk(
text=chunk.text,
in_token=None, # Available only in final chunk
out_token=None,
)
# Final chunk includes token counts from response.usage_metadata
Claude (kupitia VertexAI Anthropic) Uhamishaji wa Data:
async def generate_content_stream(self, system, prompt, model, temperature):
with self.anthropic_client.messages.stream(...) as stream:
for text in stream.text_stream:
yield LlmChunk(text=text)
# Token counts from stream.get_final_message()
Mtihani
Majaribio ya kitengo kwa ajili ya kusanyiko la majibu ya utiririshaji Majaribio ya ujumuishaji na VertexAI (Gemini na Claude) Majaribio kamili: CLI -> Gateway -> Pulsar -> VertexAI -> nyuma Majaribio ya utangamano: Maombi ya isiyo ya utiririshaji bado hufanya kazi
--
Awamu ya 3: Watoa Huduma Wote wa LLM
Awamu ya 3 inaongeza utiifu wa utiririshaji kwa watoa huduma wote wa LLM katika mfumo.
Hali ya Utumiaji wa Mtoa Huduma
Kila mtoa huduma lazima ifanye mojawapo ya yafuatayo:
- Utiifu Kamili wa Utiririshaji: Tengeneza
generate_content_stream() - Njia ya Utangamano: Shikilia bendera ya
end_of_streamkwa usahihi (irudishe jibu moja naend_of_stream=true)
| Mtoa Huduma | Kifurushi | Utiifu wa Utiririshaji |
|---|---|---|
| OpenAI | trustgraph-flow | Kamili (API ya asili ya utiririshaji) |
| Claude/Anthropic | trustgraph-flow | Kamili (API ya asili ya utiririshaji) |
| Ollama | trustgraph-flow | Kamili (API ya asili ya utiririshaji) |
| Cohere | trustgraph-flow | Kamili (API ya asili ya utiririshaji) |
| Mistral | trustgraph-flow | Kamili (API ya asili ya utiririshaji) |
| Azure OpenAI | trustgraph-flow | Kamili (API ya asili ya utiririshaji) |
| Google AI Studio | trustgraph-flow | Kamili (API ya asili ya utiririshaji) |
| VertexAI | trustgraph-vertexai | Kamili (Awamu ya 2) |
| Bedrock | trustgraph-bedrock | Kamili (API ya asili ya utiririshaji) |
| LM Studio | trustgraph-flow | Kamili (Inafaa na OpenAI) |
| LlamaFile | trustgraph-flow | Kamili (Inafaa na OpenAI) |
| vLLM | trustgraph-flow | Kamili (Inafaa na OpenAI) |
| TGI | trustgraph-flow | Itatolewa baadaye |
| Azure | trustgraph-flow | Itatolewa baadaye |
Mfumo wa Utumiaji
Kwa watoa huduma wanaofaa na OpenAI (OpenAI, LM Studio, LlamaFile, vLLM):
async def generate_content_stream(self, system, prompt, model, temperature):
response = await self.client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system},
{"role": "user", "content": prompt}
],
temperature=temperature,
stream=True
)
async for chunk in response:
if chunk.choices[0].delta.content:
yield LlmChunk(text=chunk.choices[0].delta.content)
--
Awamu ya 4: API ya Wakala
Awamu ya 4 inaongeza utiririshaji kwenye API ya Wakala. Hii ni ngumu zaidi kwa sababu API ya Wakala tayari ni mfumo wa ujumbe mwingi (fikra → kitendo → uchunguzi → rudia → jibu la mwisho).
Mpango wa Sasa wa Wakala
class AgentStep(Record):
thought = String()
action = String()
arguments = Map(String())
observation = String()
user = String()
class AgentRequest(Record):
question = String()
state = String()
group = Array(String())
history = Array(AgentStep())
user = String()
class AgentResponse(Record):
answer = String()
error = Error()
thought = String()
observation = String()
Mabadiliko Yanayopendekezwa ya Muundo wa Wakala
Omba Mabadiliko:
class AgentRequest(Record):
question = String()
state = String()
group = Array(String())
history = Array(AgentStep())
user = String()
streaming = Boolean() # NEW: Default false
Mabadiliko ya Majibu:
Wakala hutengeneza aina nyingi za matokeo wakati wa mchakato wake wa kufikiri: Mawazo (ufikiri) Vitendo (simu za zana) Uchunguzi (matokeo ya zana) Jibu (jibu la mwisho) Madosa
Kwa kuwa chunk_type inaonyesha aina gani ya maudhui yanatumiwa, nafasi tofauti
za answer, error, thought, na observation zinaweza kuunganishwa katika
nafasi moja ya content:
class AgentResponse(Record):
chunk_type = String() # "thought", "action", "observation", "answer", "error"
content = String() # The actual content (interpretation depends on chunk_type)
end_of_message = Boolean() # Current thought/action/observation/answer is complete
end_of_dialog = Boolean() # Entire agent dialog is complete
Maana ya Viwanja:
chunk_type: Inaonyesha aina ya yaliyomo katika sehemu content
"thought": Tafakari/fikra za wakala
"action": Chombo/kitendo kinachotumika
"observation": Matokeo ya utekelezaji wa chombo
"answer": Jibu la mwisho kwa swali la mtumiaji
"error": Ujumbe wa kosa
content: Yaliyomo halisi yanayotiririshwa, ambayo hutafsiriwa kulingana na chunk_type
end_of_message: Wakati true, aina ya sehemu ya sasa imekamilika
Mfano: Alama zote za fikra ya sasa zimetumwa
Inaruhusu wateja kujua wakati wa kuendelea na hatua inayofuata
end_of_dialog: Wakati true, mwingiliano wote wa wakala umekamilika
Hii ndio ujumbe wa mwisho katika mtiririko
Tabia ya Utiririshaji wa Wakala
Wakati streaming=true:
- Utiririshaji wa fikra:
Sehemu nyingi zenye
chunk_type="thought",end_of_message=falseSehemu ya mwisho ya fikra inaend_of_message=true - Arifa ya kitendo:
Sehemu moja yenye
chunk_type="action",end_of_message=true - Uchunguzi:
Sehemu(ma) yenye
chunk_type="observation", ya mwisho inaend_of_message=true - Rudia hatua za 1-3 wakati wakala anafikiri
- Jibu la mwisho:
chunk_type="answer"yenye jibu la mwisho katikacontentSehemu ya mwisho inaend_of_message=true,end_of_dialog=true
Mfululizo wa Mfano wa Mtiririko:
{chunk_type: "thought", content: "I need to", end_of_message: false, end_of_dialog: false}
{chunk_type: "thought", content: " search for...", end_of_message: true, end_of_dialog: false}
{chunk_type: "action", content: "search", end_of_message: true, end_of_dialog: false}
{chunk_type: "observation", content: "Found: ...", end_of_message: true, end_of_dialog: false}
{chunk_type: "thought", content: "Based on this", end_of_message: false, end_of_dialog: false}
{chunk_type: "thought", content: " I can answer...", end_of_message: true, end_of_dialog: false}
{chunk_type: "answer", content: "The answer is...", end_of_message: true, end_of_dialog: true}
Wakati streaming=false:
Tabia ya sasa inahifadhiwa
Jibu moja lenye jibu kamili
end_of_message=true, end_of_dialog=true
Bandari na API ya Python
Bandari: Njia mpya ya SSE/WebSocket kwa utiririshaji wa wakala
API ya Python: Njia mpya ya agent_stream() ya jenereta ya async
--
Masuala ya Usalama
Hakuna eneo jipya la shambulio: Utiririshaji hutumia uthibitishaji/idhini sawa Mipaka ya kasi: Tumia mipaka ya kasi kwa kila tokeni au kila sehemu ikiwa inahitajika Usimamizi wa muunganisho: Vunjeni kwa usahihi mitiririsho wakati mteja anakatiza Usimamizi wa muda: Maombi ya utiririshaji yanahitaji usimamizi sahihi wa muda
Masuala ya Utendaji
Kumbukumbu: Utiririshaji hupunguza matumizi ya juu ya kumbukumbu (hakuna buffering kamili ya jibu) Ucheleweshaji: Muda wa hadi tokeni ya kwanza umepunguzwa sana Mzigo wa muunganisho: Muunganisho wa SSE/WebSocket una mzigo wa kudumisha muunganisho Uwezo wa Pulsar: Ujumbe mdogo mwingi dhidi ya ujumbe mmoja mkubwa mbadala
Mkakati wa Majaribio
Majaribio ya Kitengo
Usanidi/uondoaji wa schema na sehemu mpya Utangamano wa nyuma (sehemu zilizopotea hutumia chaguo-msingi) Mantiki ya kusanyiko ya sehemu
Majaribio ya Uunganisho
Utaratibu wa utiririshaji wa kila mtoa huduma wa LLM Njia za utiririshaji za API ya Bandari Njia za utiririshaji za mteja wa Python
Majaribio ya Ukingo hadi Ukingo
Pato la utiririshaji la zana ya CLI Mchakato kamili: Mteja → Bandari → Pulsar → LLM → kurudi Mizigo mchanganyiko ya utiririshaji/isiyo ya utiririshaji
Majaribio ya Utangamano wa Nyuma
Wateja wazima hufanya kazi bila mabadiliko Maombi ya utiririshaji hayatendeshwi sawa
Mpango wa Uhamishaji
Awamu ya 1: Miundombinu
Weka mabadiliko ya schema (utangamano wa nyuma) Weka sasisho za API ya Bandari Weka sasisho za API ya Python Toa sasisho za zana ya CLI
Awamu ya 2: VertexAI
Tuma utekelezaji wa VertexAI unaotumia mtiririko. Thibitisha kwa kutumia majaribio.
Awamu ya 3: Watoa Huduma Wote
Toa sasisho za watoa huduma hatua kwa hatua. Fuatilia masuala yaliyotokea.
Awamu ya 4: API ya Wakala
Tuma mabadiliko ya muundo wa wakala. Tuma utekelezaji wa mtiririko wa wakala. Sasisha nyaraka.
Ratiba
| Awamu | Maelezo | Utendaji |
|---|---|---|
| Awamu ya 1 | Miundombinu | Hakuna |
| Awamu ya 2 | Jaribio la VertexAI | Awamu ya 1 |
| Awamu ya 3 | Watoa Huduma Wote | Awamu ya 2 |
| Awamu ya 4 | API ya Wakala | Awamu ya 3 |
Maamuzi ya Ubunifu
Maswali yafuatayo yaliyulizwa yamejibiwa wakati wa maelezo:
-
Hesabu za Tokeni katika Mtiririko: Hesabu za tokeni ni tofauti, sio jumla. Wateja wanaweza kuzijumlisha ikiwa ni lazima. Hii inalingana na jinsi watoa huduma wengi wanavyoripoti matumizi na inarahisisha utekelezaji.
-
Usimamizi wa Madhira katika Mitiririko: Ikiwa hitilafu itatokea, sehemu ya
erroritajazwa na sehemu zingine hazihitajiki. Hitilafu daima ndio mawasiliano ya mwisho jumbe zingine za baadae haziruhusiwi au zinatarajiwa baada ya hitilafu. Kwa mitiririko ya LLM/Prompt,end_of_stream=true. Kwa mitiririko ya Wakala,chunk_type="error"pamoja naend_of_dialog=true. -
Urekebishaji wa Majibu ya Kawaida: Itifaki ya mawasiliano (Pulsar) ni thabiti, kwa hivyo, kujaribu tena jumbe za mtu binafsi haihitajiki. Ikiwa mteja unapoteza uhusiano wa mtiririko au kukatika, lazima ujaribu tena ombi lote kutoka mwanzo.
-
Mtiririko wa Huduma ya Prompt: Mtiririko unaoendeshwa tu kwa maandishi (
text) majibu, sio majibu yaliyopangwa (object). Huduma ya prompt inajua mapema ikiwa pato itakuwa JSON au maandishi kulingana na kiolezo cha prompt. Ikiwa ombi la mtiririko lilitolewa kwa prompt ya pato ya JSON, huduma inapaswa: Kurudisha JSON kamili katika jibu moja pamoja naend_of_stream=true, au Kukataa ombi la mtiririko na hitilafu
Maswali Yaliyobaki
Hakuna kwa sasa.
Marejeleo
Muundo wa sasa wa LLM: trustgraph-base/trustgraph/schema/services/llm.py
Muundo wa sasa wa prompt: trustgraph-base/trustgraph/schema/services/prompt.py
Muundo wa sasa wa wakala: trustgraph-base/trustgraph/schema/services/agent.py
Msingi wa huduma ya LLM: trustgraph-base/trustgraph/base/llm_service.py
Mtoa huduma wa VertexAI: trustgraph-vertexai/trustgraph/model/text_completion/vertexai/llm.py
API ya lango: trustgraph-base/trustgraph/api/
Zana za CLI: trustgraph-cli/trustgraph/cli/